From d357cb23264f02fc73d532cdd96cba68fabfd52a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Loguercio?= Date: Fri, 4 Sep 2015 17:13:16 -0500 Subject: [PATCH 1/3] Added new lib to upgrade to webcamJS from JPEGCam - Refs #7181 --- composer.json | 1 + 1 file changed, 1 insertion(+) diff --git a/composer.json b/composer.json index c481e2670c..f693b820b0 100755 --- a/composer.json +++ b/composer.json @@ -76,6 +76,7 @@ "bower-asset/simplewebrtc": "1.15.*", "bower-asset/select2": "4.*", "bower-asset/MathJax": "2.5.*", + "bower-asset/webcamjs": "1.0.*", "clue/graph": "~0.9.0", "graphp/graphviz": "~0.2.0", "graphp/algorithms": "~0.8.0", From fc3e201afbf04e43a4b846af98186a1dbcb83f91 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Loguercio?= Date: Fri, 4 Sep 2015 17:20:22 -0500 Subject: [PATCH 2/3] Moving php script to Documents and Upgrade to WebCamJS lib - Refs #7181 --- app/Resources/public/css/base.css | 7 + main/document/webcam_clip.php | 167 ++++++++++-------- .../jpegcam => document}/webcam_receiver.php | 28 ++- 3 files changed, 115 insertions(+), 87 deletions(-) rename main/{inc/lib/jpegcam => document}/webcam_receiver.php (82%) diff --git a/app/Resources/public/css/base.css b/app/Resources/public/css/base.css index 19d7bce4d3..3ea42480a2 100644 --- a/app/Resources/public/css/base.css +++ b/app/Resources/public/css/base.css @@ -6330,6 +6330,13 @@ a.sessionView { #prev.disabled { opacity: 0.2; } +.webcamclip_bg{ + width:340px; + height:260px; + border:10px solid; + border-radius: 25px; + border-color: #00677C; +} /* CSS NEW TOP ******************************************************************************/ /* CSS Responsive */ @media (min-width: 1025px) and (max-width: 1200px) { diff --git a/main/document/webcam_clip.php b/main/document/webcam_clip.php index 05ad07393f..d6209f5be6 100755 --- a/main/document/webcam_clip.php +++ b/main/document/webcam_clip.php @@ -8,6 +8,7 @@ * * @author Juan Carlos RaƱa Trabado herodoto@telefonica.net * @since 7/jun/2012 + * @Updated 04/09/2015 Upgrade to WebCamJS */ require_once '../inc/global.inc.php'; @@ -127,78 +128,77 @@ echo '';

-
-
-

- - - - - - - +
+
+

+ + + +
+
+
+ - -
-
-
- - - -   ||   - - -
- - -
- - + -
  +
+ + +
+
+
+
+ + + +   ||   + + +
+
+
+
+print get_lang('ClipSent'); From 7d37d4cf6da7b010eaafc4b148b5ee67c92052c6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Loguercio?= Date: Fri, 4 Sep 2015 17:23:09 -0500 Subject: [PATCH 3/3] Deleting the old lib from upgrade - Refs #7181 --- main/inc/lib/jpegcam/LICENSE.txt | 165 -------------------------- main/inc/lib/jpegcam/index.html | 8 -- main/inc/lib/jpegcam/shutter.mp3 | Bin 13624 -> 0 bytes main/inc/lib/jpegcam/webcam.js | 197 ------------------------------- main/inc/lib/jpegcam/webcam.swf | Bin 6034 -> 0 bytes 5 files changed, 370 deletions(-) delete mode 100755 main/inc/lib/jpegcam/LICENSE.txt delete mode 100755 main/inc/lib/jpegcam/index.html delete mode 100755 main/inc/lib/jpegcam/shutter.mp3 delete mode 100755 main/inc/lib/jpegcam/webcam.js delete mode 100755 main/inc/lib/jpegcam/webcam.swf diff --git a/main/inc/lib/jpegcam/LICENSE.txt b/main/inc/lib/jpegcam/LICENSE.txt deleted file mode 100755 index 3f9959fc56..0000000000 --- a/main/inc/lib/jpegcam/LICENSE.txt +++ /dev/null @@ -1,165 +0,0 @@ - GNU LESSER GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - - This version of the GNU Lesser General Public License incorporates -the terms and conditions of version 3 of the GNU General Public -License, supplemented by the additional permissions listed below. - - 0. Additional Definitions. - - As used herein, "this License" refers to version 3 of the GNU Lesser -General Public License, and the "GNU GPL" refers to version 3 of the GNU -General Public License. - - "The Library" refers to a covered work governed by this License, -other than an Application or a Combined Work as defined below. - - An "Application" is any work that makes use of an interface provided -by the Library, but which is not otherwise based on the Library. -Defining a subclass of a class defined by the Library is deemed a mode -of using an interface provided by the Library. - - A "Combined Work" is a work produced by combining or linking an -Application with the Library. The particular version of the Library -with which the Combined Work was made is also called the "Linked -Version". - - The "Minimal Corresponding Source" for a Combined Work means the -Corresponding Source for the Combined Work, excluding any source code -for portions of the Combined Work that, considered in isolation, are -based on the Application, and not on the Linked Version. - - The "Corresponding Application Code" for a Combined Work means the -object code and/or source code for the Application, including any data -and utility programs needed for reproducing the Combined Work from the -Application, but excluding the System Libraries of the Combined Work. - - 1. Exception to Section 3 of the GNU GPL. - - You may convey a covered work under sections 3 and 4 of this License -without being bound by section 3 of the GNU GPL. - - 2. Conveying Modified Versions. - - If you modify a copy of the Library, and, in your modifications, a -facility refers to a function or data to be supplied by an Application -that uses the facility (other than as an argument passed when the -facility is invoked), then you may convey a copy of the modified -version: - - a) under this License, provided that you make a good faith effort to - ensure that, in the event an Application does not supply the - function or data, the facility still operates, and performs - whatever part of its purpose remains meaningful, or - - b) under the GNU GPL, with none of the additional permissions of - this License applicable to that copy. - - 3. Object Code Incorporating Material from Library Header Files. - - The object code form of an Application may incorporate material from -a header file that is part of the Library. You may convey such object -code under terms of your choice, provided that, if the incorporated -material is not limited to numerical parameters, data structure -layouts and accessors, or small macros, inline functions and templates -(ten or fewer lines in length), you do both of the following: - - a) Give prominent notice with each copy of the object code that the - Library is used in it and that the Library and its use are - covered by this License. - - b) Accompany the object code with a copy of the GNU GPL and this license - document. - - 4. Combined Works. - - You may convey a Combined Work under terms of your choice that, -taken together, effectively do not restrict modification of the -portions of the Library contained in the Combined Work and reverse -engineering for debugging such modifications, if you also do each of -the following: - - a) Give prominent notice with each copy of the Combined Work that - the Library is used in it and that the Library and its use are - covered by this License. - - b) Accompany the Combined Work with a copy of the GNU GPL and this license - document. - - c) For a Combined Work that displays copyright notices during - execution, include the copyright notice for the Library among - these notices, as well as a reference directing the user to the - copies of the GNU GPL and this license document. - - d) Do one of the following: - - 0) Convey the Minimal Corresponding Source under the terms of this - License, and the Corresponding Application Code in a form - suitable for, and under terms that permit, the user to - recombine or relink the Application with a modified version of - the Linked Version to produce a modified Combined Work, in the - manner specified by section 6 of the GNU GPL for conveying - Corresponding Source. - - 1) Use a suitable shared library mechanism for linking with the - Library. A suitable mechanism is one that (a) uses at run time - a copy of the Library already present on the user's computer - system, and (b) will operate properly with a modified version - of the Library that is interface-compatible with the Linked - Version. - - e) Provide Installation Information, but only if you would otherwise - be required to provide such information under section 6 of the - GNU GPL, and only to the extent that such information is - necessary to install and execute a modified version of the - Combined Work produced by recombining or relinking the - Application with a modified version of the Linked Version. (If - you use option 4d0, the Installation Information must accompany - the Minimal Corresponding Source and Corresponding Application - Code. If you use option 4d1, you must provide the Installation - Information in the manner specified by section 6 of the GNU GPL - for conveying Corresponding Source.) - - 5. Combined Libraries. - - You may place library facilities that are a work based on the -Library side by side in a single library together with other library -facilities that are not Applications and are not covered by this -License, and convey such a combined library under terms of your -choice, if you do both of the following: - - a) Accompany the combined library with a copy of the same work based - on the Library, uncombined with any other library facilities, - conveyed under the terms of this License. - - b) Give prominent notice with the combined library that part of it - is a work based on the Library, and explaining where to find the - accompanying uncombined form of the same work. - - 6. Revised Versions of the GNU Lesser General Public License. - - The Free Software Foundation may publish revised and/or new versions -of the GNU Lesser General Public License from time to time. Such new -versions will be similar in spirit to the present version, but may -differ in detail to address new problems or concerns. - - Each version is given a distinguishing version number. If the -Library as you received it specifies that a certain numbered version -of the GNU Lesser General Public License "or any later version" -applies to it, you have the option of following the terms and -conditions either of that published version or of any later version -published by the Free Software Foundation. If the Library as you -received it does not specify a version number of the GNU Lesser -General Public License, you may choose any version of the GNU Lesser -General Public License ever published by the Free Software Foundation. - - If the Library as you received it specifies that a proxy can decide -whether future versions of the GNU Lesser General Public License shall -apply, that proxy's public statement of acceptance of any version is -permanent authorization for you to choose that version for the -Library. \ No newline at end of file diff --git a/main/inc/lib/jpegcam/index.html b/main/inc/lib/jpegcam/index.html deleted file mode 100755 index 8e464d8ce3..0000000000 --- a/main/inc/lib/jpegcam/index.html +++ /dev/null @@ -1,8 +0,0 @@ - - - - - -
- - \ No newline at end of file diff --git a/main/inc/lib/jpegcam/shutter.mp3 b/main/inc/lib/jpegcam/shutter.mp3 deleted file mode 100755 index 16df2b3b56dfc67e0dfa46f84c8c5f176afd76e7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13624 zcmeI1WmFtpv#1*l?hptN+}%C6y9~h{1`kdGAq)g}hrtJe2MF#?2=1;4L4qe}2r?J) zp7Wh`?p^EtzGvO9e)Q~B-95FRs@k=smF4&lfd|1;($nJw05X7wPf$SE++0o9+}zsI z#n!{p+}hc}+6j==RDXC1uyqAH=y|(pDN1Vr+yI~_uK@tqz@y66liEj!Q{bNm?f>&Z z4NV<&fSUVJcz6~5X*{(5X$UI_{BIg=5!wH);Z+de|L+=ZZeiYkY5uVm{GZlz)wN{) z!`i=$@bdhJH5p#vf4%qEA9-p1|5E(D!z(E8zjyIpfAfEDJi74T@^26P+XMghz`s54 zZx8%`>;d?VPB#Fc{hq-g;sem3N^D?cHvmvyn@|jtle>{q@D~p;o-s$|WRV3ozExQR0 zyUhorqOR^-_hCGH*K_0)C4yb>)iL;`b>6~XlmBsfJ#7yOLNJr|@o`8)egt{~V6tC1 zwBtk2EpplU@nhX2$JPmxGj-v{gp$scgJlMq1ReZL60Eu^Z*OlWbD?5%H4G8gBJEuF z&zLDlYth%>cgj>YHWK8L@OdcQsMtolDV{Een-w5IG`6BPu>}D7GCm7I0AeHE$CnPB zljWlwofOG#z~SI8j_W}wE72Ep)c&zpXqC7}r}CrOdS|5eJY@`PI9+l-!76{|J*zP* zYmb`=S~{}{D#g>*bg~~+_xVXe*#Lw<#bia3>+7Jx}3Xky8y@h%@oPeAVbcJJG^L-r>e+`3(X)*4li1Mc4dL!>lTw5Q=rbW;|-R zWLO&a*Ypd>?Lz_)xK06pLL%t_^9*NOnp`7^93-*3ubDiUi97fa2oJ#cxvQy%4?*}k z$Z>_N1+etVG4Zq4Wz;rs6)-o^%cm`0E66e5-yuB(S2Wi-J-6(YK~<5#CPM#=sg`f* zQx;xyR9*z1&+>NFk3a?x&`}d3!Eky0Vp&cdN;ylKO7sH8S%^@e9m*A~UeC@I>i2C~TO?3?Mq zZS}x&Og`3~<_Bv>XVw3ebiXTv3;+naY9Pk5>X(l|r~t+kig`N^1i`$JrJkS6jqDQZ zt&T|wbE@6$03wDo1Ojz&TGd5-v04qs{XIek?HVpGza|$V%jA0y7I$c-b8m(&F_xDN zB_p%E%vbvql}~!a*r}HA`wB{qhhaoe3F{9gRx4zD)#c=}oN0aAeO}6Ags^L?i@G#8^bAMm zPAZ^;5C9N8-bGNZZtDni=;y{eYQJzWFp-)2{Lk1Rz15oT);J2nm$|BTRAjsiFWnVsNlp2ERR0Mij^f3Uupt9Z4UcdS#g}liN|;P}P3`9)WjUzUOhgjU zz#nhk!3Bpio;mn05|ASX1@-*C>9TnQdII1COZzs{00?Oh60Q+f6Hxix^5kj^u z3##;m$Tueu(^VOwFrNPU0n#Iun3`2BE8-mD_fTgr%`^RIEBhX8_Z;@K*7g@~qP)

ZYF8xmYdcJD&k@W+q5Q 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 X_dmb?W3P`uaL7aV{|)s2Xbk@sDL>R` diff --git a/main/inc/lib/jpegcam/webcam.js b/main/inc/lib/jpegcam/webcam.js deleted file mode 100755 index e8fdb7e207..0000000000 --- a/main/inc/lib/jpegcam/webcam.js +++ /dev/null @@ -1,197 +0,0 @@ -/* JPEGCam v1.0.9 */ -/* Webcam library for capturing JPEG images and submitting to a server */ -/* Copyright (c) 2008 - 2009 Joseph Huckaby */ -/* Licensed under the GNU Lesser Public License */ -/* http://www.gnu.org/licenses/lgpl.html */ - -/* Usage: - - Take Snapshot -*/ - -// Everything is under a 'webcam' Namespace -window.webcam = { - version: '1.0.9', - - // globals - ie: !!navigator.userAgent.match(/MSIE/), - protocol: location.protocol.match(/https/i) ? 'https' : 'http', - callback: null, // user callback for completed uploads - swf_url: 'webcam.swf', // URI to webcam.swf movie (defaults to cwd) - shutter_url: 'shutter.mp3', // URI to shutter.mp3 sound - api_url: '', // URL to upload script - loaded: false, // true when webcam movie finishes loading - quality: 90, // JPEG quality (1 - 100) - shutter_sound: true, // shutter sound effect on/off - stealth: false, // stealth mode (do not freeze image upon capture) - hooks: { - onLoad: null, - onComplete: null, - onError: null - }, // callback hook functions - - set_hook: function(name, callback) { - // set callback hook - // supported hooks: onLoad, onComplete, onError - if (typeof(this.hooks[name]) == 'undefined') - return alert("Hook type not supported: " + name); - - this.hooks[name] = callback; - }, - - fire_hook: function(name, value) { - // fire hook callback, passing optional value to it - if (this.hooks[name]) { - if (typeof(this.hooks[name]) == 'function') { - // callback is function reference, call directly - this.hooks[name](value); - } - else if (typeof(this.hooks[name]) == 'array') { - // callback is PHP-style object instance method - this.hooks[name][0][this.hooks[name][1]](value); - } - else if (window[this.hooks[name]]) { - // callback is global function name - window[ this.hooks[name] ](value); - } - return true; - } - return false; // no hook defined - }, - - set_api_url: function(url) { - // set location of upload API script - this.api_url = url; - }, - - set_swf_url: function(url) { - // set location of SWF movie (defaults to webcam.swf in cwd) - this.swf_url = url; - }, - - get_html: function(width, height, server_width, server_height) { - // Return HTML for embedding webcam capture movie - // Specify pixel width and height (640x480, 320x240, etc.) - // Server width and height are optional, and default to movie width/height - if (!server_width) server_width = width; - if (!server_height) server_height = height; - - var html = ''; - var flashvars = 'shutter_enabled=' + (this.shutter_sound ? 1 : 0) + - '&shutter_url=' + escape(this.shutter_url) + - '&width=' + width + - '&height=' + height + - '&server_width=' + server_width + - '&server_height=' + server_height; - - if (this.ie) { - html += ''; - } - else { - html += ''; - } - - this.loaded = false; - return html; - }, - - get_movie: function() { - // get reference to movie object/embed in DOM - if (!this.loaded) return alert("ERROR: Movie is not loaded yet"); - var movie = document.getElementById('webcam_movie'); - if (!movie) alert("ERROR: Cannot locate movie 'webcam_movie' in DOM"); - return movie; - }, - - set_stealth: function(stealth) { - // set or disable stealth mode - this.stealth = stealth; - }, - - snap: function(url, callback, stealth) { - // take snapshot and send to server - // specify fully-qualified URL to server API script - // and callback function (string or function object) - if (callback) this.set_hook('onComplete', callback); - if (url) this.set_api_url(url); - if (typeof(stealth) != 'undefined') this.set_stealth( stealth ); - - this.get_movie()._snap( this.api_url, this.quality, this.shutter_sound ? 1 : 0, this.stealth ? 1 : 0 ); - }, - - freeze: function() { - // freeze webcam image (capture but do not upload) - this.get_movie()._snap('', this.quality, this.shutter_sound ? 1 : 0, 0 ); - }, - - upload: function(url, callback) { - // upload image to server after taking snapshot - // specify fully-qualified URL to server API script - // and callback function (string or function object) - if (callback) this.set_hook('onComplete', callback); - if (url) this.set_api_url(url); - - this.get_movie()._upload( this.api_url ); - }, - - reset: function() { - // reset movie after taking snapshot - this.get_movie()._reset(); - }, - - configure: function(panel) { - // open flash configuration panel -- specify tab name: - // "camera", "privacy", "default", "localStorage", "microphone", "settingsManager" - if (!panel) panel = "camera"; - this.get_movie()._configure(panel); - }, - - set_quality: function(new_quality) { - // set the JPEG quality (1 - 100) - // default is 90 - this.quality = new_quality; - }, - - set_shutter_sound: function(enabled, url) { - // enable or disable the shutter sound effect - // defaults to enabled - this.shutter_sound = enabled; - this.shutter_url = url ? url : 'shutter.mp3'; - }, - - flash_notify: function(type, msg) { - // receive notification from flash about event - switch (type) { - case 'flashLoadComplete': - // movie loaded successfully - this.loaded = true; - this.fire_hook('onLoad'); - break; - - case 'error': - // HTTP POST error most likely - if (!this.fire_hook('onError', msg)) { - alert("JPEGCam Flash Error: " + msg); - } - break; - - case 'success': - // upload complete, execute user callback function - // and pass raw API script results to function - this.fire_hook('onComplete', msg.toString()); - break; - - default: - // catch-all, just in case - alert("jpegcam flash_notify: " + type + ": " + msg); - break; - } - } -}; diff --git a/main/inc/lib/jpegcam/webcam.swf b/main/inc/lib/jpegcam/webcam.swf deleted file mode 100755 index 9d61ff87a6b877b064e967c61b9283d243785be3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6034 zcmV;D7j5W6S5pc9CjbC=oXt9EaFoZD{pLG*E=e;w1|hBi_Xk4Ak^tKr#uh>cNCpO3 z7ZA_rJLVhB*rOSF4i4ucByq4~CpI`fa@a!nc5LTxPA4H&4%^8ejkKT~RlA9IlWcak zD%m8P-OX0*?Cb9v2?+>QN$pmxO8xbFuV24@SHJESj1lh%LLMcg0!WA7MF?qk6pO|4 zH68?k^ciN#3~nUkeD!PVI01irq=|Sp5&E;D@a>}T)1vU*qVSWVP%H{RDhfX?3dH{# zZO`WqZ2V*E57PS{e&ttxXnoP2{Ea^KyVje}Klkkf`*rK#dKQu_woW*}APc{M zeDD09I-X?V%@@uS>*r^!Oz&ZZAO7V0*wKrr*QZ`P|27cuNIDS}5~-ZjmdR+xeMWk; zNsFd+vnesEjhI>2u0*acmr0~XKF*aP`o zB8jt(=S)kWT$*fXqh?0)+C1hFGnLDhwHdj@kworzCr2gg>+U(QyEA2^qh>}9>35n& zZrSA;ZNJ3gj74*La(G~{JdsM|_T*!+Q7zT4Czob((P7OPHsYD|XdOx{hWNITMx7TD;M#@ydr2BZsvSn{_CiiIygzX-*63*wZf`>S!P4T^sMH zj$3j|+*#-;@cFY?xmd;ji z&3p4&Drd>ex=JFtT7N%2#n(5)AiD)iPjkuOd znaNV_j+)Vg=Iu-8Q_*&NK+s3WWIM;bSu=CQ%-9p1>C|47Wk#ipnKg42S}B$HXsKw@ z%+PGk)RHLQPJoODd4})KYe{4&E6ItQiII3tZnrju%SfkUiIIH9^xipUj?D22*;G`r z^zqtS+mpm>N*kl7S`_!4kk2F~PS_+_JklWliu<%&e04mR8{6L8Yn1#ggfCM$GeCkl{yT`N)+MF{pS(hy-W#+0ERh8{_ zz}RA9huzy{p*@|-;W}n!)ncaZ6biPYVV3I0HH0i*SdO+^1&EJpIU{anq-+kes=SYX z`wT5 z%ZE}5U67SAM@Mq;nt{GuK`Uy(c2p>9!!C5cogB`#_Wtg{?*2nQEgH47+?&YqLX+`o zxtwOiOKdpW9#15rvZdQWyF28@-0QW|sS3f{%;R0$|CXb0pHQT6Gs>+#m%zkEeX0gbpR2{YUY?HPAa0)ew9rs%ZPpNjSI7!SM5lu@7Z^E0ns}2(4_vvC@-8M=kR3A(ex41^1bhpX?skb@-8IUn?c4c znMoXztguv~udoW_O49kJFXNw}of6xFa+_h8V>vm8A!u$W&n%Rg702?~xX5?^g7x;9 zxp+D%9tidI%cBp#*Tesa5Rs@hBlVNj0kF}pruVP zmdIptO;RThkr+pNXs%Sqa4~t*@{w$p3x}@JeCn=L`e;hdX&KxQG@Cd0(N%HTW-VK^ zul-k4fxy*^$BF<1q<}Nv4wTncNu>7H+BS&rQbwsl z=~_zHQCd&wdP*B8-9Tw0rPov1L}@dnEtGDgbQ7hUDZPQx8!5es(k+y3rF0vm+bO-7 z(jAoELZOwyP6};Q*hQh8x;v=5lX`Yj_Z}*AQ+E%A+bHa%?tRp~pSnX74p4V5b(c}k z?G*Z`yPvuTsArJ6hbSDR?nBgln8LfL`wr>}Q-~}>A84*taP34ur?8xYK_N=Pq!4rY z9WL2HE8`UIq{3Ykk`zWMq+F)piV3bB!PSe-%TwV9g`*UXQQFM!~Bn$N)qm%obRpTn`wWB&zgU&Qt$ zY+uIqI=0UMt^NkKZ({ovw)5By)9P+QPTH-3g5@}CbqX=HNUL`I0$hF zf%2ofI_K;~mWB;o`RfXd|0{s6H!oyb`R0Qkre?Exn^ z1Ry2p4gmLpNrK1gl8LXO3_(&3M5y3^4@iX{7p>$-75`KNp*29{01)pIPN?Odr6|uK z)Nybb5dU&~kgVXyN+6z990>ByYW`WnKi2_qF%BsFvld9%Iw0lsgix}cQyTbZgXNn> zAaFepcM~Tyqiro5*vLPd_-8Z!+`vCKqRlsPK=ittq}s8?QfjO9-L~E3B1-}{16i>H z3FH<+ZY8aR>?Ca*-34T2JCIc!K&ccuocKU#161q zStVi$(mU8F8)5s9^E#Zhll8JVyPMs?HX^(qc}LiBc8r;957LI2&c;|2X~y8r6M`Y4 zHa>KYOC8k3>DW+Vf^8aS(Q{n~AwN6A!0RN0A?U+AnNf;RE)jxVepcP2Rw4h4HZZUjB~8H z2FIjh(y2R{v*y)eagyp3p-&f!yLr|-MJdZO!=Q}t+z`V;k3cMQ!H|7DTotUrKHL;8 zG+P&ALt(K;B-&63k(O@R&ZoJYAylnm3BY z=`#G_E)ueiwt8XS&`6&sX{hi7Zu@a*DcvlU|4~oq1z6yrIDmV;kNuBwf@cZG%&C zis}YNyv>BDOEK@Nv51Ci5D3*kxP}qze3X;ar3gkgFdE+wS;`1XW2E+eOChZMqU4%t zQR@q#I{*n(KtkPAOSq=MoX?`L=PhZ45`-L1xmJ`W=u}JnY`r1Y8&bU?*Bi9naMl~H zdc$3BcKo?<_q zpS_%PHgC8&3?-Uuu^Hm!G~~0yIZ8Ci=94a`A)k}OLWw5YeDdWqI*qVqLl$ z`!bYKcDC7xldGB~-7}$AA=TIH(93MFQukV-{kmKCBVNsW)ThR_P_NN_rKJQ5Icp;@ zu2<`or4ec&T!|&jIi59^Oa}A-R*K|*7w6-1?`84XdS!gJE{Kn_L~B_PpM|u!`1ne+ z`UUY>NSljKZHX3K5TAv#zal=tKNBC{!uYiOpT?(tVSH*A#>crZK3nJFGdUNTj1`%H zua*}*J)jQa2Wt=iOmu|-IXU0XnxA0>!iwv1V8u0YGgn_PhN>Z4&3wG8VLf(<=(4-+ zMHsO=Skzg>YQ(DNyLnDx*9Esj5T!e<#Uz`}Z?ieAxziS{V3UMJ!u^XDb}S;6ScEHx zxT1&GszdxhxPXhw)&k0h7AS`U{A_k%3EWhO4IyO`3h17HDHcmo7I3V&i~|?&inzdI zj=2@6y~2dBcmlofARbk*PLH*xdP~)GM-;UR>+-p$h}vK?^OdUTrKvki!!R5R*2Grf^}JO zV)J4v!&a{2%`7%_LNsJuQho~-NW(W4rn_!*;6=v1N>%ZLe3e?oZ$-Fk@r&DoUy63t z{GwP?S8)+DXS0Ue2J^GJn~`dKnuPs$Vk0Hw2OqOh`$B*_pWk?p9`@TOzePcuwHh9u z%r8uyH?UTC7%+I0 zYto5RoYs_vN|d-B3yaWo;1^G$+~?-8@#_?&O_pQD!m)E!a$p@| z70-7$AZwH%gTzNBY%6T}JPR?!726H+00MCono9>y=Qxdlf* zzfEG3eB<_gR`xx}3)M6h=ozfaT@eRzhb6p@`mC!(mjqbnErRnB!Nm#lm|JDK*o+>U zXm;zaiScHS?w%M|P5{^p}qCu!1+SJNtnj%5;)@dZ@Dma*l`!9+%_*HIn5hZ>l`oXm^QkELuSThBHy z7e1``Q)Cssof_GV_{geac*wAI?0R+syNOlf%V{-R%bM^lwFTc=HEa#Oq?*|#e4^Zp z53%bQV=ef8+J-N&TUqPi&UjU1Q&?a-djyDYimaIf*F@^(z`97;99S0F%t(W!GT_67 zH!{}-{qfC_jg~)0;k^Ps!|XzuMw0dSL|nVa!J zm{CrGr9c3^REu7$LvO4_Z`GqW8_;7nqR+OVZ@53&@x9r}y4Y@fPj<5&*2ntU02{=2 z=0SFd9mc0#6yKULd|}2}g5AloEXVTf2s?^z(BteL<%597f%0Kc?gix|pqv8bK2Yul z)1W*9%Cn$62g>uHya39JpnL(8FM{$K zC|?5Q%b@?%hb0?N-pc?Xog2jw3?`2{Gy1m#zt{39s82IZeX`BzYW2g>h3`2#5b2Ff2n z`FBwM1C;*+Q53Nv zQZX;WZwcX{moWv}F!U6Ie>Wz<8Y}cDyBdRTB|s_kE=+^X82;b#EZ~tZfE9PfZa~wS zf)>u_z@-fM-;DoB`2U^)*NFeMgI^K3AuL?);x*ug$W3$LO_5b|m0?wc&4DbU%z;Xz zX%1|f>Lvw7%0%mr7#9jGTF${}{sJQx3v81YuLWU;a%x@S96v`c`YJ5^Exa2zCeB)< zaCxYlgqMewlW^m7sF9!9e%UEX_d4v;A;{0=NPU?0P!g}V-=6k66mJY}epR?GbR7w= z46P*L>kF~rLQD-^?+6D%0TNytT1yzoU&JUZ{)=Bw`h%0K@jM|{C=lCq*O==mQ=_P_8@YaL6HLE+EzTdzyhB+qirdj#AurbZBy&ODwS#69Sxs!M;Xs|LJ7$x|&D4a92Z_;s5fR>Val2LPNdn}3Ncx!k`;IC4w))}C8Q z{1%+48jXoi6vF0IEEXH-G9eZ};k^*qfe(aOqU#{UcSJ%QzLUeDNE?Um;&5AJ4~LT+ z-lLAHsaRSY!~X7AM$2M9sP0hPx^fOJZy_Od4@Zu$BF5$9tlASh8asB<5Pfz0vW3`8 z?0Dk`pc-!sGuex}cye~;VQjis^LNGKG%J?lr7Y5|_Jp0&T~6q_2jbm6mrd%rhs3+p z?qJn_5u$dhuGqWPj?jA?k^b<&ycY8s^b9!S{c6A39eOW>->3G6-UpoJW&6s+nO?5M zrH})u=d|}DfV6Yk2~fMSq(ws?00%CxMS*>}wqkmwWjXz7&WTFN=6P=ew3e z(F>8ih4^0NS;~3vDx(^O(1XCYWSxK%o>M4#917!HIFgr%m`LqYEz{g*;oZ}r-4N;2 z#ds&@J8P*hQ^{?(Mcvo+F~CF%qZ9g=yAb*~>dGhe6+(Sn)N&bDIEX3P8p?b!+ORt#S&4_|+f#}ZxJA9@&|U@3KTA#^jBzk-VHil;E= zhZ-)nm=HWcM;*L74Wk0@Pr<0j`!g^qnXvlgsBC?y358Kmdn<1T!j*dUQhK~v*+qy6 zsBW9O2NkrYgdc&PM}SxplN3jGoKyFxp>v^604|r5)m}~y27_xukAfWGm>lor?t0O3 zSEMWKQTO(EAdWjw?NWQYmH}6lbG!t|?T8(-ypKzrhQ`lA=L{*w^j+gdaL) z9Y1wE1>-=^0ufFFnE-+wKL|WUSQnlF{!c{D0+CSB=YTjUSt$xG_s*%7#z{DN zv2gN8LnZR9FT|b)4!cTl>;*W&krI6JVo8DT!gOhSta5