pax_global_header00006660000000000000000000000064130465027330014515gustar00rootroot0000000000000052 comment=656c42af1f996e4a5d6aae3b9aeac831ca162241 .dokx000066400000000000000000000001251304650273300120250ustar00rootroot00000000000000return { githubURL = "torch/optim", exclude = {"test", "polyinterp.lua"} } .gitignore000066400000000000000000000000071304650273300130460ustar00rootroot00000000000000build/ CMakeLists.txt000066400000000000000000000012361304650273300136230ustar00rootroot00000000000000 CMAKE_MINIMUM_REQUIRED(VERSION 2.6 FATAL_ERROR) CMAKE_POLICY(VERSION 2.6) IF(LUAROCKS_PREFIX) MESSAGE(STATUS "Installing Torch through Luarocks") STRING(REGEX REPLACE "(.*)lib/luarocks/rocks.*" "\\1" CMAKE_INSTALL_PREFIX "${LUAROCKS_PREFIX}") MESSAGE(STATUS "Prefix inferred from Luarocks: ${CMAKE_INSTALL_PREFIX}") ENDIF() FIND_PACKAGE(Torch REQUIRED) SET(src) FILE(GLOB luasrc *.lua) ADD_TORCH_PACKAGE(optim "${src}" "${luasrc}") #ADD_TORCH_DOK(dok optim "Machine Learning" "Optimization" 3.2) INSTALL(DIRECTORY "doc" DESTINATION "${Torch_INSTALL_LUA_PATH_SUBDIR}/optim") INSTALL(FILES "README.md" DESTINATION "${Torch_INSTALL_LUA_PATH_SUBDIR}/optim") COPYRIGHT.txt000066400000000000000000000036411304650273300131760ustar00rootroot00000000000000Copyright (c) 2011-2014 Idiap Research Institute (Ronan Collobert) Copyright (c) 2011-2012 NEC Laboratories America (Koray Kavukcuoglu) Copyright (c) 2011-2013 NYU (Clement Farabet) Copyright (c) 2006-2010 NEC Laboratories America (Ronan Collobert, Leon Bottou, Iain Melvin, Jason Weston) Copyright (c) 2006 Idiap Research Institute (Samy Bengio) Copyright (c) 2001-2004 Idiap Research Institute (Ronan Collobert, Samy Bengio, Johnny Mariethoz) All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. 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. 3. Neither the names of NEC Laboratories American and IDIAP Research Institute 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. ConfusionMatrix.lua000066400000000000000000000274201304650273300147210ustar00rootroot00000000000000--[[ A Confusion Matrix class Example: conf = optim.ConfusionMatrix( {'cat','dog','person'} ) -- new matrix conf:zero() -- reset matrix for i = 1,N do conf:add( neuralnet:forward(sample), label ) -- accumulate errors end print(conf) -- print matrix image.display(conf:render()) -- render matrix ]] local ConfusionMatrix = torch.class('optim.ConfusionMatrix') function ConfusionMatrix:__init(nclasses, classes) if type(nclasses) == 'table' then classes = nclasses nclasses = #classes end self.mat = torch.LongTensor(nclasses,nclasses):zero() self.valids = torch.FloatTensor(nclasses):zero() self.unionvalids = torch.FloatTensor(nclasses):zero() self.nclasses = nclasses self.totalValid = 0 self.averageValid = 0 self.classes = classes or {} -- buffers self._mat_flat = self.mat:view(-1) self._target = torch.FloatTensor() self._prediction = torch.FloatTensor() self._max = torch.FloatTensor() self._pred_idx = torch.LongTensor() self._targ_idx = torch.LongTensor() end -- takes scalar prediction and target as input function ConfusionMatrix:_add(p, t) assert(p and type(p) == 'number') assert(t and type(t) == 'number') -- non-positive values are considered missing -- and therefore ignored if t > 0 then self.mat[t][p] = self.mat[t][p] + 1 end end function ConfusionMatrix:add(prediction, target) if type(prediction) == 'number' then -- comparing numbers self:_add(prediction, target) else self._prediction:resize(prediction:size()):copy(prediction) assert(prediction:dim() == 1) if type(target) == 'number' then -- prediction is a vector, then target assumed to be an index self._max:max(self._pred_idx, self._prediction, 1) self:_add(self._pred_idx[1], target) else -- both prediction and target are vectors assert(target:dim() == 1) self._target:resize(target:size()):copy(target) self._max:max(self._targ_idx, self._target, 1) self._max:max(self._pred_idx, self._prediction, 1) self:_add(self._pred_idx[1], self._targ_idx[1]) end end end function ConfusionMatrix:batchAdd(predictions, targets) local preds, targs, __ self._prediction:resize(predictions:size()):copy(predictions) if predictions:dim() == 1 then -- predictions is a vector of classes preds = self._prediction elseif predictions:dim() == 2 then -- prediction is a matrix of class likelihoods if predictions:size(2) == 1 then -- or prediction just needs flattening preds = self._prediction:select(2,1) else self._max:max(self._pred_idx, self._prediction, 2) preds = self._pred_idx:select(2,1) end else error("predictions has invalid number of dimensions") end self._target:resize(targets:size()):copy(targets) if targets:dim() == 1 then -- targets is a vector of classes targs = self._target elseif targets:dim() == 2 then -- targets is a matrix of one-hot rows if targets:size(2) == 1 then -- or targets just needs flattening targs = self._target:select(2,1) else self._max:max(self._targ_idx, self._target, 2) targs = self._targ_idx:select(2,1) end else error("targets has invalid number of dimensions") end -- non-positive values are considered missing and therefore ignored local mask = targs:ge(1) targs = targs[mask] preds = preds[mask] self._mat_flat = self._mat_flat or self.mat:view(-1) -- for backward compatibility preds = preds:typeAs(targs) assert(self.mat:isContiguous() and self.mat:stride(2) == 1) local indices = ((targs - 1) * self.mat:stride(1) + preds):typeAs(self.mat) local ones = torch.ones(1):typeAs(self.mat):expand(indices:size(1)) self._mat_flat:indexAdd(1, indices, ones) end function ConfusionMatrix:zero() self.mat:zero() self.valids:zero() self.unionvalids:zero() self.totalValid = 0 self.averageValid = 0 end local function isNaN(number) return number ~= number end function ConfusionMatrix:updateValids() local total = 0 for t = 1,self.nclasses do self.valids[t] = self.mat[t][t] / self.mat:select(1,t):sum() self.unionvalids[t] = self.mat[t][t] / (self.mat:select(1,t):sum()+self.mat:select(2,t):sum()-self.mat[t][t]) total = total + self.mat[t][t] end self.totalValid = total / self.mat:sum() self.averageValid = 0 self.averageUnionValid = 0 local nvalids = 0 local nunionvalids = 0 for t = 1,self.nclasses do if not isNaN(self.valids[t]) then self.averageValid = self.averageValid + self.valids[t] nvalids = nvalids + 1 end if not isNaN(self.valids[t]) and not isNaN(self.unionvalids[t]) then self.averageUnionValid = self.averageUnionValid + self.unionvalids[t] nunionvalids = nunionvalids + 1 end end self.averageValid = self.averageValid / nvalids self.averageUnionValid = self.averageUnionValid / nunionvalids end -- Calculating FAR/FRR associated with the confusion matrix function ConfusionMatrix:farFrr() local cmat = self.mat local noOfClasses = cmat:size()[1] self._frrs = self._frrs or torch.zeros(noOfClasses) self._frrs:zero() self._classFrrs = self._classFrrs or torch.zeros(noOfClasses) self._classFrrs:zero() self._classFrrs:add(-1) self._fars = self._fars or torch.zeros(noOfClasses) self._fars:zero() self._classFars = self._classFars or torch.zeros(noOfClasses) self._classFars:zero() self._classFars:add(-1) local classSamplesCount = cmat:sum(2) local indx = 1 for i=1,noOfClasses do if classSamplesCount[i][1] ~= 0 then self._frrs[indx] = 1 - cmat[i][i]/classSamplesCount[i][1] self._classFrrs[i] = self._frrs[indx] -- Calculating FARs local farNumerator = 0 local farDenominator = 0 for j=1, noOfClasses do if i ~= j then if classSamplesCount[j][1] ~= 0 then farNumerator = farNumerator + cmat[j][i]/classSamplesCount[j][1] farDenominator = farDenominator + 1 end end end self._fars[indx] = farNumerator/farDenominator self._classFars[i] = self._fars[indx] indx = indx + 1 end end indx = indx - 1 local returnFrrs = self._frrs[{{1, indx}}] local returnFars = self._fars[{{1, indx}}] return self._classFrrs, self._classFars, returnFrrs, returnFars end local function log10(n) if math.log10 then return math.log10(n) else return math.log(n) / math.log(10) end end function ConfusionMatrix:__tostring__() self:updateValids() local str = {'ConfusionMatrix:\n'} local nclasses = self.nclasses table.insert(str, '[') local maxCnt = self.mat:max() local nDigits = math.max(8, 1 + math.ceil(log10(maxCnt))) for t = 1,nclasses do local pclass = self.valids[t] * 100 pclass = string.format('%2.3f', pclass) if t == 1 then table.insert(str, '[') else table.insert(str, ' [') end for p = 1,nclasses do table.insert(str, string.format('%' .. nDigits .. 'd', self.mat[t][p])) end if self.classes and self.classes[1] then if t == nclasses then table.insert(str, ']] ' .. pclass .. '% \t[class: ' .. (self.classes[t] or '') .. ']\n') else table.insert(str, '] ' .. pclass .. '% \t[class: ' .. (self.classes[t] or '') .. ']\n') end else if t == nclasses then table.insert(str, ']] ' .. pclass .. '% \n') else table.insert(str, '] ' .. pclass .. '% \n') end end end table.insert(str, ' + average row correct: ' .. (self.averageValid*100) .. '% \n') table.insert(str, ' + average rowUcol correct (VOC measure): ' .. (self.averageUnionValid*100) .. '% \n') table.insert(str, ' + global correct: ' .. (self.totalValid*100) .. '%') return table.concat(str) end function ConfusionMatrix:render(sortmode, display, block, legendwidth) -- args local confusion = self.mat:double() local classes = self.classes local sortmode = sortmode or 'score' -- 'score' or 'occurrence' local block = block or 25 local legendwidth = legendwidth or 200 local display = display or false -- legends local legend = { ['score'] = 'Confusion matrix [sorted by scores, global accuracy = %0.3f%%, per-class accuracy = %0.3f%%]', ['occurrence'] = 'Confusion matrix [sorted by occurrences, accuracy = %0.3f%%, per-class accuracy = %0.3f%%]' } -- parse matrix / normalize / count scores local diag = torch.FloatTensor(#classes) local freqs = torch.FloatTensor(#classes) local unconf = confusion local confusion = confusion:clone() local corrects = 0 local total = 0 for target = 1,#classes do freqs[target] = confusion[target]:sum() corrects = corrects + confusion[target][target] total = total + freqs[target] confusion[target]:div( math.max(confusion[target]:sum(),1) ) diag[target] = confusion[target][target] end -- accuracies local accuracy = corrects / total * 100 local perclass = 0 local total = 0 for target = 1,#classes do if confusion[target]:sum() > 0 then perclass = perclass + diag[target] total = total + 1 end end perclass = perclass / total * 100 freqs:div(unconf:sum()) -- sort matrix if sortmode == 'score' then _,order = torch.sort(diag,1,true) elseif sortmode == 'occurrence' then _,order = torch.sort(freqs,1,true) else error('sort mode must be one of: score | occurrence') end -- render matrix local render = torch.zeros(#classes*block, #classes*block) for target = 1,#classes do for prediction = 1,#classes do render[{ { (target-1)*block+1,target*block }, { (prediction-1)*block+1,prediction*block } }] = confusion[order[target]][order[prediction]] end end -- add grid for target = 1,#classes do render[{ {target*block},{} }] = 0.1 render[{ {},{target*block} }] = 0.1 end -- create rendering require 'image' require 'qtwidget' require 'qttorch' local win1 = qtwidget.newimage( (#render)[2]+legendwidth, (#render)[1] ) image.display{image=render, win=win1} -- add legend for i in ipairs(classes) do -- background cell win1:setcolor{r=0,g=0,b=0} win1:rectangle((#render)[2],(i-1)*block,legendwidth,block) win1:fill() -- % win1:setfont(qt.QFont{serif=false, size=fontsize}) local gscale = freqs[order[i]]/freqs:max()*0.9+0.1 --3/4 win1:setcolor{r=gscale*0.5+0.2,g=gscale*0.5+0.2,b=gscale*0.8+0.2} win1:moveto((#render)[2]+10,i*block-block/3) win1:show(string.format('[%2.2f%% labels]',math.floor(freqs[order[i]]*10000+0.5)/100)) -- legend win1:setfont(qt.QFont{serif=false, size=fontsize}) local gscale = diag[order[i]]*0.8+0.2 win1:setcolor{r=gscale,g=gscale,b=gscale} win1:moveto(120+(#render)[2]+10,i*block-block/3) win1:show(classes[order[i]]) for j in ipairs(classes) do -- scores local score = confusion[order[j]][order[i]] local gscale = (1-score)*(score*0.8+0.2) win1:setcolor{r=gscale,g=gscale,b=gscale} win1:moveto((i-1)*block+block/5,(j-1)*block+block*2/3) win1:show(string.format('%02.0f',math.floor(score*100+0.5))) end end -- generate tensor local t = win1:image():toTensor() -- display if display then image.display{image=t, legend=string.format(legend[sortmode],accuracy,perclass)} end -- return rendering return t end Logger.lua000066400000000000000000000130001304650273300127750ustar00rootroot00000000000000--[[ Logger: a simple class to log symbols during training, and automate plot generation Example: logger = optim.Logger('somefile.log') -- file to save stuff for i = 1,N do -- log some symbols during train_error = ... -- training/testing test_error = ... logger:add{['training error'] = train_error, ['test error'] = test_error} end logger:style{['training error'] = '-', -- define styles for plots ['test error'] = '-'} logger:plot() -- and plot ---- OR --- logger = optim.Logger('somefile.log') -- file to save stuff logger:setNames{'training error', 'test error'} for i = 1,N do -- log some symbols during train_error = ... -- training/testing test_error = ... logger:add{train_error, test_error} end logger:style{'-', '-'} -- define styles for plots logger:plot() -- and plot ----------- logger:setlogscale(true) -- enable logscale on Y-axis logger:plot() -- and plot ]] require 'xlua' local Logger = torch.class('optim.Logger') function Logger:__init(filename, timestamp) if filename then self.name = filename os.execute('mkdir ' .. (sys.uname() ~= 'windows' and '-p ' or '') .. ' "' .. paths.dirname(filename) .. '"') if timestamp then -- append timestamp to create unique log file filename = filename .. '-'..os.date("%Y_%m_%d_%X") end self.file = io.open(filename,'w') self.epsfile = self.name .. '.eps' else self.file = io.stdout self.name = 'stdout' print(' warning: no path provided, logging to std out') end self.empty = true self.symbols = {} self.styles = {} self.names = {} self.idx = {} self.figure = nil self.showPlot = true self.plotRawCmd = nil self.defaultStyle = '+' self.logscale = false end function Logger:setNames(names) self.names = names self.empty = false self.nsymbols = #names for k,key in pairs(names) do self.file:write(key .. '\t') self.symbols[k] = {} self.styles[k] = {self.defaultStyle} self.idx[key] = k end self.file:write('\n') self.file:flush() return self end function Logger:add(symbols) -- (1) first time ? print symbols' names on first row if self.empty then self.empty = false self.nsymbols = #symbols for k,val in pairs(symbols) do self.file:write(k .. '\t') self.symbols[k] = {} self.styles[k] = {self.defaultStyle} self.names[k] = k end self.idx = self.names self.file:write('\n') end -- (2) print all symbols on one row for k,val in pairs(symbols) do if type(val) == 'number' then self.file:write(string.format('%11.4e',val) .. '\t') elseif type(val) == 'string' then self.file:write(val .. '\t') else xlua.error('can only log numbers and strings', 'Logger') end end self.file:write('\n') self.file:flush() -- (3) save symbols in internal table for k,val in pairs(symbols) do table.insert(self.symbols[k], val) end end function Logger:style(symbols) for name,style in pairs(symbols) do if type(style) == 'string' then self.styles[name] = {style} elseif type(style) == 'table' then self.styles[name] = style else xlua.error('style should be a string or a table of strings','Logger') end end return self end function Logger:setlogscale(state) self.logscale = state end function Logger:display(state) self.showPlot = state end function Logger:plot(...) if not xlua.require('gnuplot') then if not self.warned then print(' warning: cannot plot with this version of Torch') self.warned = true end return end local plotit = false local plots = {} local plotsymbol = function(name,list) if #list > 1 then local nelts = #list local plot_y = torch.Tensor(nelts) for i = 1,nelts do plot_y[i] = list[i] end for _,style in ipairs(self.styles[name]) do table.insert(plots, {self.names[name], plot_y, style}) end plotit = true end end local args = {...} if not args[1] then -- plot all symbols for name,list in pairs(self.symbols) do plotsymbol(name,list) end else -- plot given symbols for _,name in ipairs(args) do plotsymbol(self.idx[name], self.symbols[self.idx[name]]) end end if plotit then if self.showPlot then self.figure = gnuplot.figure(self.figure) if self.logscale then gnuplot.logscale('on') end gnuplot.plot(plots) if self.plotRawCmd then gnuplot.raw(self.plotRawCmd) end gnuplot.grid('on') gnuplot.title('') end if self.epsfile then os.execute('rm -f "' .. self.epsfile .. '"') local epsfig = gnuplot.epsfigure(self.epsfile) if self.logscale then gnuplot.logscale('on') end gnuplot.plot(plots) if self.plotRawCmd then gnuplot.raw(self.plotRawCmd) end gnuplot.grid('on') gnuplot.title('') gnuplot.plotflush() gnuplot.close(epsfig) end end end README.md000066400000000000000000000004341304650273300123410ustar00rootroot00000000000000 # Optimization package This package contains several optimization routines and a logger for [Torch](https://github.com/torch/torch7/blob/master/README.md): * [Overview](doc/intro.md); * [Optimization algorithms](doc/algos.md); * [Logger](doc/logger.md). adadelta.lua000066400000000000000000000041151304650273300133240ustar00rootroot00000000000000--[[ ADADELTA implementation for SGD http://arxiv.org/abs/1212.5701 ARGS: - `opfunc` : a function that takes a single input (X), the point of evaluation, and returns f(X) and df/dX - `x` : the initial point - `config` : a table of hyper-parameters - `config.rho` : interpolation parameter - `config.eps` : for numerical stability - `config.weightDecay` : weight decay - `state` : a table describing the state of the optimizer; after each call the state is modified - `state.paramVariance` : vector of temporal variances of parameters - `state.accDelta` : vector of accummulated delta of gradients RETURN: - `x` : the new x vector - `f(x)` : the function, evaluated before the update ]] function optim.adadelta(opfunc, x, config, state) -- (0) get/update state if config == nil and state == nil then print('no state table, ADADELTA initializing') end local config = config or {} local state = state or config local rho = config.rho or 0.9 local eps = config.eps or 1e-6 local wd = config.weightDecay or 0 state.evalCounter = state.evalCounter or 0 -- (1) evaluate f(x) and df/dx local fx,dfdx = opfunc(x) -- (2) weight decay if wd ~= 0 then dfdx:add(wd, x) end -- (3) parameter update if not state.paramVariance then state.paramVariance = torch.Tensor():typeAs(x):resizeAs(dfdx):zero() state.paramStd = torch.Tensor():typeAs(x):resizeAs(dfdx):zero() state.delta = torch.Tensor():typeAs(x):resizeAs(dfdx):zero() state.accDelta = torch.Tensor():typeAs(x):resizeAs(dfdx):zero() end state.paramVariance:mul(rho):addcmul(1-rho,dfdx,dfdx) state.paramStd:resizeAs(state.paramVariance):copy(state.paramVariance):add(eps):sqrt() state.delta:resizeAs(state.paramVariance):copy(state.accDelta):add(eps):sqrt():cdiv(state.paramStd):cmul(dfdx) x:add(-1, state.delta) state.accDelta:mul(rho):addcmul(1-rho, state.delta, state.delta) -- (4) update evaluation counter state.evalCounter = state.evalCounter + 1 -- return x*, f(x) before optimization return x,{fx} end adagrad.lua000066400000000000000000000034171304650273300131540ustar00rootroot00000000000000--[[ ADAGRAD implementation for SGD ARGS: - `opfunc` : a function that takes a single input (X), the point of evaluation, and returns f(X) and df/dX - `x` : the initial point - `state` : a table describing the state of the optimizer; after each call the state is modified - `state.learningRate` : learning rate - `state.paramVariance` : vector of temporal variances of parameters - `state.weightDecay` : scalar that controls weight decay RETURN: - `x` : the new x vector - `f(x)` : the function, evaluated before the update ]] function optim.adagrad(opfunc, x, config, state) -- (0) get/update state if config == nil and state == nil then print('no state table, ADAGRAD initializing') end local config = config or {} local state = state or config local lr = config.learningRate or 1e-3 local lrd = config.learningRateDecay or 0 local wd = config.weightDecay or 0 state.evalCounter = state.evalCounter or 0 local nevals = state.evalCounter -- (1) evaluate f(x) and df/dx local fx,dfdx = opfunc(x) -- (2) weight decay with a single parameter if wd ~= 0 then dfdx:add(wd, x) end -- (3) learning rate decay (annealing) local clr = lr / (1 + nevals*lrd) -- (4) parameter update with single or individual learning rates if not state.paramVariance then state.paramVariance = torch.Tensor():typeAs(x):resizeAs(dfdx):zero() state.paramStd = torch.Tensor():typeAs(x):resizeAs(dfdx) end state.paramVariance:addcmul(1,dfdx,dfdx) state.paramStd:resizeAs(state.paramVariance):copy(state.paramVariance):sqrt() x:addcdiv(-clr, dfdx,state.paramStd:add(1e-10)) -- (5) update evaluation counter state.evalCounter = state.evalCounter + 1 -- return x*, f(x) before optimization return x,{fx} end adam.lua000066400000000000000000000044451304650273300124750ustar00rootroot00000000000000--[[ An implementation of Adam http://arxiv.org/pdf/1412.6980.pdf ARGS: - 'opfunc' : a function that takes a single input (X), the point of a evaluation, and returns f(X) and df/dX - 'x' : the initial point - 'config` : a table with configuration parameters for the optimizer - 'config.learningRate' : learning rate - `config.learningRateDecay` : learning rate decay - 'config.beta1' : first moment coefficient - 'config.beta2' : second moment coefficient - 'config.epsilon' : for numerical stability - 'config.weightDecay' : weight decay - 'state' : a table describing the state of the optimizer; after each call the state is modified RETURN: - `x` : the new x vector - `f(x)` : the function, evaluated before the update ]] function optim.adam(opfunc, x, config, state) -- (0) get/update state local config = config or {} local state = state or config local lr = config.learningRate or 0.001 local lrd = config.learningRateDecay or 0 local beta1 = config.beta1 or 0.9 local beta2 = config.beta2 or 0.999 local epsilon = config.epsilon or 1e-8 local wd = config.weightDecay or 0 -- (1) evaluate f(x) and df/dx local fx, dfdx = opfunc(x) -- (2) weight decay if wd ~= 0 then dfdx:add(wd, x) end -- Initialization state.t = state.t or 0 -- Exponential moving average of gradient values state.m = state.m or x.new(dfdx:size()):zero() -- Exponential moving average of squared gradient values state.v = state.v or x.new(dfdx:size()):zero() -- A tmp tensor to hold the sqrt(v) + epsilon state.denom = state.denom or x.new(dfdx:size()):zero() -- (3) learning rate decay (annealing) local clr = lr / (1 + state.t*lrd) state.t = state.t + 1 -- Decay the first and second moment running average coefficient state.m:mul(beta1):add(1-beta1, dfdx) state.v:mul(beta2):addcmul(1-beta2, dfdx, dfdx) state.denom:copy(state.v):sqrt():add(epsilon) local biasCorrection1 = 1 - beta1^state.t local biasCorrection2 = 1 - beta2^state.t local stepSize = clr * math.sqrt(biasCorrection2)/biasCorrection1 -- (4) update x x:addcdiv(-stepSize, state.m, state.denom) -- return x*, f(x) before optimization return x, {fx} end adamax.lua000066400000000000000000000040651304650273300130240ustar00rootroot00000000000000--[[ An implementation of AdaMax http://arxiv.org/pdf/1412.6980.pdf ARGS: - 'opfunc' : a function that takes a single input (X), the point of a evaluation, and returns f(X) and df/dX - 'x' : the initial point - 'config` : a table with configuration parameters for the optimizer - 'config.learningRate' : learning rate - 'config.beta1' : first moment coefficient - 'config.beta2' : second moment coefficient - 'config.epsilon' : for numerical stability - 'state' : a table describing the state of the optimizer; after each call the state is modified. RETURN: - `x` : the new x vector - `f(x)` : the function, evaluated before the update ]] function optim.adamax(opfunc, x, config, state) -- (0) get/update state local config = config or {} local state = state or config local lr = config.learningRate or 0.002 local beta1 = config.beta1 or 0.9 local beta2 = config.beta2 or 0.999 local epsilon = config.epsilon or 1e-38 local wd = config.weightDecay or 0 -- (1) evaluate f(x) and df/dx local fx, dfdx = opfunc(x) -- (2) weight decay if wd ~= 0 then dfdx:add(wd, x) end -- Initialization state.t = state.t or 0 -- Exponential moving average of gradient values state.m = state.m or x.new(dfdx:size()):zero() -- Exponential moving average of the infinity norm state.u = state.u or x.new(dfdx:size()):zero() -- A tmp tensor to hold the input to max() state.max = state.max or x.new(2, unpack(dfdx:size():totable())):zero() state.t = state.t + 1 -- Update biased first moment estimate. state.m:mul(beta1):add(1-beta1, dfdx) -- Update the exponentially weighted infinity norm. state.max[1]:copy(state.u):mul(beta2) state.max[2]:copy(dfdx):abs():add(epsilon) state.u:max(state.max, 1) local biasCorrection1 = 1 - beta1^state.t local stepSize = lr/biasCorrection1 -- (2) update x x:addcdiv(-stepSize, state.m, state.u) -- return x*, f(x) before optimization return x, {fx} end asgd.lua000066400000000000000000000040131304650273300125000ustar00rootroot00000000000000--[[ An implementation of ASGD ASGD: x := (1 - lambda eta_t) x - eta_t df/dx(z,x) a := a + mu_t [ x - a ] eta_t = eta0 / (1 + lambda eta0 t) ^ 0.75 mu_t = 1/max(1,t-t0) implements ASGD algoritm as in L.Bottou's sgd-2.0 ARGS: - `opfunc` : a function that takes a single input (X), the point of evaluation, and returns f(X) and df/dX - `x` : the initial point - `state` : a table describing the state of the optimizer; after each call the state is modified - `state.eta0` : learning rate - `state.lambda` : decay term - `state.alpha` : power for eta update - `state.t0` : point at which to start averaging RETURN: - `x` : the new x vector - `f(x)` : the function, evaluated before the update - `ax` : the averaged x vector (Clement Farabet, 2012) --]] function optim.asgd(opfunc, x, config, state) -- (0) get/update state local config = config or {} local state = state or config config.eta0 = config.eta0 or 1e-4 config.lambda = config.lambda or 1e-4 config.alpha = config.alpha or 0.75 config.t0 = config.t0 or 1e6 -- (hidden state) state.eta_t = state.eta_t or config.eta0 state.mu_t = state.mu_t or 1 state.t = state.t or 0 -- (1) evaluate f(x) and df/dx local fx,dfdx = opfunc(x) -- (2) decay term x:mul(1 - config.lambda*state.eta_t) -- (3) update x x:add(-state.eta_t, dfdx) -- (4) averaging state.ax = state.ax or torch.Tensor():typeAs(x):resizeAs(x):zero() state.tmp = state.tmp or torch.Tensor():typeAs(state.ax):resizeAs(state.ax) if state.mu_t ~= 1 then state.tmp:copy(x) state.tmp:add(-1,state.ax):mul(state.mu_t) state.ax:add(state.tmp) else state.ax:copy(x) end -- (5) update eta_t and mu_t state.t = state.t + 1 state.eta_t = config.eta0 / math.pow((1 + config.lambda * config.eta0 * state.t), config.alpha) state.mu_t = 1 / math.max(1, state.t - config.t0) -- return x*, f(x) before optimization, and average(x_t0,x_t1,x_t2,...) return x,{fx},state.ax end cg.lua000066400000000000000000000130021304650273300121510ustar00rootroot00000000000000--[[ This cg implementation is a rewrite of minimize.m written by Carl E. Rasmussen. It is supposed to produce exactly same results (give or take numerical accuracy due to some changed order of operations). You can compare the result on rosenbrock with minimize.m. http://www.gatsby.ucl.ac.uk/~edward/code/minimize/example.html [x fx c] = minimize([0 0]', 'rosenbrock', -25) Note that we limit the number of function evaluations only, it seems much more important in practical use. ARGS: - `opfunc` : a function that takes a single input, the point of evaluation. - `x` : the initial point - `state` : a table of parameters and temporary allocations. - `state.maxEval` : max number of function evaluations - `state.maxIter` : max number of iterations - `state.df[0,1,2,3]` : if you pass torch.Tensor they will be used for temp storage - `state.[s,x0]` : if you pass torch.Tensor they will be used for temp storage RETURN: - `x*` : the new x vector, at the optimal point - `f` : a table of all function values where `f[1]` is the value of the function before any optimization and `f[#f]` is the final fully optimized value, at x* (Koray Kavukcuoglu, 2012) --]] function optim.cg(opfunc, x, config, state) -- parameters local config = config or {} local state = state or config local rho = config.rho or 0.01 local sig = config.sig or 0.5 local int = config.int or 0.1 local ext = config.ext or 3.0 local maxIter = config.maxIter or 20 local ratio = config.ratio or 100 local maxEval = config.maxEval or maxIter*1.25 local red = 1 local verbose = config.verbose or 0 local i = 0 local ls_failed = 0 local fx = {} -- we need three points for the interpolation/extrapolation stuff local z1,z2,z3 = 0,0,0 local d1,d2,d3 = 0,0,0 local f1,f2,f3 = 0,0,0 local df1 = state.df1 or x.new() local df2 = state.df2 or x.new() local df3 = state.df3 or x.new() local tdf df1:resizeAs(x) df2:resizeAs(x) df3:resizeAs(x) -- search direction local s = state.s or x.new() s:resizeAs(x) -- we need a temp storage for X local x0 = state.x0 or x.new() local f0 = 0 local df0 = state.df0 or x.new() x0:resizeAs(x) df0:resizeAs(x) -- evaluate at initial point f1,tdf = opfunc(x) fx[#fx+1] = f1 df1:copy(tdf) i=i+1 -- initial search direction s:copy(df1):mul(-1) d1 = -s:dot(s ) -- slope z1 = red/(1-d1) -- initial step while i < math.abs(maxEval) do x0:copy(x) f0 = f1 df0:copy(df1) x:add(z1,s) f2,tdf = opfunc(x) df2:copy(tdf) i=i+1 d2 = df2:dot(s) f3,d3,z3 = f1,d1,-z1 -- init point 3 equal to point 1 local m = math.min(maxIter,maxEval-i) local success = 0 local limit = -1 while true do while (f2 > f1+z1*rho*d1 or d2 > -sig*d1) and m > 0 do limit = z1 if f2 > f1 then z2 = z3 - (0.5*d3*z3*z3)/(d3*z3+f2-f3) else local A = 6*(f2-f3)/z3+3*(d2+d3) local B = 3*(f3-f2)-z3*(d3+2*d2) z2 = (math.sqrt(B*B-A*d2*z3*z3)-B)/A end if z2 ~= z2 or z2 == math.huge or z2 == -math.huge then z2 = z3/2; end z2 = math.max(math.min(z2, int*z3),(1-int)*z3); z1 = z1 + z2; x:add(z2,s) f2,tdf = opfunc(x) df2:copy(tdf) i=i+1 m = m - 1 d2 = df2:dot(s) z3 = z3-z2; end if f2 > f1+z1*rho*d1 or d2 > -sig*d1 then break elseif d2 > sig*d1 then success = 1; break; elseif m == 0 then break; end local A = 6*(f2-f3)/z3+3*(d2+d3); local B = 3*(f3-f2)-z3*(d3+2*d2); z2 = -d2*z3*z3/(B+math.sqrt(B*B-A*d2*z3*z3)) if z2 ~= z2 or z2 == math.huge or z2 == -math.huge or z2 < 0 then if limit < -0.5 then z2 = z1 * (ext -1) else z2 = (limit-z1)/2 end elseif (limit > -0.5) and (z2+z1) > limit then z2 = (limit-z1)/2 elseif limit < -0.5 and (z2+z1) > z1*ext then z2 = z1*(ext-1) elseif z2 < -z3*int then z2 = -z3*int elseif limit > -0.5 and z2 < (limit-z1)*(1-int) then z2 = (limit-z1)*(1-int) end f3=f2; d3=d2; z3=-z2; z1 = z1+z2; x:add(z2,s) f2,tdf = opfunc(x) df2:copy(tdf) i=i+1 m = m - 1 d2 = df2:dot(s) end if success == 1 then f1 = f2 fx[#fx+1] = f1; local ss = (df2:dot(df2)-df2:dot(df1)) / df1:dot(df1) s:mul(ss) s:add(-1,df2) local tmp = df1:clone() df1:copy(df2) df2:copy(tmp) d2 = df1:dot(s) if d2> 0 then s:copy(df1) s:mul(-1) d2 = -s:dot(s) end z1 = z1 * math.min(ratio, d1/(d2-1e-320)) d1 = d2 ls_failed = 0 else x:copy(x0) f1 = f0 df1:copy(df0) if ls_failed or i>maxEval then break end local tmp = df1:clone() df1:copy(df2) df2:copy(tmp) s:copy(df1) s:mul(-1) d1 = -s:dot(s) z1 = 1/(1-d1) ls_failed = 1 end end state.df0 = df0 state.df1 = df1 state.df2 = df2 state.df3 = df3 state.x0 = x0 state.s = s return x,fx,i end checkgrad.lua000066400000000000000000000025111304650273300134760ustar00rootroot00000000000000--[[ An implementation of a simple numerical gradient checker. ARGS: - `opfunc` : a function that takes a single input (X), the point of evaluation, and returns f(X) and df/dX - `x` : the initial point - `eps` : the epsilon to use for the numerical check (default is 1e-7) RETURN: - `diff` : error in the gradient, should be near tol - `dC` : exact gradient at point - `dC_est` : numerically estimates gradient at point ]]-- -- function that numerically checks gradient of NCA loss: function optim.checkgrad(opfunc, x, eps) -- compute true gradient: local Corg,dC = opfunc(x) dC:resize(x:size()) local Ctmp -- temporary value local isTensor = torch.isTensor(Corg) if isTensor then Ctmp = Corg.new(Corg:size()) end -- compute numeric approximations to gradient: local eps = eps or 1e-7 local dC_est = torch.Tensor():typeAs(dC):resizeAs(dC) for i = 1,dC:size(1) do local tmp = x[i] x[i] = x[i] + eps local C1 = opfunc(x) if isTensor then Ctmp:copy(C1) C1 = Ctmp end x[i] = x[i] - 2 * eps local C2 = opfunc(x) x[i] = tmp dC_est[i] = (C1 - C2) / (2 * eps) end -- estimate error of gradient: local diff = torch.norm(dC - dC_est) / torch.norm(dC + dC_est) return diff,dC,dC_est end cmaes.lua000066400000000000000000000234731304650273300126650ustar00rootroot00000000000000require 'torch' require 'math' local BestSolution = {} --[[ An implementation of `CMAES` (Covariance Matrix Adaptation Evolution Strategy), ported from https://www.lri.fr/~hansen/barecmaes2.html. Parameters ---------- ARGS: - `opfunc` : a function that takes a single input (X), the point of evaluation, and returns f(X) and df/dX. Note that df/dX is not used - `x` : the initial point - `state.sigma` float, initial step-size (standard deviation in each coordinate) - `state.maxEval` int, maximal number of function evaluations - `state.ftarget` float, target function value - `state.popsize` population size. If this is left empty, 4 + int(3 * log(|x|)) will be used - `state.ftarget` stop if fitness < ftarget - `state.verb_disp` int, display on console every verb_disp iteration, 0 for never RETURN: - `x*` : the new `x` vector, at the optimal point - `f` : a table of all function values: `f[1]` is the value of the function before any optimization and `f[#f]` is the final fully optimized value, at `x*` --]] function optim.cmaes(opfunc, x, config, state) if (x.triu == nil or x.diag == nil) then error('Unsupported Tensor ' .. x:type() .. " please use Float- or DoubleTensor for x") end -- process input parameters local config = config or {} local state = state or config local xmean = x:clone():view(-1) -- distribution mean, a flattened copy local N = xmean:size(1) -- number of objective variables/problem dimension local sigma = state.sigma -- coordinate wise standard deviation (step size) local ftarget = state.ftarget -- stop if fitness < ftarget local maxEval = tonumber(state.maxEval) or 1e3*N^2 local objfunc = opfunc local verb_disp = state.verb_disp -- display step size local min_iterations = state.min_iterations or 1 local lambda = state.popsize -- population size, offspring number -- Strategy parameter setting: Selection if state.popsize == nil then lambda = 4 + math.floor(3 * math.log(N)) end local mu = lambda / 2 -- number of parents/points for recombination local weights = torch.range(0,mu-1):apply(function(i) return math.log(mu+0.5) - math.log(i+1) end) -- recombination weights weights:div(weights:sum()) -- normalize recombination weights array local mueff = weights:sum()^2 / torch.pow(weights,2):sum() -- variance-effectiveness of sum w_i x_i weights = weights:typeAs(x) -- Strategy parameter setting: Adaptation local cc = (4 + mueff/N) / (N+4 + 2 * mueff/N) -- time constant for cumulation for C local cs = (mueff + 2) / (N + mueff + 5) -- t-const for cumulation for sigma control local c1 = 2 / ((N + 1.3)^2 + mueff) -- learning rate for rank-one update of C local cmu = math.min(1 - c1, 2 * (mueff - 2 + 1/mueff) / ((N + 2)^2 + mueff)) -- and for rank-mu update local damps = 2 * mueff/lambda + 0.3 + cs -- damping for sigma, usually close to 1 -- Initialize dynamic (internal) state variables local pc = torch.Tensor(N):zero():typeAs(x) -- evolution paths for C local ps = torch.Tensor(N):zero():typeAs(x) -- evolution paths for sigma local B = torch.eye(N):typeAs(x) -- B defines the coordinate system local D = torch.Tensor(N):fill(1):typeAs(x) -- diagonal D defines the scaling local C = torch.eye(N):typeAs(x) -- covariance matrix if not pcall(function () torch.symeig(C,'V') end) then -- if error occurs trying to use symeig error('torch.symeig not available for ' .. x:type() .. " please use Float- or DoubleTensor for x") end local candidates = torch.Tensor(lambda,N):typeAs(x) local invsqrtC = torch.eye(N):typeAs(x) -- C^-1/2 local eigeneval = 0 -- tracking the update of B and D local counteval = 0 local f_hist = {[1]=opfunc(x)} -- for bookkeeping output and termination local fitvals = torch.Tensor(lambda)-- fitness values local best = BestSolution.new(nil,nil,counteval) local iteration = 0 -- iteration of the optimize loop local function ask() --[[return a list of lambda candidate solutions according to m + sig * Normal(0,C) = m + sig * B * D * Normal(0,I) --]] -- Eigendecomposition: first update B, D and invsqrtC from C -- postpone in case to achieve O(N^2) if counteval - eigeneval > lambda/(c1+cmu)/C:size(1)/10 then eigeneval = counteval C = torch.triu(C) + torch.triu(C,1):t() -- enforce symmetry D, B = torch.symeig(C,'V') -- eigen decomposition, B==normalized eigenvectors, O(N^3) D = torch.sqrt(D) -- D contains standard deviations now invsqrtC = (B * torch.diag(torch.pow(D,-1)) * B:t()) end for k=1,lambda do --repeat lambda times local z = D:clone():normal(0,1):cmul(D) candidates[{k,{}}] = torch.add(xmean, (B * z) * sigma) end return candidates end local function tell(arx) --[[update the evolution paths and the distribution parameters m, sigma, and C within CMA-ES. Parameters ---------- `arx` a list of solutions, presumably from `ask()` `fitvals` the corresponding objective function values --]] -- bookkeeping, preparation counteval = counteval + lambda -- slightly artificial to do here local xold = xmean:clone() -- Sort by fitness and compute weighted mean into xmean local arindex = nil --sorted indices fitvals, arindex = torch.sort(fitvals) arx = arx:index(1, arindex[{{1, mu}}]) -- sorted candidate solutions table.insert(f_hist, fitvals[1]) --append best fitness to history best:update(arx[1], fitvals[1], counteval) xmean:zero() xmean:addmv(arx:t(), weights) --dot product -- Cumulation: update evolution paths local y = xmean - xold local z = invsqrtC * y -- == C^(-1/2) * (xnew - xold) local c = (cs * (2-cs) * mueff)^0.5 / sigma ps = ps - ps * cs + z * c -- exponential decay on ps local hsig = (torch.sum(torch.pow(ps,2)) / (1-(1-cs)^(2*counteval/lambda)) / N < 2 + 4./(N+1)) hsig = hsig and 1.0 or 0.0 --use binary numbers c = (cc * (2-cc) * mueff)^0.5 / sigma pc = pc - pc * cc + y * c * hsig -- exponential decay on pc -- Adapt covariance matrix C local c1a = c1 - (1-hsig^2) * c1 * cc * (2-cc) -- for a minor adjustment to the variance loss by hsig for i=1,N do for j=1,N do local r = torch.range(1,mu) r:apply(function(k) return weights[k] * (arx[k][i]-xold[i]) * (arx[k][j]-xold[j]) end) local Cmuij = torch.sum(r) / sigma^2 -- rank-mu update C[i][j] = C[i][j] + ((-c1a - cmu) * C[i][j] + c1 * pc[i]*pc[j] + cmu * Cmuij) end end -- Adapt step-size sigma with factor <= exp(0.6) \approx 1.82 sigma = sigma * math.exp(math.min(0.6, (cs / damps) * (torch.sum(torch.pow(ps,2))/N - 1)/2)) end local function stop() --[[return satisfied termination conditions in a table like {'termination reason':value, ...}, for example {'tolfun':1e-12}, or the empty table {}--]] local res = {} if counteval > 0 then if counteval >= maxEval then res['evals'] = maxEval end if ftarget ~= nil and fitvals:nElement() > 0 and fitvals[1] <= ftarget then res['ftarget'] = ftarget end if torch.max(D) > 1e7 * torch.min(D) then res['condition'] = 1e7 end if fitvals:nElement() > 1 and fitvals[fitvals:nElement()] - fitvals[1] < 1e-12 then res['tolfun'] = 1e-12 end if sigma * torch.max(D) < 1e-11 then -- remark: max(D) >= max(diag(C))^0.5 res['tolx'] = 1e-11 end end return res end local function disp(verb_modulo) --[[display some iteration info--]] if verb_disp == 0 then return nil end local iteration = counteval / lambda if iteration == 1 or iteration % (10*verb_modulo) == 0 then print('evals:\t ax-ratio max(std) f-value') end if iteration <= 2 or iteration % verb_modulo == 0 then local max_std = math.sqrt(torch.max(torch.diag(C))) print(tostring(counteval).. ': ' .. string.format(' %6.1f %8.1e ', torch.max(D) / torch.min(D), sigma * max_std) .. tostring(fitvals[1])) end return nil end while next(stop()) == nil or iteration < min_iterations do iteration = iteration + 1 local X = ask() -- deliver candidate solutions for i=1, lambda do -- put candidate tensor back in input shape and evaluate in opfunc local candidate = X[i]:viewAs(x) fitvals[i] = objfunc(candidate) end tell(X) disp(verb_disp) end local bestmu, f, c = best:get() if verb_disp > 0 then for k, v in pairs(stop()) do print('termination by', k, '=', v) end print('best f-value =', f) print('solution = ') print(bestmu) print('best found at iteration: ', c/lambda, ' , total iterations: ', iteration) end table.insert(f_hist, f) return bestmu, f_hist, counteval end BestSolution.__index = BestSolution function BestSolution.new(x, f, evals) local self = setmetatable({}, BestSolution) self.x = x self.f = f self.evals = evals return self end function BestSolution.update(self, arx, arf, evals) --[[initialize the best solution with `x`, `f`, and `evals`. Better solutions have smaller `f`-values.--]] if self.f == nil or arf < self.f then self.x = arx:clone() self.f = arf self.evals = evals end return self end function BestSolution.get(self) return self.x, self.f, self.evals end de.lua000066400000000000000000000064241304650273300121620ustar00rootroot00000000000000--[[ An implementation of `DE` (Differential Evolution), ARGS: -`opfunc` : a function that takes a single input (X), the point of evaluation, and returns f(X) and df/dX. Note that df/dX is not used -`x` : the initial point -`state.popsize`: population size. If this is left empty, 10*d will be used -`state.scaleFactor`: float, usually between 0.4 and 1 -`state.crossoverRate`: float, usually between 0.1 and 0.9 -`state.maxEval`: int, maximal number of function evaluations RETURN: - `x*` : the new `x` vector, at the optimal point - `f` : a table of all function values: `f[1]` is the value of the function before any optimization and `f[#f]` is the final fully optimized value, at `x*` ]] require 'torch' function optim.de(opfunc, x, config, state) -- process input parameters local config = config or {} local state = state local popsize = config.popsize -- population size local scaleFactor = config.scaleFactor -- scale factor local crossoverRate = config.crossoverRate -- crossover rate local maxFEs = tonumber(config.maxFEs) -- maximal number of function evaluations local maxRegion = config.maxRegion -- upper bound of search region local minRegion = config.minRegion -- lower bound of search region local xmean = x:clone():view(-1) -- distribution mean, a flattened copy local D = xmean:size(1) -- number of objective variables/problem dimension if config.popsize == nil then popsize = 10 * D end if config.maxRegion == nil then maxRegion = 30 end if config.minRegion == nil then minRegion = -30 end -- Initialize population local fx = x.new(maxFEs) local pop = x.new(popsize, D) local children = x.new(popsize, D) local fitness = x.new(popsize) local children_fitness = x.new(popsize) local fes = 1 -- number of function evaluations local best_fitness local best_solution = x.new(D) -- Initialize population and evaluate the its fitness value local gen = torch.Generator() torch.manualSeed(gen, 1) pop:uniform(gen, minRegion, maxRegion) for i = 1, popsize do fitness[i] = opfunc(pop[i]) fx[fes] = fitness[i] fes = fes + 1 end -- Find the best solution local index best_fitness, index = fitness:max(1) best_fitness = best_fitness[1] index = index[1] best_solution:copy(pop[index]) -- Main loop while fes < maxFEs do local r1, r2 for i = 1, popsize do repeat r1 = torch.random(gen, 1, popsize) until(r1 ~= i) repeat r2 = torch.random(gen, 1, popsize) until(r2 ~= r1 and r2 ~= i) local jrand = torch.random(gen, 1, D) for j = 1, D do if torch.uniform(gen, 0, 1) < crossoverRate or i == jrand then children[i][j] = best_solution[j] + scaleFactor * (pop[r1][j] - pop[r2][j]) else children[i][j] = pop[i][j] end end children_fitness[i] = opfunc(children[i]) fx[fes] = children_fitness[i] fes = fes + 1 end for i = 1, popsize do if children_fitness[i] <= fitness[i] then pop[i]:copy(children[i]) fitness[i] = children_fitness[i] if fitness[i] < best_fitness then best_fitness = fitness[i] best_solution:copy(children[i]) end end end end return best_solution, fx end doc/000077500000000000000000000000001304650273300116265ustar00rootroot00000000000000doc/algos.md000066400000000000000000000333761304650273300132710ustar00rootroot00000000000000 # Optimization algorithms The following algorithms are provided: * [*Stochastic Gradient Descent*](#optim.sgd) * [*Averaged Stochastic Gradient Descent*](#optim.asgd) * [*L-BFGS*](#optim.lbfgs) * [*Congugate Gradients*](#optim.cg) * [*AdaDelta*](#optim.adadelta) * [*AdaGrad*](#optim.adagrad) * [*Adam*](#optim.adam) * [*AdaMax*](#optim.adamax) * [*FISTA with backtracking line search*](#optim.FistaLS) * [*Nesterov's Accelerated Gradient method*](#optim.nag) * [*RMSprop*](#optim.rmsprop) * [*Rprop*](#optim.rprop) * [*CMAES*](#optim.cmaes) All these algorithms are designed to support batch optimization as well as stochastic optimization. It's up to the user to construct an objective function that represents the batch, mini-batch, or single sample on which to evaluate the objective. Some of these algorithms support a line search, which can be passed as a function (*L-BFGS*), whereas others only support a learning rate (*SGD*). General interface: ```lua x*, {f}, ... = optim.method(opfunc, x[, config][, state]) ``` ## sgd(opfunc, x[, config][, state]) An implementation of *Stochastic Gradient Descent* (*SGD*). Arguments: * `opfunc`: a function that takes a single input `X`, the point of a evaluation, and returns `f(X)` and `df/dX` * `x`: the initial point * `config`: a table with configuration parameters for the optimizer * `config.learningRate`: learning rate * `config.learningRateDecay`: learning rate decay * `config.weightDecay`: weight decay * `config.weightDecays`: vector of individual weight decays * `config.momentum`: momentum * `config.dampening`: dampening for momentum * `config.nesterov`: enables Nesterov momentum * `state`: a table describing the state of the optimizer; after each call the state is modified * `state.learningRates`: vector of individual learning rates Returns: * `x*`: the new x vector * `f(x)`: the function, evaluated before the update ## asgd(opfunc, x[, config][, state]) An implementation of *Averaged Stochastic Gradient Descent* (*ASGD*): ```lua x = (1 - lambda eta_t) x - eta_t df / dx(z, x) a = a + mu_t [ x - a ] eta_t = eta0 / (1 + lambda eta0 t) ^ 0.75 mu_t = 1 / max(1, t - t0) ``` Arguments: * `opfunc`: a function that takes a single input `X`, the point of evaluation, and returns `f(X)` and `df/dX` * `x`: the initial point * `config`: a table with configuration parameters for the optimizer * `config.eta0`: learning rate * `config.lambda`: decay term * `config.alpha`: power for eta update * `config.t0`: point at which to start averaging Returns: * `x*`: the new x vector * `f(x)`: the function, evaluated before the update * `ax`: the averaged x vector ## lbfgs(opfunc, x[, config][, state]) An implementation of *L-BFGS* that relies on a user-provided line search function (`state.lineSearch`). If this function is not provided, then a simple learning rate is used to produce fixed size steps. Fixed size steps are much less costly than line searches, and can be useful for stochastic problems. The learning rate is used even when a line search is provided. This is also useful for large-scale stochastic problems, where opfunc is a noisy approximation of `f(x)`. In that case, the learning rate allows a reduction of confidence in the step size. Arguments: * `opfunc`: a function that takes a single input `X`, the point of evaluation, and returns `f(X)` and `df/dX` * `x`: the initial point * `config`: a table with configuration parameters for the optimizer * `config.maxIter`: Maximum number of iterations allowed * `config.maxEval`: Maximum number of function evaluations * `config.tolFun`: Termination tolerance on the first-order optimality * `config.tolX`: Termination tol on progress in terms of func/param changes * `config.lineSearch`: A line search function * `config.learningRate`: If no line search provided, then a fixed step size is used Returns: * `x*`: the new `x` vector, at the optimal point * `f`: a table of all function values: * `f[1]` is the value of the function before any optimization and * `f[#f]` is the final fully optimized value, at `x*` ## cg(opfunc, x[, config][, state]) An implementation of the *Conjugate Gradient* method which is a rewrite of `minimize.m` written by Carl E. Rasmussen. It is supposed to produce exactly same results (give or take numerical accuracy due to some changed order of operations). You can compare the result on rosenbrock with [`minimize.m`](http://www.gatsby.ucl.ac.uk/~edward/code/minimize/example.html). ```lua x, fx, c = minimize([0, 0]', 'rosenbrock', -25) ``` Note that we limit the number of function evaluations only, it seems much more important in practical use. Arguments: * `opfunc`: a function that takes a single input, the point of evaluation. * `x`: the initial point * `config`: a table with configuration parameters for the optimizer * `config.maxEval`: max number of function evaluations * `config.maxIter`: max number of iterations * `state`: a table of parameters and temporary allocations. * `state.df[0, 1, 2, 3]`: if you pass `Tensor` they will be used for temp storage * `state.[s, x0]`: if you pass `Tensor` they will be used for temp storage Returns: * `x*`: the new `x` vector, at the optimal point * `f`: a table of all function values where * `f[1]` is the value of the function before any optimization and * `f[#f]` is the final fully optimized value, at `x*` ## adadelta(opfunc, x[, config][, state]) *AdaDelta* implementation for *SGD* http://arxiv.org/abs/1212.5701. Arguments: * `opfunc`: a function that takes a single input `X`, the point of evaluation, and returns `f(X)` and `df/dX` * `x`: the initial point * `config`: a table of hyper-parameters * `config.rho`: interpolation parameter * `config.eps`: for numerical stability * `state`: a table describing the state of the optimizer; after each call the state is modified * `state.paramVariance`: vector of temporal variances of parameters * `state.accDelta`: vector of accummulated delta of gradients Returns: * `x*`: the new x vector * `f(x)`: the function, evaluated before the update ## adagrad(opfunc, x[, config][, state]) *AdaGrad* implementation for *SGD*. Arguments: * `opfunc`: a function that takes a single input `X`, the point of evaluation, and returns `f(X)` and `df/dX` * `x`: the initial point * `config`: a table with configuration parameters for the optimizer * `config.learningRate`: learning rate * `config.learningRateDecay`: learning rate decay * `config.weightDecay`: weight decay coefficient for regularization * `state`: a table describing the state of the optimizer; after each call the state is modified * `state.paramVariance`: vector of temporal variances of parameters Returns: * `x*`: the new `x` vector * `f(x)`: the function, evaluated before the update ## adam(opfunc, x[, config][, state]) An implementation of *Adam* from http://arxiv.org/pdf/1412.6980.pdf. Arguments: * `opfunc`: a function that takes a single input `X`, the point of a evaluation, and returns `f(X)` and `df/dX` * `x`: the initial point * `config`: a table with configuration parameters for the optimizer * `config.learningRate`: learning rate * `config.learningRateDecay`: learning rate decay * `config.weightDecay`: weight decay coefficient for regularization * `config.beta1`: first moment coefficient * `config.beta2`: second moment coefficient * `config.epsilon`: for numerical stability * `state`: a table describing the state of the optimizer; after each call the state is modified Returns: * `x*`: the new x vector * `f(x)`: the function, evaluated before the update ## adamax(opfunc, x[, config][, state]) An implementation of *AdaMax* http://arxiv.org/pdf/1412.6980.pdf. Arguments: * `opfunc`: a function that takes a single input `X`, the point of a evaluation, and returns `f(X)` and `df/dX` * `x`: the initial point * `config`: a table with configuration parameters for the optimizer * `config.learningRate`: learning rate * `config.beta1`: first moment coefficient * `config.beta2`: second moment coefficient * `config.epsilon`: for numerical stability * `state`: a table describing the state of the optimizer; after each call the state is modified Returns: * `x*`: the new `x` vector * `f(x)`: the function, evaluated before the update ## FistaLS(f, g, pl, xinit[, params]) *Fista* with backtracking *Line Search*: * `f`: smooth function * `g`: non-smooth function * `pl`: minimizer of intermediate problem Q(x, y) * `xinit`: initial point * `params`: table of parameters (**optional**) * `params.L`: 1/(step size) for ISTA/FISTA iteration (0.1) * `params.Lstep`: step size multiplier at each iteration (1.5) * `params.maxiter`: max number of iterations (50) * `params.maxline`: max number of line search iterations per iteration (20) * `params.errthres`: Error thershold for convergence check (1e-4) * `params.doFistaUpdate`: true : use FISTA, false: use ISTA (true) * `params.verbose`: store each iteration solution and print detailed info (false) On output, `params` will contain these additional fields that can be reused. * `params.L`: last used L value will be written. These are temporary storages needed by the algo and if the same params object is passed a second time, these same storages will be used without new allocation. * `params.xkm`: previous iterarion point * `params.y`: fista iteration * `params.ply`: `ply = pl(y * 1/L grad(f))` Returns the solution `x` and history of `{function evals, number of line search , ...}`. Algorithm is published in http://epubs.siam.org/doi/abs/10.1137/080716542 ## nag(opfunc, x[, config][, state]) An implementation of *SGD* adapted with features of *Nesterov's Accelerated Gradient method*, based on the paper "On the Importance of Initialization and Momentum in Deep Learning" (Sutskever et. al., ICML 2013) http://www.cs.toronto.edu/~fritz/absps/momentum.pdf. Arguments: * `opfunc`: a function that takes a single input `X`, the point of evaluation, and returns `f(X)` and `df/dX` * `x`: the initial point * `config`: a table with configuration parameters for the optimizer * `config.learningRate`: learning rate * `config.learningRateDecay`: learning rate decay * `config.weightDecay`: weight decay * `config.momentum`: momentum * `config.learningRates`: vector of individual learning rates Returns: * `x*`: the new `x` vector * `f(x)`: the function, evaluated before the update ## rmsprop(opfunc, x[, config][, state]) An implementation of *RMSprop*. Arguments: * `opfunc`: a function that takes a single input `X`, the point of a evaluation, and returns `f(X)` and `df/dX` * `x`: the initial point * `config`: a table with configuration parameters for the optimizer * `config.learningRate`: learning rate * `config.alpha`: smoothing constant * `config.epsilon`: value with which to initialise m * `state`: a table describing the state of the optimizer; after each call the state is modified * `state.m`: leaky sum of squares of parameter gradients, * `state.tmp`: and the square root (with epsilon smoothing) Returns: * `x*`: the new x vector * `f(x)`: the function, evaluated before the update ## rprop(opfunc, x[, config][, state]) A plain implementation of *Rprop* (Martin Riedmiller, Koray Kavukcuoglu 2013). Arguments: * `opfunc`: a function that takes a single input `X`, the point of evaluation, and returns `f(X)` and `df/dX` * `x`: the initial point * `config`: a table with configuration parameters for the optimizer * `config.stepsize`: initial step size, common to all components * `config.etaplus`: multiplicative increase factor, > 1 (default 1.2) * `config.etaminus`: multiplicative decrease factor, < 1 (default 0.5) * `config.stepsizemax`: maximum stepsize allowed (default 50) * `config.stepsizemin`: minimum stepsize allowed (default 1e-6) * `config.niter`: number of iterations (default 1) Returns: * `x*`: the new x vector * `f(x)`: the function, evaluated before the update ## cmaes(opfunc, x[, config][, state]) An implementation of *CMAES* (*Covariance Matrix Adaptation Evolution Strategy*), ported from https://www.lri.fr/~hansen/barecmaes2.html. *CMAES* is a stochastic, derivative-free method for heuristic global optimization of non-linear or non-convex continuous optimization problems. Note that this method will on average take much more function evaluations to converge then a gradient based method. Arguments: If `state` is specified, then `config` is not used at all. Otherwise `state` is `config`. * `opfunc`: a function that takes a single input `X`, the point of evaluation, and returns `f(X)` and `df/dX`. Note that `df/dX` is not used and can be left 0 * `x`: the initial point * `state`: a table describing the state of the optimizer; after each call the state is modified * `state.sigma`: float, initial step-size (standard deviation in each coordinate) * `state.maxEval`: int, maximal number of function evaluations * `state.ftarget`: float, target function value * `state.popsize`: population size. If this is left empty, `4 + int(3 * log(|x|))` will be used * `state.ftarget`: stop if `fitness < ftarget` * `state.verb_disp`: display info on console every verb_disp iteration, 0 for never Returns: * `x*`: the new `x` vector, at the optimal point * `f`: a table of all function values: * `f[1]` is the value of the function before any optimization and * `f[#f]` is the final fully optimized value, at `x*` doc/image/000077500000000000000000000000001304650273300127105ustar00rootroot00000000000000doc/image/parameterflattening.png000066400000000000000000002216421304650273300174610ustar00rootroot00000000000000‰PNG  IHDRÑú1,Õ2bKGDÿÿÿ ½§“ IDATxœìÝy\ÔuþðלÌpçp{dÞ¬:¢hâ™eµÕR«n¦ilkšÙ¶Ù¯¶k·Rkw5×NïµVÓ܇>¿?Øù.#`ƒ× ¾žù^ïï—á5ŸK&„ """+GŬY³¿ûÝïðâ‹/^ÓyRRRðôÓOž|òIÌŸ?ÿ†ÕHDDD·Üd¥½+ ""û¨¬¬Ddd¤ôý#<‚7Þx£Å~#FŒ€Ñh„Z­ÆáǯùzãÇGqq1|||ðÝwß]óyn•ÄÄD$$$ OŸ>ÈÎξæó\¼x‰‰‰èÑ£._¾|+$"""{`ˆ&"ºCUWW#!! ×ë±téRL™2ݺu³Ú/66Bh4šëº^bb" áèèx]ç¹ÕnT½Z­ö†œ‡ˆˆˆìË*D§¤¤à›o¾AFFjjjZìüæ›o¢_¿~·¬¸ÛÙ7ß|ƒ7^yå <ØÎµ-//&LÀk¯½† 6Ø»"""¢K Ñ|ðÞÿ}( TTTÀl6[íèììŒçž{îš/ôþûï#)) °råJ¸¸¸XmŸ3gòóóáììŒU«V]óu:Š3gÎ`ëÖ­šÆÒý’¥K—"66ðÑGÁÏÏï¦ÖGDdáî²2ÄÆÆÂÅÅñññ:t¨MÇÖ××ã믿ÆÎ;qéÒ%( ôêÕ “&M’ºŠ'%%aæÌ™(--˜L&«ÇÝ»w† †þóŸÒ¶éÓ§#%%ð·¿ý #Gޤ¥¥aòäÉ€ûï¿ï¾û®tLLL ¾üòKœ={ èÚµ+ž|òILœ82™LÚï³Ï>Ê+ï¾û.ÒÒÒðã?"//žžžøõ¯Ýæ}=zsçÎE}}=à·¿ý-^~ùe›ž™Ecc#âââ°sçNœ>}ùùùÐjµ Å´iÓ0`ÀißiÓ¦áÔ©S€ýë_èÓ§Õ¹Ìf3ÆŽ‹ÊÊJ888`Ïž=R zVVV­Z…#GŽ ¨¨^^^6lž}öY«÷š~ø¯½ö`Ö¬YP«Õزe ²³³Q__ýû÷ÃÑÑß|ó vî܉ÌÌL!àããƒÁ€ûï¿l×3 ""º- !Dee¥ptt„Z­>>>" @ggg@xxxˆ½{÷Šk5bÄ@(•JQXXØb{PPtýÎàwÞZ­VhµZ±uëÖ_Üÿ¡‡„V«©©©· B"ºÓåææ Âßß_ÄøñãÅðáíö“Éd€Ðh4V¯gddˆîÝ» áää$ …puu¿úÕ¯DHHˆ˜9s¦hhhNNNÒ5®ü5j” …B(•JQ__/„¢ººZ8;; …B!ˆ &H×þç?ÿ)(ˆßýîwB!ÄsÏ='ôz½èÚµ«Ðh4B©T áïï/|ðAQ]]-#::Z¾¾¾ÂÉÉI '''!“É„———øì³Ï1xð`ñòË/KÇmÛ¶MhµZ@¨T*ñâ‹/ŠÆÆÆ6ŸóÖ­[*žþyéõ?þñÂ××WtëÖM¸»» ¥R)4èÒ¥‹Ðétâÿø‡´ï«¯¾*ˆ.]ºˆ^x¡Å56oÞ,Ýïc=&½¾víZáîî.ºwïnõ3êÙ³§ðôô»ví’ö]¸p¡ îºë.áää$¼½½¥ç¡ÕjEff¦0 "44TôèÑCúÙ8;; ???«—/_£FjóÙ݆&É 55JeS£ôäÉ“‘ŸŸ¬¬,deeaúôé74´+Šz¾ÎÆòs "º•zôèµZ}ûö¡¤¤DêIӣш{ï½ééé(//‡P©T8yò$òòò€%K– 00¿ýío¡V«4½Lœ8QúŠŠŠÂèÑ£‚††ÄÄÄh‹ÝµkW444âãã¥ëïÛ·*• 0cÆ ÀßÿþwìØ±yyyÈÌÌ„““¼½½‘ŸŸœœ;v sçÎmq/ ¨©©Ann.är9œœœ¬Z¬›ûâ‹/…šš8;;ãÝwßÅâÅ‹ÛÜÿjŸŸÌÌL( B«ÕâòåË(--Å;#cÇŽ^ýu(•J\ºt ëÖ­ƒÑh´:×Â… a2™àììŒ^x°gϼøâ‹(//GFFÔj5‚‚‚ÐØØˆ´´4TWWcÒ¤IÈÉɱ:W}}=ŒF#ÊÊÊ...0™LX¹r%qòäI\¸pnnnèÚµ+T* QWW'Ãd2!55‰‰‰V?7""¢Î@ùÄO //BÈårÄÇÇã‰'žLš4骟>}?üð222P\\ OOO„‡‡ã׿þµôÇ’ÉdÂÔ©SñóÏ?KÇ͘1ooo¢¨¨@S—4Ëõ¦YagÏž-}Ÿ––†-[¶ 55f³]ºtÁ#<‚AƒYÕöÖ[oI×üì³Ï°}ûvÄÅÅ¡¦¦}ûöÅ´iÓàííÝê}Ùz ‹cÇŽá›o¾Ann.|}}ñÈ#\õ¹]iòäÉÒä>0wî\©»»ŸŸ>úè#i[aa!6oÞŒäädTTTÀÏÏcǎŸqã¬þˆûòË/±mÛ6Àk¯½†ÜÜ\ìÞ½ÅÅÅèÒ¥ ¦L™‚^½zµ¨%''ÿþ÷¿‘™™‰òòrx{{£gÏž7nºtébµ¯ÑhÄæÍ›qäÈ”——ÃÇÇcÇŽÅ„ ¬jÉÈÈÀ+¯¼9r$"##±iÓ&\¸p555xï½÷УG\¸p7nÄåË—a4áåå…þýûcܸqìÞNt“) Ì›7‹-‚§§'æÏŸx@ ªWzÿý÷‘——½^G}‹/–~ïûí·xüñÇQ^^ŽÅ‹cÞ¼yX±b¶mÛ†ÂÂB888`ûöíVçsvvF\\„X»v-F…½{÷ÂÕÕÐ¥K\ºt ………ðððÀ`6›¡T*1räHF¼÷Þ{(//‡J¥ÂÊ•+ñÔSOh ß#FŒ@AAÖ¯_×_Ýê÷YQQÔj5âââ¤îÈñññÒ$B`þüùXºt)êêêàììŒ+VàÉ'Ÿ¼æg>pà@,Y²ÑÑÑV“Ž}ýõט6mŒF#>þøc¬Y³ÎÎÎ1böíÛOOO|óÍ7˜:u*€¦Ù¿“““®®®1b€¦aRP©Tؾ};Æ'ÝËìÙ³ñÅ_@¡Pà‹/¾ÀÛo¿-]?33°iÓ&éý,)) o¾ù&  VÝÍSSS±zõj«ûkll¼ægCDDÔѵڽN.—‹÷Þ{OÌ™3§ÕîÜ#GŽÞÞÞ¢k×®ÂÍÍMꆦÓ鄟ŸŸHKKB4u—Ëåmvã ’ºÅµö!„Âl6‹yóæ q×]wYu#srr>ú¨¨««“ê4h  … þþþÂÑÑQ¨T*áíí-t:8qâ„U»|{¯ÑØØ(^zé%¡Óé„···P*•ÂÅÅE¸»» ½^oswnKWÅÖ¾ôz½´ßŠ+„›››–jsqqžžžbРA"//OÚwÚ´i€Ðét"$$Dèt:¡Õj…J¥~~~ÂÝÝ]|õÕWVu|ðÁÂÕÕUZÝ»P«Õ"!!AÚ7>>^xzz áàà ”J¥Ðëõ"((H 2DäääHû&&&JÝE…èÝ»·4T`ùòåâå—_îîîV÷æìì,¼½½…B¡¹¹¹ÿë?1i’xâ‰'ÄOùä!Dëݹáââ"DHHˆÕ—å÷¾ÈÎÎBáíí-ý¸Rvv¶puu•Þ„bðàÁ"((HÈårѽ{w@,Y²D;vLú¾GB!öîÝ+|}}Ñ»wïçüñÇ…L&...â³Ï>Bü¯;·V«mµ‹tóîÜ®®®B£Ñ…B!ÜÜÜDLLŒÍϹ­îÜBqîÜ9ñòË/‹qãÆ‰^½zIÏÏò`¹?!„HHHr¹\xzzŠaÆI¯Ï;WÈår«.àçΓ~ǪÕê?Ÿ€€é½wäÈ‘BˆÿuçvvvcÇŽmqO=õ”èÞ½»ÉdâñÇ;vìeee­Þs~~¾5j”ùä¬[·¥¥¥P©TP«Õ¨¯¯G]]ŒF#är¹M]üÆÇ£¬¬ wß}·´”Œeò˜ÿûßø¿ÿû?TTT ººZêrXSS£ÑˆŠŠ Œ?‰‰‰V×”Éd¸|ù2T*„B //2™ ³fÍÂèÑ£áëë‹S§NaÑ¢E¨¨¨€Ñh„J¥‚››ªªª`6›ÑÐÐ µ*\¾|£FBuu5´Z­´ôMaa!¤®šGŽ‘Z¦,-ë&“ õõõ(**’ºöŸ?6l@YY™4)Ž››***ÐØØ(}YlذAºfmmm‹IêˆèÚÈd2,^¼3fÌ€ÉdÂ_þòL™2¥Õ} 4­5]YYÙæ9kkkQ^^ÿ«^Ûßß~~~¨­­Evv6rss‘ššŠªª* 8©©©€Í›7Ãd2ÁÏÏ.\Þ#ÒÓÓ¥I¾î»ï¾ç7n¾ÿþ{TVVâôéÓVÛÜÝÝa0Ú¬­°°µµµÒ¾DïÞ½¯z?¶øöÛo1cÆ xzzâÒ¥KVÝ¡-,]ª`РAðóóCvv6ÒÒÒ””„~ýúaõêÕhllDmm-ž~úiÀÙ³g¥ß±uuuRërkŠ‹‹­¾×ëõ­ö¼zöÙg±}ûv!°k×.=zEEERï®ßÿþ÷Ò{»öîÝÛþ‡BDDtïÙ³‹/†R©„L&ôiÓ#GŽàÑGmóÀ¡C‡báÂ…())AMM ÊËË‘——‡±cÇÂßßزe 4 víÚ%u‘S(ؽ{7âããuëÖa×®]ðõõ¨T*i[||<Þzë-œ:u 6l@ZZœqüøqFTVVâèÑ£ðöö†Z­Æ×_-Íþja6›áææ†¤¤$ÔÔÔ ;;ÞÞÞB ??gΜ€v_£¶¶o¼ñ ¡V«±zõjTWWÃh4âÕW_…Ùl†Éd²é‡°sçN >\ºÿM›6I÷¿zõjÔÔÔ`îܹ())‘fKµüazùòe 0r¹iiiØ¿¿Õ¹KJJ T*±uëVÔÖÖ¢ªª  @cc#\\\°cÇÀÁƒ¡R© “Éðç?ÿF£ÅÅŨ­­ÅáÇ1mÚ4©»áœ9sP]] N‡{ィ¬¬ÄÏ?ÿ GGGddd ¼¼ëׯoq¯èÝ»·4~nÿþýV8,[¶ ÕÕÕ(..F}}=vïÞI“&µ:VüZÆ ÑÕ=óÌ3 BRRúôéƒ?ü°Õý,㔵Z-¦NŠ™3g¶ú5oÞ¼6‡Î\i̘1 Acc#^ýuôèÑCúÀsðàÁpuuEbb"öíÛ‡êêj@tt4€¦ h Ñ­]ÏÉÉIúp²ªªÊj›R©„»»{›uYB´¿¿? E‹~-*++1sæLF\¼x¾¾¾¸ÿþû1eÊ<óÌ3Ëåþ÷œ-,3€{xx`ÕªUøöÛoQ__µZ‡~š>°´¬²ÒæÏgæÌ™VC¦@£Ñ´ú<†Ž7¢K—.¨««CVVjjjpüøq¼ñƸçž{ZÔKDDÔ]ó,VkÖ¬Á… ðÉ'Ÿàüùó¸|ù2jkk¥–鯯FlÞ¼=öØu¹aã  ^^^˜7ožÕv¹\ŽîÝ»ãÔ©Sرc‡4Ôj5V®\)µèúøøàø,X³ÙŒ . oß¾í¾FPP4V°_¿~RkL&Ã[o½…5kÖ\õ“ÿöØ»w/4 àáá?üÐê[£ÑOOOäää`ûöí5j”´Í2ÉÌøñãX°`&Nœˆ²²2\¸pAº?ñßqñÇŽC||< …BJËÀMË MP,_¾nnnš&&zçwð§?ý •••øöÛo¥V‘æÏñ§Ÿ~‚N§Ð4Fú§Ÿ~‚2™ Ä=÷܃ÐÐPÈårDDD ""Âê}úôAUUÜÜÜÚ¯ID×î_ÿú"##‘žžŽääd!Zì£R©P[[‹<ÿüó2dÈu_wôèÑøñÇëÖ­“–ÁzöÙga6›QPP€ÔÔT}úàÂ… ¸xñ"ºuë†Ù³g£¶¶¶ÍVz[:tjµ%%%˜0a¾ûî;i[nn.6nÜØ"ìMKOÍŸ?çÏŸÇ—_~‰ýû÷£¦¦nnnVaX¯×K?7•J…åË—Û\ÛÕ> ;v,.^¼ˆ¬¬,ìÞ½›6mBLL *++‘””„U«VáÙgŸµùZDDD·#ùµ¸téR 2+V¬Àºuë°gÏÄÄÄàôéÓÈÈÈ€3~^«“'OJ-Ì/^Ĭ¾²³³¥õ3ÓÓÓ­Ž•Ëå-þ¸ €££#êëë¥Û{ Ëú£0a«óËd2Œ=ú†Ü;$''K- ………-jûù知ûÈÎζ:ÖÅÅÅj=VËý+ ˜L&äææxàF444`ÿþý˜8q"\\\0vìX¬X±Bjá)++“þµÌÌÚÜ”)S P(PPPÐjk‡‡‡ -}ôQ©ëö·ß~‹Q£FÁÕÕ'NÄúõë[LNsêÔ)ddd 99Y ðDtãŒ9ƒ BFF†ÕðšæºwïðòòÂ{ï½×j ä‰'°hÑ"é{˺ÅmµVFFF"++ @Ó‡t/^„››¼¼¼0jÔ(ÔÔÔ ±±>>>0™LèÙ³§tìСC¥ßM–I-jkk±|ùrTWWC­V[}Ðh«3f ** éééÐh4xå•W°jÕªvŸ§yM–zCCC­¶-]º´ÍI¹,-ÎBxyy!--  Óé.í7xð`é}£¸¸[¶liq®ºº:¬ZµÊæn×6lÞ'1cÆ ìÚµ K—.EŸ>}ÐÐЀ]»vhj ‰‰ALL Ž9bÓù‰ˆˆn×Ô}üøq¼ÿþû¨®®FYY<==wwwTVVâÒ¥KÈÍÍmu|×µ¨ªª’ºî 2äª]¯lµlhh€“““Õk–®ÃBé•ö^ãäÉ“¨¯¯‡\.ou¬Ÿ¯¯¯4øzUWWKãñzö쉻Í}ï¿ÿ~«ïe2Y›÷ß|¬qPPvìØI“&¡¤¤D7þã?"!!‹-BBBjjj¤óxyyµ¸¾‡‡‡Õ3½Rk¡÷W¿úÖ­[‡gžyFZVE;wâàÁƒøðÃwÞ'ý²7¢Gˆ‡J¥’>H³X´hzè!ÄÅÅaÀ€ˆŒŒÄÔ©Sáää„ÌÌLìÝ»À°aÃ0þ|@pp0233!„ÀgŸ}†nݺA.—#00½zõ‚»»;zöì‰ÔÔTÔÔÔ ??_ ¼C† ‘‚±e†èæ`Á`0àСCP*•1bfÍš¬]»VšÂÝݽÕ1Ó¶>“§žz _~ù%ð—¿üUUUÒ’RíÑ¿iÈÏ矽^½^Ÿ~ú _~ùe‹%¬š[´hþóŸÿ   f³:/½ô’Õ>Ó¦MÃòåËQYY‰3f`ïÞ½‡ÑhĹsçðÕW_!//Ϫ§ÑÕüõ¯ÅôéÓ1iÒ$ øûû£¨¨K—.•º‘²²²¤á]eee-†ZÝή)DoÚ´ z½ùùù˜;w.–,Y"m[¿~=.\(µpÞžžžÒ’X&L°ZŠÃ^×ÈÊÊ‚B¡@cc£Ô%º¹‹/¢®®ÎjÙ’ë©Í2&¸_¿~øæ›o®ûœ­±LwòäI|÷Ýwؾ};Nœ8!Mföÿ÷øÛßþ&u¼téR‹s\¾| …f³žžž-¶·ÕMð¡‡B~~>ðý÷ßcÇŽ8uêŒF#RRR°páB¼ùæ›7ö†‰¨MÝ»wǃ>(Í›p¥‰'bæÌ™X±bЧOüóŸÿD}}=êëëqéÒ%iy*‹‡z)))(++Ã|¹\ŽŠŠ DFFâ믿ÐÔ¥Ûh4âìÙ³€¨¨(M]’#""pôèQ)L[ÆC[lذ}úôAii)ñùçŸC&“¡¨¨999P©TضmÛuͧ°nÝ:8;;ã³Ï>ƒ^¯ÇâÅ‹ÑÐÐÐbÐ/éÖ­î»ï>ìÚµ ÕÕÕøôÓO¡R©¤¹5~éØ=zH“­ÕÖÖZ c²X¶lâââ’’‚ÒÒRìÚµ {÷î…R©D}}=òóó[oâjär9þóŸÿààÁƒÉdÐjµ¨­­ELL 4 Þyçi_µZŒŒŒäÝ;wii©Ôj{åäckÖ¬‘Z š³„I¹\Þ¢E€4áKk]؆ &ÿÅ_H]Ôš3øüóÏÛy'×~ ƒÁ íóõ×_[uO¬¬¬”º´ÙÊrÿ2™¬Åó6l˜tþï¿ÿùùù-ŽollĦM›Ztç¶Urr²ÔrŠW_}‡B||<\\\PWW‡@«ÕJ;99Iã->úè#)@ßsÏ=6]ûøñã0™LËå Ûo¾‰£Gâ?ÿùôz=Ìf³4hš>77¹¹¹­ŽÕ$¢öiíw6дÞüÕBÖòåËñå—_ÂßßgΜAJJ ÒÒÒpñâEÈår :ýë_¥ý_|ñE<ðÀP*•ÈÌÌÄ… PXXˆ¢¢"iŸÑ£GKÐÉd2«yF-µÞ:::¢[·nVõâìÙ³GUUNŸ>””äåå¡W¯^8vì†Úâ>ZûÚœeJ‹O?ýsçÎE^^²²²ðÒK/aáÂ…W=œ;wÎêû7â7¿ù qþüyihŽ¥Eÿj,¡ÙÁÁ=öX«©T*œ8q¯¼ò \]]¥¡H§OŸFjj*\]]1yòdiýh‹óçÏ·zÍçŸÁÁÁ¨®®ÆÅ‹qᤤ¤ ==#FŒÀÏ?ÿl5\ç—> ""º]]SKt¯^½ é¢O?ýuuuX·nbbbZ•ºK—.MT*±mÛ6DFFB©TÂÁÁƹsç “Éðý÷ßãî»ï†L&ƒ³³3ž~úi¼ûî»P(ÈÏÏGXXÞ{ï=i©cÇŽá“O>AUU~ÿûß_Óƒhï5úõë½^/-ïò»ßýÏ?ÿ<êêêðþû¢¢]×·Œ/T(øî»ï T*¡R© R©0lØ0øùù¡¬¬ µµµ0 X´húôéƒââbœ>}ü1Î;‡””©;]{¬X±«W¯ÆôéÓ1nÜ8„„„ ¶¶ëÖ­ƒ‹‹ ÊÊʤ?Ò&OžŒO>ùf³Ó§OÇ‚ УGÄÆÆJ“×466búôé6]{Á‚Ø»w/ž{î9 >!!!¨¨¨ÀW_}%¡lþ‡Y@@œœœPUU%MGDíçííãÇøßy͹¹¹!##CZêÐ2ctsS¦LÁ”)S`2™pùòeÔÕÕÁßß¿ÅÜ@S¨ûꫯð¯ý yyyÒy›Ÿ‰ŒŒ”Þ_´Z­Uož™3gbäÈ‘ u¾’¿¿?bccQ[[‹ÌÌL444 ((ÎÎÎ-ö}ë­·¤ÖlËïàæ&Mš$Í)aYAÂbÉ’%˜3gŽÕTõõõ­Nv8fÌ$$$hšÍÂÙÙ7n”Æ«T*B©TbÞ¼y0›ÍmcÙ°a€¦=gΜV÷šÞS.\ˆ… ¢°°ùùùpvv†^¯oñ3öÙg¥%ÃZ{™5kfÍš%MòVZZ ooo«{² ±cÇ Ý­ÝDDDžBìܹS8;; ¹\.^{í5«•¤çÌ™#±wï^!„¹¹¹ÂËËKÈår¡T*…———€Ðét€¸÷Þ{¥ó|ýõ×ÂÙÙYz½^xzz WWW*„â¯ý«ðôô„···ðððNNNâá‡B±uëVáææ& …ÉdÂÓÓSøúúŠîÝ»‹îÝ» µZ-är¹7¾Ý¥ IDATt½Aƒ B¥R‰òòr«{Z¹r¥ððð2™L|üñÇÒëí½F\\œÐjµ€pww"88X899 …B!4ÐjµbëÖ­¿¸b÷ž={¤sùûû ///áææ&BBB„B¤¦¦ 777!—Ë…L&¾¾¾Â××W„„„ˆ.]º¡R©DJJŠBˆiÓ¦IçÚ½{·ÕµNŸ>-4ËåbêÔ©B!fÏž-„«««ð÷÷ÞÞÞÂÏÏO B©TŠ}ûö !„¨­­~~~€pss=zô~~~ÒÏÝÍÍM<÷ÜsÒõEÏž=q×]wµ¸÷Ç{Lh4áââ"üüü„———ÁÁÁÒµ“““¥ýe2™ œœœDaaá/>["¢ÎàĉbÏž=âí·ßNNN€0 ö.‹ˆˆèN3IjV0™LWíÛ|’(½^-[¶ (++Cvv6òóó1~üøV'‹ŠŠÂƒ>µZ¢¢"£¢¢BêîõÒK/¡ÿþÐh4(--EII ª««QRRxøá‡±k×.„††B­V£ºº………ÈÌÌDff&\\\ðÌ3Ï´¸n[³ÀVUUµ¸ßö^cèСرc<==QSSƒœœ©eeøðᨯ¯·yrµ1cÆ`Ê”)P©T(((@QQÊËË¥ Åî¾ûn¤¤¤`̘1P*•(++Caa!²³³¥±~?üp‹¥[ښ̥¾¾Þêþ‡ oooÔÔÔ ¤¤%%%R«E@@6mÚ„ÈÈHMãÜRSSqß}÷¡ªª éééÈÏχÉd‚V«ÅÿøG|òÉ'V×»ÚLí‘‘‘pwwGmm-JKKQZZŠüü|äää [·nÒÏäJ–gCDt'˜={6ž~úi¬Zµ ÕÕÕpttÄ?þñ{—EDDtÇ‘ !Dnn.bcc½{÷F¿~ý¤Nž<)M^rß}÷YuÛ2›ÍÒ’V‹²²2œ8q¥¥¥ÐëõD8pþóŸQ\\Œââb8::ÂÛÛ^^^R°nþÕÚ6{ßu2!„¸™x÷½÷ðõæÍ7ä\ZØ·¥¥¥ÒWnn.rrr¬^k¾-++ r¹:ÎêËßß~~~-^×ét€»»û ©™ˆˆˆˆˆˆ:É7½%:=3w?0C{äºÎc®«Ç;#ÇB«ÕB«ÕÂßßßæckjj¬ÂõÚµk±víZÑ!€¦ÏÄÿ»MŸ+Èd²f_ ƒ\þ¿×€¦×wîü={ölWMDDDDDDtû¹%ݹ½‚ƒÐuÐÀë:G½ÉtÍÇ^¼>Œçfüoÿù¹61™jQV^‰²²Ê¦ÿ-¯D^~1òò‹¬^Ûà8~ÿûߣ¨¨555­¶l_­åÛÏÏᅵˆˆˆˆˆˆ:º?&úfQ©”pqvls»‹³#¼½t¿xž.½'bïÞ½ jÑâ}e—óÓ§O·Ø–——ww÷6»–·¾õz=ärN¬NDDDDDt«Ý±!úf¸–®æ&“ %%%m†ïØØØ¯çççC­V_u\÷•Û|}}¡P(nâÝu~ Ñv¦ÑhàïïßîñÔ¥¥¥mN¨væÌüøãV¯@¥Rýâ¤jÍ·ùøø@©ä?¢›)??ßÞ%QæááÁå=‰ˆ:&¤Û”%ô¶GMMM›³™§§§·ØVXX¥RÙ®àíííÍ7{"™L&èõz{—ADؾ}ûiï2ˆˆ¨†è;ˆV«E·nÝЭ[7›±Œón-|§§§·ØVTT…BaÓRb–m^^^P«Õ7ñΉ:¶òòr¸ººÚ» "ê`úöík¨ ÑtUÍÇy ›Ži>ÁÚ•áÛ¼›o»2xÛ¾àààp“ˆˆˆˆÈC4Ýp̓·­Ÿ¢_9³yóðÝ>>P*ù}""""¢kÁ¿¤‰:KèmšššV×ñ¶Ìl~å¶ÂÂB(•Êvoooo¨Tª›t×DDDDD·†h¢ÛœV«E·nÝЭ[7›±Œón-|[&Xk¾íʵ¼m ß^^^P«Õ7ñΉˆˆˆˆn=†h¢;PóqÞƒÁ¦cšO°veøn>³¹eÛ•ÁÛ–ð‡›|÷DDDDD׎!šˆlÒ>>P*•øÓ[oâ“,n³–¹yÓæ½Øæö¥o½ƒÕ<^ú^àûï¾ÃðáÃÛ<†ˆˆˆî,2!„¸™x&:ªÁ0&zÆu§ÞdÂtw_ÔšL×]Ó|€Âœ3Xø×®û\]zOÄá#ñ ºîsÑÅd2A«Õ¢¼¼®®®Òëf³EEE(..¶ú*,,lõõ¢¢"”––ÂÓÓN:¨=tpöð€³‡]„bLôLéÜ*(¯²~·¹®õµµmn¿ÓŽÿûƒbÉ;Addd›ÇÝ,}ûöŲeËøïˆ¨c™Ì–h"¢F©TB¯×C¯×Û|LCCŠ‹‹q¤¸'‹ QY\Œªâhœ ýo·q›®­V_5dÞiÇËÙ­žˆˆˆ®ÀMDÔ ( øøø ÄÃu½{Ø»"""¢N‹SÆu&“ CÝí]F§2ëï`À€ö.ƒˆˆˆ:¶Dµ¡Ç ÐAeï2ˆˆˆ¨aK4‘¢‰ˆˆˆˆˆˆlÄMDDDDDDd#†h"""""""1DÙˆ!šˆ¨“ÉdPª8“4ÑÍÄMDÔI888 ®²ÔÞet*Ÿ¾<ÉÉÉö.ƒˆˆˆ:†h""¢6¤%œ@II‰½Ë ""¢„!šˆˆˆˆˆˆÈF ÑDDDDDDD6bˆ&""¢›îã?†‡‡‡ô•••eï’ˆˆˆ®‰ÒÞQçvöìY¼þúë(//¸ºº¢±±ÑÎU]¶DÑMc6›1yòdÔÕÕÙ»""¢‚!šˆ¨i0›í]Ý@ÙÙÙxõÕW1hÐ øøø 00X°`.]ºdµobb"ž~úitïÞ¸ûî»ÔÔT«ý²²²¤.Õ“'OÆš5k___téÒÏ<ó 233¥ýŸzê)iÿ~ø¡E èÕ«<<< ×ëQVVfµýÝwßEVVÌf3d2Ù |:DDDöÁMDÔI˜L& uv·wʬ¿€ØåÚ»wïFhh(¶lÙ‚ôôt””” ¼¼¹¹¹Ø¸q#>üðCiß5kÖ`Ô¨Q8xð rrrPYY £ÑˆÌÌL >[¶l‘ömll„Z­Fii)6lØ€… ¢´´UUUÈÍÍÅ?üƒÁ€ììl@ß¾}QZZŠÀÀ@¬Y³¦E{÷îEff&***w÷ÿýLHHÀ’%KPXXˆÂ××÷æ=0""¢[„!šˆˆ¨ = „N§»å×½pᢢ¢PZZŠsçΡ¡¡½{÷†¿¿?òòòœœ,훜œŒÙ³g£¬¬ —/_†››úôéƒââbüðÃ@tt4222¤cš·Ÿ;wYYY ‚B¡@nn.JJJ0kÖ,ÀK/½…B³gÏâ»ï¾kÑÒüü&“ :Ï>û¬ôºÑhÄO<ššhµZlݺõ&=-""¢[‹!šˆˆ¨ƒ™?>ª««áàà€xeeeHIIAjj*ª««±}ûvŒ9Òj_WWWL:U ÙÐëõHJJBß¾}±téÒ×Bà‘GAyy9Ξ=‹³gÏÂÉÉ BìÝ» V«1dÈÔ××£k׮ؼy³t|EE~úé'McŸ'L˜ m{ùå—QYY !>þøcèõú›÷Àˆˆˆn!†h""¢f×®]hll„L&ÃÊ•+¡P(¬¶?øàƒxüñÇÔ××cÁ‚Ò>*• Ÿþ9€¦Öæü±ÅuT*6nÜ(µL£{÷îpvv†Ñh”fÐþóŸÿ ¨ªªÂÚµk¥ãׯ_!œœœ0uêT¨T*Àž={°~ýz",, Ó§O¿!Ï…ˆˆ¨#`ˆ&""ê@êêê`4ÎÎÎðññis_³ÙŒšš€““S‹}|ðAÈd2dgg[uç¶ððð€Ri½Ú¥N§ƒ——„¨ªª<ðÀpvvÆùóçñóÏ?ãÂ… €>úuuuP*•RP.++ÃÓO?ªª*8::âÛo¿½¶ADDÔA1Du Í×OV«ÕWÝW!ý·¥¸9™L&µ2·¶.skç—Éd-Z¾àᇄ„„`ݺuÈÈÈ@zz:ÀÛÛ[š€mýúõ¨®®†L&ƒÙl–fîöðð@AAt¾ÐÐPxxxàĉW½G""¢ŽFù˻ѭ¢Ñh P(`6›QZZŠòòr¸¹¹µº¯J¥’ö-++k±ïÅ‹¥íïï]u½ÿþûX¿~=233±víZTUU¡¾¾øÃþ í×ÐÐ€ŠŠ éûÖÖ‡¶lwvv†™Ë²Ñm†-ÑDD„L&ƒ²•ÖHºýtëÖ Ð¿¼ñÆ-¶_ºtIšø+ 0xð`,^¼Øj¿×_ Ðét5jÔuÕ‚ÀÀ@–-[†ÆÆFÔÔÔ`Ê”)Ò~=zô@×®][ý²´p«Õj¡wïÞðð𸮺ˆˆˆn5¶Duˆ«,ÅY4Ø»”NãÓ—çC÷ÔÓøÕ¯~uK¯»`Á<þøãøùçŸQSSƒ{ï½#FŒ€ƒƒRRR°}ûv<÷Üs=z4þô§?aöìÙ¸xñ"Ö¬YƒÓ§O£_¿~8zô¨Õ¤csæÌ¹îº¢££ñÆo@§Ó!// …Vë??^êæ}%???äååA£Ñ 66ÁÁÁ×]Ñ­Æ–h""¢6¤%œ@IIÉ-¿îc=†éÓ§£¢¢gΜÙlƱcǰcÇÄÅÅÁÕÕUÚ÷ùçŸGxx8²²²PZZŠââbìÙ³III¨¬¬„ƒƒ-Z„¾}û^w]¯¼ò  RRR¤µ¡£££¯û¼DDD·†h""¢hÕªUX»v-ôz=°oß>$&&¢¼¼Æ ³‡‹W^y2™ û÷ïÇ¡C‡——‡»ï¾;wîĬY³¬ÎÝ|‚¯Ö\¼x±Õ×Õj5 ƒ4޹¶¶=ôP»ï­²²²ÝÇuìÎMDDÔAM:S§NÐXÚÜwÑ¢EX´hÑ/îÛ|\sk3zoÙ²E É...-¶ÇÄÄHKp)•Ê«Öt¥ÔÔT444 7hk²4""¢ŽŽ!šˆˆè6О°zµ}år9t:]›Û[ ÎWž»=µ4×¼:ÑíŠÝ¹‰ˆˆˆˆˆˆlÄMDDDDDDd#†h"¢N¤á¿cY‰ˆˆˆèæ`ˆ&"ê$L&†:»Û»ŒNeÖß?À€ì]u œXŒˆˆ¨ = „-g°&""¢;[¢‰ˆˆˆˆˆˆlÄMDDDDDDd#vç&"º 544àôéÓˆ‹‹Ã‘#GpìØ18pÀÞeuz ÑDD·¢¢"ÄÅÅI¡ùøñãð÷÷Ç=÷܃{î¹óæÍƒF£ÙlƆ×߯ÆEŸmž/ù‡qæÀÁ6·óø¦ãemîADDDw*†h"¢¦¡¡gÏžEBB:„ØØXdee¡ÿþˆˆˆÀ‹/¾ˆaÆÁËË«ÅqyçÀ(•#†Á¡Íkxª¡qtis;¿úñDDDtçbˆ&"²³‚‚8p HHH@ll,<<<ƒÁ€èèh 8rùÕ§±P(xýõ×mºfdd$"##¯¹æ;ýx"""ºs1DÝBf³©©©8tè4†yРA EDD¢££±fÍxzzÚ¹R""""j C4ÑM”››‹ãÇK]³ãââ ƒÁ€{ï½ÿþ÷¿qéÒ%¸»»Û»T""""²C4Ñ Ò¼•966 ÈÎÎFXXÂÃÃñ /`ãÆÐét“Ʉٳgÿb7m""""ê8¢‰ˆ®QNNŽÕä_ÉÉÉR+sDDæÏŸ>}ú@&ãÏDDDDC4‘ êëëqòäI©…966F£aaa0 ˜?>†ÎnÙDDDDC4Q+®leNJJBHH"""0f̶2Ý¡¢‰èŽg4qâÄ i‰©˜˜ÔÕÕÁ`0À`0àí·ßFxx8´Z­½K%"""";cˆ&¢;NNNŽÕä_­µ2÷íÛ×ÞeQÄMDZuu5¥®Ù€B¡&ÿŠŠŠ‚Á``+3Ù„!šˆ:•+[™Ñ»wo„‡‡câĉX´hºvíjï2ošŸ~ú mnŒŒDHHoÇñO<ñÛ<†ˆˆˆî, ÑDtÛªªªBRR’šãââ R©¬Z™ FcïRo™SI±8vüx›Ûût×"Ы²Íí)‰{p<á4ÿ¯o¾ý£Gfˆ&""" C4Ý6ÒÓÓ¥æC‡!-- ¡¡¡0 ˆŠŠÂ²eË®ÚÊx'˜õûÉ3¸úNum?óq`æã<þ¿öýtôêç"""¢;C4uH•••HNN–Z™9µZˆˆ„‡‡#** aaappp°w©DDDDtaˆ&"»khhÀÙ³g¥%¦®lež:u*V®\ {—Ú¡cÛæÍ˜:i´½Ké4 T*•½Ë ""¢„!šˆn¹ŠŠ =zÔªk¶F£±je2dÔjµ½K½­äææâïK–3Dß@{w­‡\£·wDDDÔ0DÑMÕ¼•ÙÒ5;++ ýû÷GDD¢££±zõjxyyÙ»T""""¢_ÄMD7Tyy9Ž;&µ2ÇÆÆÂÃÃááá0 ˆŽŽÆÀ!—Ëí]*Q»1DÑ53›ÍHMMµZ—ùÊVæ5kÖÀÓÓÓÞ¥Ý ÑDd³ÜÜ\?~\ꚇàà`  Ì;—­ÌDDDDÔ©1DQ«ZkeÎÎÎFXXÂÃÃñ /`ãÆÐétö.•ˆˆˆˆè–aˆ&"@NNŽÕä_ÉÉÉR+sDDæÏŸ>}ú@&“Ù»T"""""»aˆ&ºÕ××ãäÉ“V“F„……Á`0`þüù>|8ÜÝÝí]*µƒ——¦Mý½ËèTÎ_È@·žP*ùvIDDDMøWÑàÊV椤$„„„ ""cÆŒa+s'¡×ëñÒÜ™æ2{—ÒiŒ? ‡Ä#((ÈÞ¥QÁMÔÉFœ8q HHH@LL êêê¤É¿Þ~ûm„‡‡C«ÕÚ»T""""¢ÛC4Ñm.''Çjò¯ÖZ™ûöíkï2‰ˆˆˆˆ:†h¢ÛHuu5¥®Ù€B¡&ÿŠŠŠ‚Á``+3ÑMÂMÔ]ÙÊœ˜˜ˆÞ½{#<<'NÄ¢E‹ÐµkW{—IDDDDtÇ`ˆ&ê ªªª””$…游8¨T*«VæÁƒC£ÑØ»T""""¢;C4‘¤§§K-̇BZZBCCa0…eË–!$$ÄÞeQ3 ÑD·@ee%’““¥Væ#GŽ@­V#""ááሊŠBXXì]*ÝÆŠ‹‹±mófL4ÚÞ¥twÝÕ*•ÊÞeQÂMtƒ544àìÙ³ÒSW¶2O:+W®„½K¥N&77_²œ!úÚ»k=ä½½Ë ""¢„!šè:UTTàèÑ£V]³5U+ó!C V«í]*]'†h¢vhÞÊléš••…þýû#""ÑÑÑX½z5¼¼¼ì]*Ý ÑDWQ^^ŽcÇŽI­Ì±±±ððð@xx8 ¢££1pà@Èår{—JDDDDD·C4Ñ™Íf¤¦¦Z­Ë|e+óš5kàééiïR‰ˆˆˆˆÈN¢éŽ•››‹ãÇK]³ãââ ƒÁƒÁ€¹s粕™ˆˆˆˆˆ¬0DÓ¡µVæììl„……!<</¼ð6nÜNgïR‰ˆˆˆˆ¨cˆ¦N)''Çj‰©æ­Ì˜?>úôé™LfïR‰n///L›ú{—Ñ©œ¿n= Tòí’ˆˆˆšð¯ºíÕ××ãäÉ“V“F„……Á`0à…^À¦M›àîînïR‰n*½^—æÎ„0—Ù»”NcôøI8|$AAAö.…ˆˆˆ:†hºíXZ™-]³“’’‚ˆˆŒ3†­ÌDDDDDtÓ0DS‡f4qâÄ ©kvLL êêê¤É¿Þ~ûmÜ{ï½ptt´w©DDDDDt`ˆ¦%''Çjò¯ÖZ™ûöíkï2‰ˆˆˆˆèÅMvS]]ÄÄD©kö P(¤É¿¢¢¢`0 Õjí]*†hº…®leNLLDïÞ½މ'bÑ¢EèÚµ«½Ë$"""""jC4ÝUUUHJJ’Bs||<”J¥U+óàÁƒ¡Ñhì]*‘Í¢é†HOO—Z˜:„´´4„††Â`0 ** Ë–-CHHˆ½Ë$êÔŠ‹‹±mófL4ÚÞ¥twÝÕ*•ÊÞeQÂMíVYY‰ääd©•ùÈ‘#P«Õˆˆˆ@xx8¢¢¢{—JtGÉÍÍÅß—,gˆ¾öîZ¹Foï2ˆˆˆ¨aˆ¦«jhhÀÙ³g¥%¦®lež:u*V®\ {—JDDDDDtÓ1D“•ŠŠ =zTêš}øða888Xµ22jµÚÞ¥Ýr Ñw°æ­Ì–®ÙYYYèß¿?"""Õ«WÃËËËÞ¥u Ñwòòr;vLjeŽ…‡‡ÂÃÃa0B.—Û»T"""""¢‰!º“2›ÍHMMµZ—ùÊVæ5kÖÀÓÓÓÞ¥Ñ ôsêÿ³wçá1ÝýÿÇŸ3“OÅSj IDATI&û"!DT•¨¶–V µEo”ªZJUÑ…ön‹j­Þ]îZË­wWÜ¥¥ªJQ[í±ÔK(‚Döu’I23™Ìœßùå|$¶ÒïÇuå"sΜó9Ÿ3"¯óÙâð«ù‹|Aî+ÜoÐüºfc…Ûåý%ï×è<+ÜG!„w' ÑUDJJ P»fïÝ»—:uêмysš7oÎÈ‘#¥•Yˆ*.""£Ñ€»»;Z—ŠÄÏ›ÿ6›­Âíòþ+¿_!„w/ù áT^+sRR?ü0‘‘‘Œ1‚eË–áïï_ÙEBü´Z-ÞÞÞ×´¯Á`À`0Üð¹îö÷ !„âî%!úœœì´ÄÔ¥­ÌmÚ´aìØ±DDD Ñh*»¨B!„BQ¥Iˆ¾ÍØl6Ž=ê4ùWvv¶S+óO?ý„ŸŸ_eU!„B!î:¢+Yi+si×ì#GŽF›6mˆŠŠ’Vf!„B!„¸HˆþrèÐ!µköŽ;(**R'ÿúðÃiݺ5•]T!„B!„å} %'';MþU^+sãÆ+»˜B!„B!®‘„蛤  €Ã‡«]³·oߎN§S'ÿêÛ·/Í›7ÇÝݽ²‹*„B!„âIˆ¾AÉ)ìÞƒ17§Ÿ~šØØX5jDdd$Ý»wgêÔ©„‡‡Wv1…B!„BÜD¢¯A~A!1GO³kïví9¾ÇqqÑÑì¡Fè´ZÆO·nÝdÍQ!„B!„¨â$D—ãÜ…$ví9Ì¡Ã'Ùµ7†3gãirÿ½4¨}zEñùŒ±„Õ n£î<üðà…B!„â.pׇhS~!Gý_+óÞ}GquÕÙê!Z?ú}zu¦E³ÜÜ\+»¨B!„B!*Ù]¢ív;§NâàÁƒœ=}ŒG{Ω•yЀîüï«T= ²‹*„B!„â6T¥Ct^^ûöíS—˜Ú½{7nnnT¯^@o>xw87oŒ««¾²‹*„¸‹Y­V,KeCq›Q¥²‹ „¢U&D_ÚÊ\º6sbb"Mš4¡M›6 6ŒùóçÈ´iÓÈHŽ%²ÕC•]l!„ ((¨²‹ „B!®Ñ¢7ÿï[ Ô©S‡ÜÜ\öï߯¶2GGG@dd$Í›7gذa4mÚ­V[ÙEBˆr rss+»BˆÛ˜§§geA!Äeîˆíp88µköâb5j„ÅbA«ÕR£F """h×®S¦L¡qãÆ•]T!„¸.>>>•]!„Bq2.¢Ñjùꫯˆˆˆ@«ÕKll,{öìaÞ¼ydeeQ¿~}"""hܸ±úgݺu¥EZ!„B!Ä_vg„h­–¶¬g¨_0C† Q_oÑ¢…Ó~¹¹¹œ={–'NËœ9sˆ-®O:…‡CµB!„BˆkvG„èkåëëKóæÍiÞ¼¹Óë—‡ë?þøƒääD–­ØÈ=õjѰêýÿ?ï¡n ×B!„B!ʨR!º"—‡ë€€2’c?æâÎ]äÄÉ8Nž:Ïÿæ¯àä©sdeçJ¸B!„BQÆ]¢+âëãE³‡Ñì¡FN¯çæå_s¸..¶ãp8*é „B!„Büîê]‘ë ×™YY4iÒ„ È„fB!„BQÅIˆ¾å…뺺³aãï˜Íæ«Nh&áZ!„B!îl¢oooo"""®:¡™„k!„B!„¸³Iˆ¾…®u¶p ×B!„Bqg] $\ !„B!ÄIBômDµB!„BÜÞ$Dß$\ !„B!ÄíABôLµB!„Bü½$DWA®…B!„âÖ}‘p-„B!„„h!áZ!„B!®‘„hQ! ×B!„BáLB´¸n®…B!„w+ Ñ⦑p-„B!„¨ê$D‹[NµB!„¢ª-*„k!„B!ÄFB´¸íH¸B!„BÜ®$D‹;†„k!„B!De“-îx®…B!„ Ѣʒp-„B!„¸Ù$D‹»Ž„k!„B!Ä’-Äÿ'áZ!„Bq5¢…¸ ×B!„BˆR¢…¸A®…B!„¸ûHˆâ&“p-„B!DÕ%!Zˆ¿‰„k!„B!î|¢…¨d®…B!„¸sHˆâ6%áZ!„BˆÛ„h!î0®…B!„¨<¢…¨"$\ !„BqëIˆ¢Š“p-„B!ÄÍ#!Zˆ»”„k!„B!®Ÿ„h!„ ×B!„BTLB´âšH¸B!„BB´â/’p-„B!î&¢…·„„k!„BQIˆBü­$\ !„Bˆ;™„h!Ämán ×kÖ¬aÀ€•] !ÄmÊ`0‘‘QÙÅBq ÑBˆÛZU×6› °lÙ²Ê.Šâ6“’’BTTTeCüÍæÏŸÏÙ³gxÿý÷1 7tœ_ý•Ý»w0|øpÂÃÃoZ…¸ÛIˆBÜ‘ªR¸6 ÜsÏ=•Z!ÄíG¯×WvîXEEE}N'!Zˆ+-„¸+H¸Bˆ»Czz:V«­V‹««+îîî˜Íf, Û¶m£sçÎìÛ·ï¶üyÞºukl6z½^z#q›’-„¸«I¸BˆŠ%$$ðûï¿“””„Á` ,,ŒÎ;—ÛŠ{àÀ¢££1T«VöíÛÓ¤I§}ŒF#S¦L Q£FôíÛ—5kÖpêÔ)¼¼¼èСM›6U÷ÿæ›oˆàõ×_'44´ÌyK» Œ;–5jУG:wî̃>HPP6›mÛ¶1vìXòóó9þ<{öì!22²Âk_·nÛ·o`È!4lØ€œœ¦N ”ü2~üxõ=ëׯgÛ¶m <˜F©Ûrrrøý÷ß9sæ ‡ƒððpºvíJ@@€Óy6lˆ‹Kɯè:Îi›Ãá`Ë–-8pFÃ>HTT&L 44”×_½Üë9yò$›6mÂh4R·n]zö쉯¯/̘1CÄÎáp0nÜ8õ½Mš4aàÀÖ•w ÑBQ ×Bˆ»YAA `ãÆhµZŠŠŠ0 xzzRXXÈG}ÄèÑ£HMM%**ŠsçÎa·Ûq8øøøàp8hÛ¶-ß}÷~~~äååñõ×_c2™ðññaìØ±¸¸¸MQQ...tèеk×¢Õj‰‰‰aöìÙáééÉûï¿ïTÎøøxÆŒƒ¢(Ô¯_Ÿ)S¦0pàÀr_“&MX½z5›6mÂÅÅ…„„„+†èŒŒ ¦M›†¯¯/îîî|ðÁ@IPž6mŠ¢àééÉСC©Q££GæäÉ“hµZFŒ¡ëÓO?eâĉxzz’››‹ÙlÆÕÕ‡ÃÁ[o½Å¤I“Ô}+@›6mÈÈÈÀf³ááá··7?~oooî»ï¾rCôÛo¿ÍñãÇQ…ââb¼½½5j«W¯&22’¬¬,þûßÿb±XPE}PðÈ#0pà@¶nÝÊï¿ÿ”´˜?ñÄÖŸU™„h!„¸®…UÍf£iÓ¦œ={|||0™LX­Vnnnœ?€ÂÂBš4iBff&ÞÞÞxxx››Kaa!‹…ÇÓ­[7vìØ¡¶®zzzb2™0™LX,´Z-Š¢HFFëׯgܸqL›6 &0wî\rrr˜?>&Lp+‹ÕjåÌ™3„‡‡S³fMþõ¯±hÑ"òòò(,,DQt:>>>dgg3uêTEaòäÉNç¿´º¨¨ˆ¦M›’­¶\çææbµZÉÍÍÀËË«Üë°Z­:tHîææFnn.Š¢Ð«W/.\¸€^¯'00””ìv;AAAê1î»ï>vîÜÉܹsIOO§C‡¢Å]K~ƒBˆ› 4\?ÿüóL™2…Õ«WG||<³gÏ&**ŠœœæÌ™CçÎ  E‹ü÷¿ÿ%))‰Õ«WsîÜ9Ge_Šâ.÷á‡röìY<== `Þ¼y$''c4Ù¼y3;vTÇê¾õÖ[dffDHHëÖ­Ãd2ñÛo¿áîîNbb"iii|÷ÝweΣ( µk׿À¤¦¦2nÜ8˜;w.PÒ=¹nݺØl6¬V+{öìq:Féò€™™™<ûì³NÛ~ýõW6lHÓ¦MiÕª¯½öx{{Ó¡Czè¡+ÖCõêÕ©V­v»Ã‡SPPÀ®]»Ðjµh4rssÙ¼y³ú:”ë.]º%]¨¿ùæ.^¼ˆ»»;?ÿü3¹¹¹F>ÿüsüüüpsscúôéWX–qãÆ‘MXXÁÁÁlݺ³Ù̺uë(**ºâuF4 Ó§O'11‘#Gކ¢(h4Ö­[Ç=÷ÜÃŋՕ"t:iiiê×¥÷ïvŸMˆ¿ƒ„h!„¸…®®|ðAŠ‹‹Ë„ë矞©S§J¸BüíæÎ‹¢(x{{óÃ?УGüýýñôô¤U«VüüóÏL›6 €Ÿ~ú (YŽköìÙ<üðà :tèÀ¿ÿýo ¤køÒ¥KËœG«ÕòÇиqcüüü5jv»///µuà7Þ@£Ñ ÕjY¸p¡úúöíÛÕná­Zµ¢víÚeÎa·ÛÉËË#//üü| ƒ9sæ\S]<öØc@I0Þ¹s'IIIäææŒ¢(äææ²~ýz–,YBqq1tìØ€ ŽÝn§aÆ,_¾œW_}•W_}•ß~û ///5jDqq1ëÖ­«°¥õ§Õjùâ‹/xàÐëõtìØ‘×^{íŠ×àééÉÈ‘#>|8ÕªU£~ýúLž<½^OAA§OŸ¾¦º(=VJJ žžž²4£¸«Iwn!„¨¥á:!!°zõj@º… !*—¢(êäRF£‘:”»_i×ìììl dÒ¬öíÛ;í3|øpÆŒCZZ111eŽáïïOµjÕœ^ C§Óqþüy ñðð`ذaŒ3†ÄÄD~üñG>ûì3ÜÝÝ™8q"v»€€† Ræø=ô“&MBQÎ;ǦM›HJJ¢  €-Zpâĉ »@—zöÙgùù矱ÙllÞ¼™øøxµ»sÛ¶mÙ¹s'………ÄÅűiÓ&²²²Ôð}àÀŒF#‡âСCeÎqá€+†ÙÒ{’œœ\¦ž‡ ÆgŸ}Vá{½½½i×®ÓkááḸ¸`µZILL¼B 8{ë­·xë­·®y!ª* ÑBq‘1×BˆÊTXX¨þ=$$äŠk—NB%]Ÿ/çåå…F£AQòòòÊl÷ðð(óš^¯Wv•vovww§uëÖlß¾~ýõWzöì©ÎœMÏž=Ë+""‚ˆˆõ{EQèÙ³'«W¯Æd2ñå—_:Í@]žN:¡ÕjIOOgÆ :tHmž4i:tÀÇLJ•+W’””„F£áÞ{ï%00(ùÙ]Ú ü¾ûî»âšÍ<ð@…Ûìv;:Ž€€€23v‡‡‡_ñEQgá.UúÄáp\±¹¢|¢…âPQ¸6ÄÆÆªázóæÍÄÆÆb2™Xºt)]»v­¤ !îD—Û””uÜlyJg†’µ™/ß×d2©pùøøü¥r½÷Þ{ìܹ“ÜÜ\,X@^^6›ºwï^n ¿œF£aذalܸ‘œœœ2ã«ËãííMÍš5IHH ..Nl-22’V­Z¡ÕjÉÌÌT'«^½:?þ¸ú~___µ%úŸÿü§ÓŒÝ×ÃÅÅ›ÍFvv¶¨K•Nò&„øûH3…BÜÁüüühݺ5/¿ü23gÎdãÆ$&&¯v'Bˆk¥Ñh €7–»ŸÕjP»cW¯^]`«ÔìÙ³Q…àà`š5kö—Ê…——999ìÚµ‹O>ùEQP…çŸÞiß}ûö©áýrüñ‡:—««ë5»S§N@ɵS£F :wîŒN§£qãÆ’‘‘ÝnG¯×«û4oÞ\]Þë믿.÷ø‡C]6ª"¥-ýµk×.³ï¬Y³®é:®EiTTBˆ¢…¢ òóó»b·A!„¨È+¯¼‚F£!//Aƒ±téR’’’ÈÌÌdÛ¶mtïÞwÞy€gžy(Y‚é•W^aÇŽdgg³~ýzuMgwww ð—ʤÑhèÛ·/P²ôRRR:ww÷2k=?ýôÓÜ{ï½|þùçlÚ´‰Ã‡³iÓ&^{í5¦OŸŽ¢(¨3h_ÍÀÑétäää`³Ù(**Rƒri7òҖᬬ,Ú´i£¾÷…^àÂ… èt:NŸ>M¯^½8{ö,ùùùÄÆÆ2oÞ<7nL¿~ý®X†þýû%ݺßxã öìÙC^^k×®å›o¾¹¦ë¸¥“³ét:Ž=Zfû”)S0 ¸¹¹1tèЛv^!î4Ò[!„B¨&L˜À²eË8yò$‹…Ñ£G“ŸŸÍfC§ÓáêꪎÃ>}:Ë–-#55úõëG^^‹ÅBHHµk×fàÀ7¥\ ,P'÷ gèСeº››Íf’’’˜0az½^]Ý ??_=;44´L vE"##Ñh4äçç%­ð¥ËcõéÓ‡‰'b³ÙÐjµ4mÚÔéfÆ yûí·ùâ‹/HKKcåÊ•¬_¿‡Ã··7nnndff^u†)S¦°páBΟ?O`` ½zõ"''­V‹««+6›MÁü¯xä‘G8xð ééé<ú裘Ífüq6lØ@QQõêÕãäÉ“ÄÇÇÿ¥s q'“-„UL¯ýÙ¿go…Û¿XúMmYáörHÞ¯~¯NŸ:å4þSˆªL§ÓqðàAž}öYÖ®]Kvv66›M]ª¨¨H°Ë`0pâÄ :wîÌ©S§0›Íj@ÔétDFF2oÞ<§1¼&“éŠçÏÊÊ*÷õºuëR§Nu pff&ƒ *³_ëÖ­Õ™² ±Z­èõz<==±Z­ôíÛ—Ï?ÿ\]ëúj õêÕãôéÓ¸¸¸¨“AÉäez½›Í†———ÓxèRãÆ£FŒ3FƒÙlÆl6c2™(,,D§Óѽ{÷2ï+J&\;zô(‘‘‘$''c·ÛqwwÇÝÝ___Ξ=‹Á`(wìyiø¿œÍf+Óm{Ô¨Q,[¶Œ¢¢"5@ê¸nø¿™Â…¸›IˆBˆ*æùϦÓÙ\Xávs`öSñl¬O~ö)].ùåénÿèFÊ:Ýâ®c0X±b©©©lݺ•äädÜÝÝ £cÇŽ¸»»«ûV¯^#GŽËîÝ»ÉÊÊ"((ˆ¶mÛR¿~}§ãúùù©Ý¼/ßðòË/«-œnnne¶ÿðÃê¬ÜÔ­[·Ì>«W¯¦°°èèh’’’HOOÇÓÓ“zõêѺukuŒòõ˜5kûöípšoB£Ñ°`ÁÎ;”t%/Ï!C0`{öìáĉ˜Íf‚ƒƒ©[·.­ZµRgËxõÕWÕ®æ—Ös58wî»wïæàÁƒ@É2^ÇŽãõ×_Ç××—ûî»OÝÿ…^àÁÊÎà]«V->ùäu(¹?ÇŽ#::š¸¸850—·cǎꑇ~øÚ*Oˆ*H£Üâ™^6 }‹‡ˆöâ_:ŽÍba¨_0ÖK–S¸QÓ¦M##9–)ÿ¾±/U·QwvïùCC"„×ã—_~aúôéìÚµë¦s62Ðw³ òð';3óšfÿâfJHH AƒNKI‰»×sÏ=‡··7/¾ø"7Æn·ÍÓO?Ùl&<<œ¯¿þúšÇz !nسÒ-„Bq³ÛíFõ+''§ÜïCCC?~|eWÜ }ûö‘’’ÂO?ý¤®»­Ñh(**",,Œºuë–Û\qóIˆBˆ*$::š±?áíu«*»(UƤE ÊíV*ÄÍ”››[&üÆÅÅa·ÛùðÃËl»ô+?????üüüð÷÷Wÿ~ék5kÖäž{î©ìËA£FˆÇf³áp8Ðjµxzzb0hÞ¼9óæÍûË‹ !®„h!„¨Bìv;–ŠÇC‹ëÕûit设£¸«™ÍfrrrÈÉÉÁb±8}µ¯ÌÌLt:þþþN_®®®(Š‚ÅbÁßߟzõê•ÙÇßߟàà`§‰»DÕ´jÕ*ÒÒÒˆŽŽ&%%³ÙL5hÕªU¹ãË…·Ž„h!„B¸®à{éWvv6ÜÝÝ1 å†ÝŠBpõêÕË):!!µk×2eÊ”J¨ q; ¦wïÞ•] !îz¢…BQ%ÜH.m5NII©0ü^-W«VMºü !Ä]DB´B!n W ÁWê&žžŽ^¯¿®|i«qHH¦²«@!Ä@B´B!nŠ[1.øòÀ"ã‚…BT* ÑB!„PÝnã‚Åío×®]üöÛo<óÌ3<ðÀ•\¢»ƒÑhdíÚµÄÇÇ«K^]êÙgŸ•{qöîÝËÊ•+èÓ§-Z´¨ä‰Û„h!„¢ ¹Ñl±XÈÉÉ‘qÁâºmܸ‘I“&áããCãÆïÚà6aŠ‹‹ æÍ7ß¼¥çZ»v- JþÍ;m÷öö¦Y³f7|/~üñG> À[o½EõêÕ¶õÕW\¼x€É“'ßñC!:ÄŒ3Ðjµ4hÐ@B´¸* ÑBQ…´mÛ–ië×P¶MBܨ÷žÊÏsçáêêú·œïZBpE]¥ÓÒÒpuu•qÁ¢Rü]ÿFnWÓ§OÇjµâëë{KC´¢(<÷Üs˜L&|}}pwwÀf³Q\\Œ§§ç_:Ç’%KXµjnnn 2¤Lˆž3gG`Ò¤IUâ熋‹ ..ĵ‘OŠBT!Z­7wwÀQÙE©26-ÿ™âY³¯9 \n¯gl𵌠¾R@–qÁ¢2Üÿý´lÙ½^OÍš5+»8U^JJ ‹€fÍšñûï¿£ÕjøàƒøøãoÚ¹®Ö»¤*„g!n„„h!„¢ùÙÙ8ìv~úé'5FŒF£Óß/}ÍÍÍ ??¿2_þþþêßk×®]f[évù¥TT¦ pêÔ)^|ñEî½÷Þ2û|óÍ7ÄÇÇ0räHjÖ¬I§N(³aa!›7oæäÉ“˜Ífj×®Íã?Nhh¨ºÏ·ß~ËéÓ§?~¼ÚÂËwß}@Æ 2dH¹ï7n~~~W½¾ŒŒ Ö­[G||<...4iÒ„¨¨( ƒÓ~óçÏçÏ?ÿàÝwßåäÉ“ìÞ½›üü|5jD÷îÝÕ÷œ:uŠ ¨]ª- ãÆSÕ¾}{ºté¢~æÌ6mÚDzz:ÞÞÞ´lÙ’ÈÈÈkú·ÿñÇsîÜ94 Z­–ììlÞ}÷] ¤'Ò•²}ûvΞ=Kvv6¾¾¾<úè£<úè£NûM˜0ØØXõû3fP­Z5<<<(,,$%%EÝ>~üxµì÷ÝwC‡U·°eËNž<‰ÅbQï}­ZµœÎ¹xñbŽ?À;ï¼Ã¹s爎Ž&//† Ò£Gµµýr×zŽRYYYüúë¯$&&àto®ÕòåË9pào¼ñ ìÝ»—üü|î¿ÿ~ºvíZæ3%YwîÜÉéÓ§ÉÊÊÂÇLJ–-[ÒªU«2÷É’%ÄÄÄ%]ê/^¼ÈÎ;IOO',,ŒaÆpöìYöìÙCRRÅÅÅ„……Ñ¥K—2½233™>}:<ðݺucõêÕ\¸pÀÀ@zöì©>³X,üúë¯üùçŸx{{Ó­[74hPæz[¶láÏ?ÿ$++ êÖ­K»víðññ¹îz½“HˆB!*”ŒÝngÍš5T«V ¸çž{* Ê29–¸“?~œ3fP£F l63fÌpÚž™™Éo¼¢(Ô¨Qƒ‰'2kÖ¬ ÇDÿðÃŒ1NG~~>‹777dΜ9èt:bccùÏþƒ»»;­Zµ¢gÏž@I¸úôÓOq8øùù1xð`4 Š¢0jÔ(L&>>>Lž<ùª×6eÊ&Mš„Á` 77‡Ãû­â IDAT››...üðÃtëÖMÝ÷Ûo¿%::½^ÏÖ­[9yò¤ÚUÚÃÃOOO¶oßν÷ÞËÙ³g™={6v»«ÕÊÔ©SÕcÅÆÆÒ¥KÌf3¯¼ò «W¯ÆÍÍœœìv;...²qãF5jtÅk˜û “ÉDQQ‘ZrrrèÕ«¿ÿþ{™Ö\­VË¡C‡pssCQ ùùù˜L&zôèÁ©S§ðððÀËË‹ÜÜ\EA£Ñ8µ6nÜEQxöÙg9}ú4999èõzEÁ××NGbb"M›6åܹsWì_·n]ÒÒÒ(((Àf³a0ðööF£Ñ †ÛË8p€ÂÂBµîîî8Μ9CË–-¹xñ":Ž:uê””„ÕjÅÝÝõ>×®]›´´4RSSÕ ¤ž§´µrþüùŒ;V½ÖËïý‚ (**R{\ZßÄÝÝ]­o“ÉD^^Ý»w'..N½××{Ž­[·2lØ0 ðôôÄÕջݎF£áÌ™3WúøTH«ÕröìY¼½½±X,êç#77—¨¨(bcc ààÁƒ¢ÑhÔ{`0P…¸¸8ZµjEBBB™¡CZ­–ãÇc0J†l¹¹¡ÕjÉÌÌ$%%E½ïŠ¢àp8ÈÍÍ¥¨¨ˆ™3g AƒÔcùúúb41™L¸¸¸ŸŸ¯~^“““yóÍ7Õk)Lrr23fÌ gÏžDFFb³ÙèÚµ+ÙÙÙxxxàp8°ÛíØívõÚŒFã ÕéB[ÙB!„·‡€€"""ÔVÍ7:m_´hPÒªõüóÏWxœœœFEvv6®®®Ì›7ŒŒ Xºt)ÕªUÃÕÕ•¥K—’ššJëÖ­±Z­8Ö­[€ÉdâÌ™3hµZ5TmÞ¼€ßÿ]-c=®xMéééLœ8‘´´4\\\øøãIKK#66–îÝ»S³fMŠŠŠxöÙg˼×jµ¢×ëY¸p!)))ìØ±ƒ€€E!11‘˜˜:vìÈÅ‹ÕðãããCZZšú5yòd6lØÀÑ£G‰E§Ó±hÑ"òòòغu+aaa4nÜ«ÕJß¾}¯x-'Oždýúõèt:4 ƒ RCí{ï½Wáû:t([·n%55«ÕÊÞ½{yôÑG©Y³&iiiüøãÄÅÅ©]œõz=ÑÑÑêµ8p€‹/ª-†””uû²eËÈÎÎfôèÑê½ÿöÛoÕ{¿dÉõÞ/Y²„´´4§ršÍfôz=sçÎ%%%…]»vˆ¢(dee±oß>€:ÇðáÃ)((ÀËË‹aÆ‘˜˜HJJ Æ Ãf³aµZ¯X÷åÉÏÏG«Õò¿ÿý“ÉÄÑ£Gy衇€’ÏÎ| îëïïÏ!CØ´iÉÉÉX­VöïßOÛ¶m©Q£|ÿý÷eÎQ¼¿øâ bccÙ·oƒ E‹L:•cÇŽQXXHff&³gÏF¯×“]áøxEQ¨_¿>'Nœ 11‘6mÚдiS5„søðaRRRèÙ³'Íš5Ãáp0~üxŽ;FQQZ­–ÈÈHΟ?¢(¤¦¦²bÅ zôèQnwöªDZ¢…B!„jôèѼð 8.\¨vsމ‰!33???êÕ«wÅ®ÇË—/'((£ÑHýúõÙ´i›6mR·ãëëËéÓ§Y¾|9¯¿þ:7æðáä§§“’’¡C‡0 h4rssXµjo¼ñ+W®T»¯–ŽÇ®ÈªU«¨^½:yyy4kÖLíâêëëËìÙ³ WÃ`\\÷Üsú^777þóŸÿлwo $5ŠÿûߨívNŸ>̓>xÕ:ýñÇ âܹs<óÌ3<óÌ34iÒ„o¿ý–¨¨(4 üñÇUu#V¬XÅbaýúõlݺ•óçÏSXXˆ‹‹‹Ú‚ùÓO?•û ázýôÓO«÷~ãÆNc‚‚‚ðóóãÏ?ÿdùòå¼öÚkê6ƒÁÀäÉ“Õúñ÷÷çwÞáÝwߥ¨¨ˆÓ§OÓ²eËë>Ç?þñ’““’û>}útu2¶™3g²zõjÎ;wÝ×êêêÊàÁƒÕ‡ááá¬X±‚{ï½³ÙÌÒ¥K™={6†ü«Õʆ عs'çÏŸ§  À©ezùòåNcÊ¡äAÆ›o¾©¾^§NxàEaÿþýœ>}šuëÖqáÂRRRPOOOŒF#éé餥¥ìtLNÇÞ½{ÕÞ#cÇŽUë\£Ñ°{÷nuLù„ ÔÏxi ÕjÕ¡f³???¢¢¢ˆŠŠºîº¼ÓHˆB!„ªAƒñꫯ¯Îïïïχ~ˆÃá 88Øi‚¯ò8p@íú矪“t•'..€ž={rìØ1ÜÜÜØ²e »wïÆd2áêêJdd$»víb÷îÝj ”Ltuµñ¬ÇŽSÉ/ ¥ÜÝÝéܹ3k×®%''‡½{÷:…hWWWÚµkçôžððpµÛnéZÉWsìØ1õA@é„P¥î¿ÿ~<== "--3gΔ;¡Û_±mÛ6ú÷ï¢(Fl6[™}’’’nʹ8 Ö÷µÞûRnnnÖwAAZß×{ŽcÇŽ©]Ò»víªh( ={ödæÌ™×q•%|||œÆÒ„††R½zu.^¼ˆ¢($%%Ê®]»èÓ§ÚÕ¹¼{Pô/åíí]îägÅÅÅôïߟµk×âp8Ê=ž©©©eBtµjÕœ†_„††’““€§§§Ó¤l!!!êg·ôϦM›¢Õj±ÛíìÚµ‹ûï¿///:uêDïÞ½yê©§ªüJ¢…¢ ‰ŽŽfìÄOx{ݪÊ.J•1iÑ‚«.ó"DUâââB§Nøí·ß¨Y³&Ë–-ãå—_fÆ @É/úýúõ»â1ŒF£rÂÃÃñ÷÷¯pßfÍšðøã3cÆ òòòX»v-{öìAQÂÂÂ9@5ÈÎÎ&--¤¤¤›¢SRRèÓ§ùùù(Š‚V«%44E!99YG{3ÜȽ/åp8Ê­ïÒm¥õ}½ç0™LØív´Z-uêÔ)³OíÚµoxRÈË*”tŸ¿xñ¢:áYff&={ötºµjÕR¯5!!üüürƒ°Ýn/÷¯½ö«V­Â`0 Óéðöö& ///Ξ=«v5/¯›úås|¸¸¸¨ã]þÿF£QÇ¡—ÎOàååÅš5kèÝ»7………äççSXXÈ’%KX»v-ï¾û.Û·o§F×R…w$ ÑBQ…Øív,ÿÿ5qsDõ~Uû‰º—ûøãY¿~=ééé,X°???, ¡¡¡´jÕJ]ò¨"¾¾¾ê/ã½{÷æÓO?½ê9~øal6Š¢°víZ¬V+...ôèÑCí²mµZ™8q"f³ooožx≫×ÇÇG-KyH¥¦¦RPP”ˆn5€œ8q‚öíÛ;mOIIQCvEK3ݨåË—@vv6O>ù$Ë–-Sëcûöí :Tma¼.½÷}ûöuš©¼²Î±råJt:‡ƒ„„„2Ûããã±Ùl×ýÀT£Ñ”yð%K©áëëË/¿ü‚¯¯/ÙÙÙtíÚ•+V¨c†÷îÝK¿~ýÈÏϯð<—¶œ—úþûïÕÛ¶m£iÓ¦ê¶ûî»O]þíV‰ŒŒ$!!;w²fÍ6lØ vQgذaüú믷´ •I&B!„Nš7o®¯Ó§O3nÜ8EA¯×_qB±R-Z´PCBé/ûåÙºu«Úúæââ¢. d·ÛquuÅËË‹üãÔ«WOOO, Øl6ŠŠŠèСÃUËòÀ¨áhÉ’%NÛ Ù¸q#F£NGddäUW‘Ò–ÌÒ°|yJ<Ìž=Ûi[LL ‹…ôôtt:ÝMïÊ””¤ÖñСC‚âŠ+0™LeÞsé ÑåÝ»Òí¥ãy/Õ¢E uMçE‹•[[¶l¹æ–üË]ï9|ðAõ\k×®uº&EQX¹rå •#77—U«œ{~]¸pÌÌL dìqHHIIIê9ì4éÖŠ+Ô‡8×êÒqÈaaaN:==óçÏßÐõ\«ŒŒ ŠŠŠpuu¥S§NÌœ9“ØØXNœ8‹‹ V«•;vÜÒ2T6 ÑB!„¢Œ%­³ñññêZÏÿøÇ?®úÞ¾}û’••…N§#55•Ž;rìØ1òóó9sæ Ë–-£eË–tìØÑ© k¯^½Ô¥‡L&f³Y ¶;vP»–V¯^]]>èJzöìIVVPX?ùäRRR8sæŒ*E¡V­ZÔ­[÷ºêèR¥-Èf³™””§m P[,úé'-ZDVVû÷ïgÈ!ê Ô­ZµºáóWäž{îQþÔ©SIII!==¯¾úŠY³f©ïR¥ëk4Ž9R&ì–v‰Öëõ:tH]n  _¿~dffª÷¾C‡?~ÜéÞ?òÈ#têÔé†Côõž#<<\-s~~>¯¿þ:‰‰‰$''3jÔ¨kÛ~¹Ò%Ú,X@NN±±±ôëכ͆»»;D£ÑpÏ=÷¨c„§OŸNRRÌ™3‡Ï?ÿœìììë:¯F£Q×OJJbÕªUpäÈ:tèPn·ð›iÕªU„„„ðþûïsäÈŒF#œ8qBý÷yùR]U„h!„BQÆ„ Ðjµœ9sEQ¨W¯ƒ º¦±£þþþÌš5 ´Z-;vìP»·lÙ’#FpäÈ‘2ë;GEEáêêªNJÖ¸qcuüæ“O>‰§§§:¦ôò *ȇ~HõêÕ±ÙlLœ8‘{ï½—G}”Í›7“˜˜ˆ^¯W—xºQ-Z´ víÚjh+KúÒK/E‹-hРv»—^z‰ÐÐPzôèAjj*ÇŽÃ`0°|ùò¿T†òtïÞœœ´Z-û÷ï§^½zÔ«W>ú›Í†§§g™÷´jÕJ]ûúÕW_ÅÍÍ FCXX-[¶$00«ÕJ§NÔ™š{ì1øúë¯î}Ë–-î}LLÌU×ö¾’9ÇܹsñððÀd2±xñb"""¸ï¾û˜;w.:î†æ¾ðòòBQFMÍš5‰ŒŒäÈ‘#(Š‚»»;}ô]ºtÁd2¡Õj9|ø0õë×§nݺL˜0¢¢¢ZjÀ€h4òóóy饗ð÷÷ç±ÇãäÉ“ˤ^&“‰Ï>ûŒ:B@@ƒ Âb±àééÉ+¯¼rËËP™$D !„Bˆ2iذ¡ÚZ˜™™©®O[žËÇÕöë×~øš5kª?Ùív ÈÏÏG£ÑЮ];§PþÀ¨×étôìÙSýþÒVk77·rg,®È›o¾É{g——‘››Kaa!þþþ¬]»–G}´Ìû*šl«´+í¥>þøcN¯§§§°xñb:tè€:F:33“ììlˆ‰‰¹æ1Ù¥cÇ+rií/^L@@¾¾¾8ŠŠŠÈËË£iÓ¦åçÉ'Ÿ¤uëÖxyy©ëwê$Uÿüç?©Y³&¾¾¾N]£óòòèß¿?‹/Vï½F£)sïÛ·o¯NVª¢µšË{ýzÏÉ÷ß··7Š¢PXXˆÃá@Qš4i‚Ýn¿îÉÕÜÜ܈ˆˆÀjµ¢( ùùù¸»»ÊŽ;¨^½:PÒkâÇ$00P½6› “ÉTá=(Uú@ér_~ù%;wF§Ó‘››‹F£ÁÕÕ???BCC’ Ø.uù÷—*ï3]‘ÐÐP<<bĺwïà´”ýÒÆK—cªW¯gÏžeûöí\¸pA ,¥áÜÍÍY³fñÞ{ï±mÛ6RSSñööæ‘G)3Kõ•Ô®]›O>ù([ßݺuS[î/½W]ºt!..Ž­[·‡¯¯/mÚ´¡FÌš5 (™Œª”V«eÆ :tˆ'NššŠÃáP†xyyqøðavíÚÅÙ³gÕ—.7Ö­[7Ο?Ͼ}û8zôèïýk¯½FçÎ’VæKEDD¨õݦM›2×{­çxê©§HLLdÆ ÄÇÇHçÎIOOW?ç-Z´¸úM¸ÄÂ… qqqa×®]X,"""èØ±c™ÏTÇŽ‰‹‹cË–-ÄÅÅáííMëÖ­ ãË/¿pZ^íŸÿü§ú/ ã—ÒëõlذcÇŽ±ÿ~òòò¨[·.?þ8ÑÑÑ>|(ù¼@ÉC±ñãÇаaC§cyxx¨u\ÚÛàR'NÄn·«åèÒ¥ F£‘ØØXbbbÔñüaaa´mÛ??¿ëªÃ;‘F¹Ò£›à…aÃзxˆ¨a/þ¥ãØ,†úc­àiÌõ˜6mɱLù÷ˆ¿|¬ºº³{ÏêT!®Ç/¿üÂôéÓÙµk×M9ÞöíÛñ¯÷™°}ÓM9ž€ûÐñ€¢…BqÓ)Š‚¿¿?¡¡¡hµZrrr(((@§ÓáîîΨQ£øè£xûí·+»¨Bq]† ¦Žu/]ÚLÜ]$D !„â–(..æÂ… ¸¸¸ ( ‡­V‹ÙlÆl63~üxªU«ÆÐ¡C+»¨BqͺvíJ×®]+»¢IˆB!ns)))¬X±‚cÇŽQPP@HH<òO<ñD™ÙgcbbX±b…^#""èß¿™Ö’iÓ¦qàÀ>ûì3¶oßNtt4ùùù4lØÁƒS³fMöíÛÇôéÓhݺ5£F*SÆß~û %“îôïߟ^xFѵkWÂÂÂðððàÂ… ¼ûî»9r„?ÿü“>úHB´Bˆ;Š„h!„â6¥( Ÿ~ú)“&M" €¬¬, pwwgþüùPPP€F£¡¸¸˜×_åË—ãááAzz:‡ooo>øà¦L™Â믿®{ݺulÛ¶ ƒÁÀ¾}û°X,˜L&l6þþþL›6Õ«WÓ¦M"""X³f f³™U«VñÊ+¯`0œÊ:cÆ Ž=Jff&Æ C£Ñ0oÞ¼2×T¯^=FŽÉË/¿ \yÝR!„âv$!Z!„¸M}úé§|ùå—äååa2™Ðh4xyy‘ŸŸÃáÀl6«ûŽ?ž7’••Enn....hµZ¬V+Œ3†   úõëWæ<‰‰‰hµZt:Š¢‘‘@ß¾}¹xñ"^^^ôíÛ—õëד™™É÷ßÏ‹/þßÒ•ñññ:t£Ñˆ——QQQNÇß¾};6› ‡ÃÁÅ‹ùòË/ÕõfÃÃÃoEÕ !„·Œ,q%„B܆ÒÒÒ˜øàƒr¯'55•‹/rþüy233=z47±ÖÄÍpâÄ ÆǸqãØ²eKeG!n;¢…¢ ±ÛíXdÝÊ›*ª÷Óètº¿ý¼Ç§  (™¨ëJN:¥îûÔSO9mÓjµtêÔ ___l6tÚ®×ëyä‘Gœ^«U«ƒ¢¢"’““Ðh4 2„ÚµkS\\¬¶FïÞ½›üü|òòò¨]»v¹Ý³ç͛ǒ%KX°`#GŽÄÏÏ___f̘Á˜1c®£VÄßaÇŽL:• °{÷îÊ.ŽBÜv$D !„·¡ÂÂB, 4¸ê¾V«€ºuë–Ù^­Z5<==ÔVàRŠ¢¨ÛJiµZ4 ‡Ã©û÷СCÕ‰ÀæÏŸÀwß}‡¯¯/¯¼òJ¹åëÙ³'}ûöeðàÁ|öÙgìß¿EQ°ÙlÌœ9EQ®x}¢rT«V­²‹ „·%™XL!„¸ ªÝ·cbbÊ´0_* @Ý÷äÉ“e¶_¼x‘ÂÿßC¡tìò§qãÆ9r„œœvïÞͲeËÈËËC§Ó1bĈk:Nýúõ Ä`0žžNll,7¾ár‰›çÇdåÊ•ê÷7n$??_ý~ĈêÒgPÒõ{ûöí¤§§ãííMóæÍyì±ÇÐjÿ¯&11‘/¿ü€‡~˜¨¨(V¯^͹sçðõõ¥sçÎvëß³gÇŽ#55jÕªEûöí©^½z™}ãããÙ¸q#IIIxyyÑ´iSÚ·o_¦'ÉôéÓÉÌÌD¯×óᇲuëVbbbÈÈÈ mÛ¶<ñÄ7VyBˆ»†„h!„¨"Ìf3.\À”͆¯fñ@çN„4¸·²‹%nPdd$‹/`áÂ…L˜0¡LHMM¥F4oÞ\Ý÷»ï¾ã½÷ÞS÷1¬_¿£ÑˆN§£]»v©\/¼ðŸ|ò .\ _¿~‘““ã>Ї‡‡ºß¾}ûðòò*7>}šììlL&P2[ܦNÊáLj`çÎxyyÑ¿jÖ¬IZZ½zõ"&&EQ(**Â`0àææF@@+V¬ I“&Àÿu cåÊ•<÷Üsj/‡€€>þøc†ΤI“Ôrœ?ž'žx‚„„EÁjµb00 ˜Ífþõ¯1vìXŠ‹‹=z4 .ÄÝݣшÝnG¯×ãííÍš5kxøá‡Õcùå—ÄÇÇ£ÕjY±b©©©˜ÍfÌf3 ¢…W%!Z!îEEE$$$pþüy.\¸PæO£ÑHPPi™ìüa)! î½bˆÞ³l9™+ÜÞú™¾T ­%ï¯$]»vE£Ñ ÕjILL¤}ûö¼ù曄‡‡“œœÌÏ?ÿÌ÷ßÅb¡{÷î >(iräΞ=‹àà`dffB¡PY©T"$$aaaP*•ðññ¹æ,‰R©Ä;o¿Ý¥,O¯\ySÇÒ×·¿&Nœˆ~øK–,Ajj*JJJÐÜÜ,\Ö=yòdH$À‚ `ccƒ'Ÿ|UUU())AKK ¤R)üüü°{÷î/­n]¼ì÷jkk;]ðkÉ’%Ø·oŸðþìÙ³…­BCCñür¹MMM¨­­ESS“p¯ìˆ#°uëV„††ÞØÉ!Q˜Ífìܹ---¨¬¬„T*Å믿.¼ß¯_?´´´ ´´ß|óM›=xð`( ÄÆÆ ³¿qqqP(ÈÊÊîÛ¯««®Â ܓݿL˜0&Löùüîîî(..ÆÌ™3ñÄO¸¼ß–-[pÇw@"‘ %% mW'•Jƒ9s.?ÐÕÕõVœ2"²@,ÑDDݨµ$ °°°Ma¾pᬭ­Û”d///dgg#66íVI&ºãŽ;˜˜ˆ¼¼<œ9s pssèQ£Ú܃ ³fÍBaa!RRR••+++Œ1¢Ã»_ýuáñU¿_¤éî»ïÆ—_~ 9rd»m§NŠÍ›7 %úÞ{ïm7fÊ”)8q⪫«qîÜ9”””Àd2ÁÕÕ#GŽ.Ó¥Þ%++KX±½¹¹Û¶mëtlqqq›ßûúúÂ××W(ÐÀåK¨år9ŒF£pe…««+ÜÜÜ›› ½^)S¦@*•âøæÏŸððpØÚÚRRR„ã—.]Úæó¼¼¼€ôôt”••áÔ©Sm ¸T*åýÏDtCX¢‰ˆ®C}}= :¼Ü:== m.·V*•ÂLr@@ Ðf»wïFjj*BBBD:"ê-¼¼¼ºt?³D"ÁèÑ£1zô諎›4iR§ïyzz",,¬Ó÷¥R).\xÍ,ÀåŨ~ÿjê½Z +pyÖ900°Ó±ÞÞÞm~ommÝá"r‰&“ ÍÍÍÂk:÷ß?Š‹‹a4a6›±wï^;v 6lÀÁƒ1zôhFájŠŽ²¸¹¹¡´´eee—F­Ìf³ðx6"¢ëÁMDt…††äççwx?raa! :-ÉC† á*ÃDdÑ®,ýû÷ÇÉ“'oÉç´Î ÿúë¯Ø»w/<ˆóçÏ£²²uuuxôÑGqæÌØÛÛC¡P¸üx·ßß²PXXˆÊÊJhóh.ínA "ê*–h"êSššš››ÛáåÖ­eù÷%yöìÙÂkþþþüÁ‹ˆ,Zk).¯Š}%???á^åææf>|Ó¦Mk·òòrdggcìØ±×ýù•••Éd°³³Ãøñã1~üx¼ñÆ(//ÇСCqéÒ%èõzTUUaôèÑÈÏÏ|ñÅxðÁ…ýäää -- ƒR©”WüQ·a‰&"‹s½+\_¹xו? õEÇpy¯sçΡ®®N¸Y*•âÑGÅ_|£Ñˆ‡zï¿ÿ>î»ï>˜Íf¤¥¥açÎøôÓO±~ýú*ÑIIIÂ"a=ö† ;;;\¸p Â8+++<òÈ#øì³ÏÄ'Ÿ|‚…  +…»¸¸ ¢¢wÜqG›{±‰ˆnK4õ:•ä‚‚‚nYᚈ¨/3f ¬¬¬™™‰ºº:888 ©© púôilÚ´ ÈÏÏGEEÖ¬YƒêêjH$( TWW ¥ûFÕ××#66;vì@}}=¡P(PWWGGGÌœ9ýúõÃèÑ£Ž ;;Ï=÷^xáØÙÙA"‘ ¤¤r¹ÿüç?»ãÔ`‰&¢èzW¸1bT*”J%W¸&"ºIýúõÃßþö7¼üò˨¨¨ të³™íìì’’‚E‹áСC¨©©ASS¬¬¬`2™ —Ë1hÐ Œ7®Í~³³³;|Ì€6Ssvv†““ª««a2™ÐØØ™L™L†~ýúaöìÙøä“O„ñï¿ÿ>ìììðñÇC.—£ªª °²²‚»»;8ÿî>MDÔ‡±DÑm×Ý+\Q÷Z¿~={ì1œ8q¹¹¹ÂeÔ­‹s988`ß¾}(,,ıcÇŸŸkkkxxxàŽ;îÀСC…}M::\5þÃ?DYY™p•ÐÈ‘#QZZŠììlüç?ÿAaa!ZZZàííñãÇ·[ L&“!::/¼ð>Œ‚‚ôë×cÇŽÅÝwßÝî_|°¶¶î¾FD} K4u;®pMDÔûyzz¶Y¨«#îîîx衇®:ÆÍÍ ‘‘‘¾ÿä“Ovøzës¥»ÊÕÕ>úè5Ç-_¾¼Ëû$"êK4]7®pݳ%$$ ®®®Ó÷g̘Ñfõ]nõí f̘Ñéx"""ê[X¢‰¨C\áº÷Úù¥¥¥å¾?~Ì È:u¾ýö”–Up{ 8s.EŽ'""¢¾…%š¨ºÚ ×YYY°±±á ×½Ô§þ07]uŒ¹¥ö*Ûÿ嚟ÑW¶/(,Ÿ{—\sDDDÔwð§`" Å®‰ˆˆˆˆºK4Q/Å®©#iii(ÎIÄ„»ƒÅŽbd2¹ ;õ ,ÑD=W¸¦qìØ1üøý–ènâ:؉'¿;õ ,ÑD"á ×DDDDD½K4Ñ-Ä®‰ˆˆˆˆ, K4ÑMà ×DDDDD} ‚'º ®pMDDDDDWb‰¦>ífV¸6lìííÅ>"""""ºX¢É¢q…k"""""êN,ÑÔ«q…k¢¶`nÌ;†ÅhiiAEY¹»ˆ…ˆˆˆz–hêñnf…k___Èd2±è¶™2e &Þ阛ĎbŠŠË1îÞÙ(((; õ,Ñ$ºŽJrëÌòùóç¹Â5õltËq…k"""""²,ÑtÓ¸Â5õ,ÑtM\ᚈˆˆˆˆè2–hºî®ÝÝÝ…Ë­¹Â5õ%,Ñ}W¸&"""""ºy,Ñ‚+\¤¥¥¡8'î;ŠEÉdä2PìDDDÔƒ°9õ\ᚈºâرcøñû,ÑÝÄu°3O~/v """êAX¢{®pMDDDDDÔó±Dß&ÈËËã ×DDDDDD½Kt7á ×DDDDDD–%ú:.U!3+úÌ|è³ò™•Ò² Lž<%%%\ᚈˆˆˆˆÈ±D_¡£’\PXŠÂ¢2¤^È„þ~žPú{Béç…±c‚°gÿQìØ±ãÆã ×DDDDDD®Oµ¾Ö®ÏŸ?‚Ü‹øË+@Ÿ•}f>ÒÒ³aeeÕ¦$*1íÞqPú{bx€ú÷³m·Ï¿½ù9EDDDDDÔGXTóëê ×2™ ¶68:ÀÂyÓ¡ô÷ÄÐ!>°ÀÇ@Qïsc¾Ø1,FKK *Ê*0ÈÝEì(DDDÔCôºÝQA¾Þ®ß|óM”œÃúç—Š{0DDÝlÊ”)˜x§#`n;ŠE(*.Ǹ{g£  Hì(DDDÔCôøômâ_}%™ÙhlhÀÌ™3áïï???øûûcìØ±Â4Hì¸DDDDDDdÁz|‰ö„Eoiàäᎂî@jjªØ‘ˆˆˆˆˆˆ¨êñ%z ·z{¡©¾^ì(DDDDDDÔÇIÅ@DDDDDDÔ[°DuK4Q±DY´´4üüK¢Ø1,†L&à —bÇ ""¢„%šˆÈ‚;v ŸoÝ-v ‹á:؉'¿;õ ,ÑDDDDDDD]ÄMDDDDDDÔE,ÑDDDDDDD]ÄMDDDDDDÔEVb "¢î¿ûŽ|ÿ+~ü~7ÜÝw:nò½ PPXÜéûÜþ¿ÛKŽ!""¢¾‡%šˆÈ‚<ôÐC˜6mÀÍÛR™¬Ó±q_ïEsss§ïsû«oODDD}K4‘±³³ƒ]—ÆzyyÝÔgõõ퉈ˆ¨oâ=ÑDDDDDDD]ÄMDDDDDDÔE,ÑDDDDDDD]ÄMDDDDDDÔE,ÑDDDDDDD]ÄMDDDDDDÔE,ÑDDDDDDD]ÄMDDDDDDÔE,Ñ7©¡¡ï½÷òòòÄŽBDDDDDD·KôM’Éd(//ǘ1c0{ölìÙ³ÍÍÍbÇ""""""¢[€%ú&YYYáþ矟%K–à£>‚¢¢¢žž.v<""""""êF,ÑÝÄÆÆaaaHHHÀÑ£G“&MBhh(´Z-jkkÅ HDDDDDD7%ú€F£Ann.^yåèt:øøø ""IIIbÇ#"""""¢d%vK&—Ë1gÎÌ™3ùùùؾ};æÎ ¨Õj<ú裰³³;&‰ì·ß~ƒ———Ø1ˆ¨‡1™LbG "¢°Dß&žžžˆŒŒÄºuëpäÈhµZlذ .Ä¢E‹0yòd±#‘¦NŠŸþYìDÔCI¥¼hˆ¨§a‰¾Í¤R)T*T* ‹¥K—ÂÆÆ‹/ÆSO=…Š“ˆnŒ;VìDDDDÔEüzSDîîŒÄÅ‹½^aÆ!<<:f³YìˆDDDDDDt–è@*•bòäÉB‘V©TøóŸÿŒ   DGG£¤¤DìˆDDDDDD–èÇÑÑjµIIIøòË/¡×ë„ððpìß¿Ÿ‹Œ‰ˆ%º ALL 233¡R©°qãFøùù!** ÙÙÙbÇ#"""""êsX¢{{{{¨Õjœ|0qâDLŸ>±±±¨««9!‘åa‰¶Ðh4ÈÎΆZ­Æ¶mÛàåå…ˆˆ¤¤¤ˆˆˆˆˆˆÈb°D[av:11J¥³gÏFhh(´Z-jjjÄŽHDDDDDÔ«±D[(oooDFFB¯×C£Ñ@§ÓÁ××8}ú´Øñˆˆˆˆˆˆz%–h '“É R©‡ääd(•J<øàƒ ŦM›`0ÄŽHDDDDDÔk°D÷!ˆŒŒDzz:4 ~üñGøùù!<<:NìxDDDDDD=Kt$•J…Ù鬬,¨T*<ÿüó Btt4ÊÊÊÄŽHDDDDDÔ#±D÷qNNNP«ÕHIIÁöíÛ¡×ë ÌN›Íf±#õ,Ñ$ ALL 233¡R©°nÝ: >7nDnn®ØñˆˆˆˆˆˆDÇMí888@­VãôéÓØ¹s' 1jÔ(LŸ>ñññhnn;"‘(X¢éªZg§ ¡V«¡Õjáç燨¨(dffŠˆˆˆˆˆè¶b‰¦.±µµEXX?~¼0;ÝÔÔ$rB"""""¢[%š®[PP4 rrr„Ùi___¬Y³gÏž;Ñ-ÃM7ÌÆÆF˜>zô(lmm1uêT„††B«Õ¢¶¶VìˆDDDDDDÝŠ%šºE@@4  Ñh Óéàãトˆ$&&Šˆˆˆˆˆ¨[°DS·’ÉdP©Tˆ‹‹CRR”J%æÏŸ/ÌNWWW‹‘ˆˆˆˆˆè†±DÓ-ãéé‰ÈÈHddd³Ó¾¾¾X¼x1t:Øñˆˆˆˆˆˆ®K4ÝrR©T˜>{ö,‚ƒƒ±bÅ #::åååbG$"""""ê–hº­ÜÜ܉ôôtÄÆÆB¯×cذa‡N§ƒÙl;"Q§X¢I4!!!ˆ‰‰^¯‡J¥ÂÚµkˆèèh”””ˆˆˆˆˆˆ¨–h££#Ôj5±cÇèõzaΜ9ˆ‡Éd;"–hêaZg§3331gÎlÚ´ ~~~ˆŠŠBvv¶Øñˆˆˆˆˆ¨c‰¦ÉÞÞjµÇÇÁƒwÝu¦OŸŽøøx455‰œˆˆˆˆˆú"–hêñ‚ƒƒ¡Ñh““µZ ­V+ÌNgddˆˆˆˆˆˆú–hê5 €#GŽ&Mš„É“'C«Õ¢®®Nä„DDDDDdéX¢©W>|¸0;½fÍÄÇÇÃËË HNN;Y(–hêÕär¹0;””¥R‰9sæ 44Z­555bG$""""" ÂMÃËË ‘‘‘ÈÌÌ„F£N§ƒ"""pêÔ)±ã‘`‰&‹#•J¡R©‡””(•J„……!88ÑÑѨ¨¨;"õR,ÑdÑ<<<‰´´4lÚ´ 'Ož„¿¿?ÂÃáÓé`6›ÅŽHDDDDD½K4õ WÎNgeeA¥Rá…^Àˆ#ÒÒR±#Q/ÀM}Ž““Ôj5’““±}ûvèõz >œ³ÓDDDDDtM,ÑÔ§…„„ &&™™™P©TX¿~=|}}…ÜÜ\±ãQÃMÀÁÁjµ§NÂîÝ»a00jÔ(LŸ>ñññhnn;"õVb êiZg§7mÚ„ýû÷C«Õâ¹çžÃ¢E‹±#’…zï½÷ðòË/‹ƒˆz¨#Fà—_~;QŸÇMÔ …B°°0„……áüùóغu+ÆÑ£GC­VcÞ¼y°¶¶;&YÆÆF̘1o¾ù¦ØQˆ¨‡9qâÞxã ±cX¢‰º$((¯¾ú*öíÛ­V‹gŸ}áááX¾|9FŽ)vD² À!CÄŽAD=Lvv¶Øˆˆè¿xO4Ñu°±±AXXpìØ1ØÚÚB¥R!44Z­µµµbG$""""¢[ˆ%šè 6 ùùùÐh4ÐétðññADDÅŽGDDDDD·K4ÑM’ÉdP©Tˆ‹‹CRR”J%æÏŸ/ÌNWWW‹‘ˆˆˆˆˆº K4Q7òôôDdd$222„Ùi___,^¼:NìxDDDDDt“X¢‰n©T*ÌNŸ={ÁÁÁX¹r%FŒèèh”••‰‘ˆˆˆˆˆnK4Ñ-æææ†ÈÈH¤¥¥aÛ¶mÐëõ@xx8t:Ìf³Ø‰ˆˆˆˆ¨‹X¢‰n£ÄÄÄ@¯×C¥RaíÚµ Dtt4JJJÄŽGDDDDD×ÀM$GGG¨Õj$&&bÇŽÐëõ œ9s“É$vD"""""êK4‘ÈZg§3331gÎlÚ´ ¾¾¾ˆŠŠBVV–Øñˆˆˆˆˆè ,ÑD=„½½=Ôj5Ž?ŽC‡î¾ûnLŸ>ñññhjj9!±Dõ@#FŒ€F£ANNÔj5´Z­0;‘‘!v<""""¢>‹%š¨S( CBB¾ûî;À¤I“0yòdhµZÔÕÕ‰œˆˆˆˆ¨oa‰&ê%†.ÌN¯Y³û÷·7"""œœ,v<""""¢>%š¨—‘Ëå Ãþýû‘˜˜¥R‰x¡¡¡Ðjµ¨®®;"‘Ų;Ý8///DFFbݺu8rä´Z-6lØ€… B­V#$$DìˆÔÃ$$$\õÊ…3f`Ô¨QÜþ:¶_¼x1 Ôé6DDDdYX¢‰,€T*…J¥‚J¥Baa!bcc…BÅ‹cùòåpvv;&õ‰•8^ÛéûÍ5—ކNßÿ¹² ¸½ðûcÛv@¥R±Dõ!,ÑDÆÝݽÍìtll,† •JµZiÓ¦A"‘ˆ“D2uáƒð[8ïªcš¯òÞ] à®… ¸ýӹ꾈ˆˆÈòðžh" Õ:;‹ŒŒ ¨T*¼ð  Btt4JKKÅŽHDDDDÔë°DõNNNP«ÕHNNÆ—_~ ½^áÇ#<<:f³YìˆtFl~KìeØc`gg'v """ºX¢‰ú˜ÄÄÄ ++ *• ‘‘‘ðññATTrrrÄŽG·ÑhÄÎMˆâ¼´e3† "v """ºX¢‰ú({{{¨Õjœ};wî„^¯ÇðáÃ1}útÄÇÇ£¹¹YìˆDDDDD×ÄMD·]ëìtnn.-Z­V ???DEE!++KìxDDDDDb‰&"Ñ 0‹/FBB:¸ûî»…Ù馦&‘µÅMD=ˆ# Ñh›› µZ ­V ___DEEñBÝÄh4bkô[bǰ(Ãî;;;±cÑmÄMD=Š Â€£G&Mš„ÐÐPhµZÔÖÖŠ°3عé±cX”—¶lÆ!CÄŽADDD·K4õXÂìô+¯¼NDDD ))IìxDDDDÔ±DQ'—Ë1gÎÄÅÅ!)) J¥sçÎf§«««ÅŽHDDDD}K4õ*žžžˆŒŒ„^¯‡F£N§ƒ¯¯/"""püøq±ã‘…c‰&¢^I*•B¥R!..gΜR©ÄÒ¥KŒèèh”——‹‘ˆˆˆˆ,K4õzîîŒÄÅ‹½^aÆ!<<:f³YìˆDDDDd!X¢‰ÈbH¥RLžñññhnn9!QïSUU…¤¤$Fäå塾¾f³‰å!D\ IDATåå0X¹r%¾ùæ±£u ^ÎMD}Rpp04 6n܈ýû÷C«Õâ¹çžÃ¢E‹ V«¡T*ÅŽH}P}}=öîÝ‹ü8p 1oÞ<¸»»·[\\ŒüãHNNFcc#¼½½1oÞ<Üu×]mÆ%$$àÓO?,_¾ýúõÞ={PTTwww„…… ÛÔ××ã‰'ž€ÉdBÿþý±yófH¥m¿o/,,Äš5kþþþX¹r%ªªªàëë‹ 6@¥RÁÇÇXºt)Μ9ƒšš¬[·3gμU§Žˆˆè¶a‰&¢>M¡P ,, aaaHMMÅ–-[0qâDŒ5 ‹-BXXlmmÅŽI}Àwß}‡‡~R©µµµ¨©©­­-°víZ|óÍ7øÃþضmž~úiôë×—.]‚Éd‚³³3>þøcÌœ9›7o† àûï¿G||<<<<ð믿¢¢¢ÍÍÍhnnÆàÁƒ±eË¼ð ˆŠŠ‚B¡@VVNœ8`ñâÅøãÿØ&çöíÛñïÿ555X¿~=œœœpüøqLš4©Í¸ÀÀ@ìܹcÇŽèõúÛp‰ˆˆn=^ÎMDô_Ðh4ÈÎΆZ­Æ¶mÛàåå…ˆˆ¤¤¤ˆ,ØþóÌ;¥¥¥(--E]]úõë‡ÆÆF”––¢¹¹555.Ï,?ýôÓ00 0›ÍËå¸té ¾ýö[<ýôÓí>C"‘ 77W(ÐPPP€òòr¼óÎ;HLL<ûì³èß¿?jkk…ì+ÅÄÄ ººr¹jµí t«ÆÆFa&[¡Pt˹"""K4ÑïØØØ ,, HLL„R©ÄìÙ³ ­V+”¢î¢V«QSSkkkÌš5 ÅÅŨªªBCC~ýõWÌ;W˜Yn-ÐýúõCDDjjjPSSƒ@.—£¬¬ qqq8þ|›ÏÈÏχÙlFLL êëëÑÐЀiÓ¦¡¥¥NNNˆÌŸ?f³&“ {öìAuuµ°“'O¢´´0lذ«ÞöÐÒÒ‚µk×¢_¿~€iÓ¦uë9#"" K4ÑUx{{#22z½:¾¾¾ˆˆˆÀéÓ§ÅŽG ''/^DKK ìììðõ×_ÃÉÉIxÿŽ;î@\\¦M›†¬¬,äåålmmñöÛoÃÊêòY*• ááá.?3}Ïž=m>ÇÑÑ?ü0-Z©T ‰D‚¿ÿýïJ¥(..FFF€Ë3ÆóçχD"\.ÇîÝ»…}|þùçhjj‚ ž{×_ÿúWœ9syyyP(øøãoþdõ,ÑDD] “É R©‡ääd(•J<øàƒ ŦM›`0ÄŽxMF£[£ß;†EvçØÙÙÝÔ>Μ9#á‰'ÂÚÚºÓ±.\¸êØ @¡P ²²ÉÉÉmÞsqqAHHH›×<==µµµ(,,^_µjlmmQYY)”ߦ¦&|ùå—¨««ƒD" {G^yålÞ¼YYY°²²Âž={0hРk ""¢^%šˆè:yxx 22éééÐh4øñÇáçç‡ððpèt:±ãuÊh4bç¦ÄŽaQ^Ú²C† ¹©}ÔÖÖÂd2¼¼¼º<ö÷«u€³³³P¬+++Û¼'“Éпÿ6¯I¥RáÒí––áõ‰'ÂÑÑ””„ÜÜ\|óÍ7mf½ ÐaÆÈÈH|öÙg(**‚••¾þúkÜwß}W=.""¢Þ„%šˆèI¥Rav:++ *• Ï?ÿ<‚‚‚²²2±#R/àââ‰DàòLóÕ8;; c;Zíºuá0puu½©\jµr¹‰±±±Ðjµ0 °µµíðRn³ÙŒgžyÛ·oGAA¬­­±wï^Ì;÷¦rõ4,ÑDDÝÀÉÉ jµ)))ؾ};ôz=„Ùi³Ù,vDê¡BCCÑØØøå—_››ÛnL}}= ÆŒÓflIII›qZ­õõõ°³³Ãĉo*ײeË ‘HPSSƒ>øß}÷ZZZ`ccÓî±W&“ O=õöìÙƒ‚‚Èår/šˆˆz=–h"¢Û uvú½÷Þÿþõ/hµZ<ÿüóxüñÇÿ[žA"‘àRi)ïç„W>þ Ÿz²Ó±¯­~ñŸ~ÖéûÜþòöÐ=EÚÑÑçÎÃã?Žo¿ýùùù0™L—,Æ ÃСC\^|,11óæÍÃ… ›› ³Ù kkk8::âã?ÆÃ?Üî3 :ýüÎn7˜?>–/_.,fæããƒáÇ·×ú,i³ÙŒ¢¢¢÷Õ_:‰Ib¾Å7ê-S«a:*uç?¬tES}=žptEC}ýMgzóÍ7QZpšÿyö¦÷å4?ýü ¼½½oz_DÔ·œ?[·nÅ_|Ñ£GÃÕÕR©±±±bG#Fœ>&“IìˆDDDD½K4‘ºrvzæÌ™Ðh46lþö·¿qeo"""¢›`%v""ºu°råJ¬\¹§N£<mÌ'H$Žßùå§?.´Óý=úørü|â·NßïsÛK$HM½…BÑé6DDDdYX¢‰ˆúˆ±cÇâ»ocQ[Óù*ÞnƒÐRŸÝéûoÿï*ÔÕ×sûÿº---Ž'"""ËÃMDÔ‡¸vÙdsÛ;ßäç[ÖöÍè‘åâ=ÑDDDDDDD]ÄMDÔG?~3ç=%v ‹ûùû°±¹ñ™}"""ê}x97Qa2™PWW'v ‹²`þLHe2±cÑmÄ™h""""""¢.b‰&""""""ê"–h""""""¢.b‰&""""²`ÍÍÍpvv†³³3f̘!vœ½ûî»0` €½{÷Þð~þýï ÇúÆotcB¢ÿ%šˆˆˆˆúœææf$$$`ÅŠ˜0aÜÝÝ€ûï¿ï¾û.jkkÅŽØ­ är9ŒF£ØQ:TRR‚êêjØÙÙ¡©©é†÷sñâE xyy¡¾¾¾KÛüå/Š÷‰'nø³©ïàêÜDDDDÔçŒ7F£ýû÷G^^ *++!“ɰcÇÄÄÄ !!ÞÞÞbGí6‰Dì×d0ºe?²ëxrBaa! ˆææænù|²l,ÑDD}Ä”)SðÍžÍnü~jkɲ5ØüÅÈår±£Ñu*((@QQ$ ¬­­áììŒúúz¤¦¦FŒ%K–àÈ‘#"'í–.]ŠÂÞÞS¦L%Coø’z^ÎMDÔGH¥RØÚ*ÄŽaQví>ÀY êóòóó…±cÇbðàÁðòòÂäÉ“ñÆo ''§ÍØÓ§OcÉ’%2dœµZ .´———'\^ûè£bË–-˜4i\]]áçç‡eË–!;;[¿hÑ"aü¡C‡Úe4™L „³³3ÜÜÜpéÒ%( Œ7ßÿ=PRR‚ªª*lÙ²R©çÎéS§››Û¥ó`6›±}ûvL™2®®®ð÷÷Ç¢E‹+d[¿~½0^¥R ¯;v aaaðõõ…³³3V¯^ºº:ìÝ»O=õî¼óN¸¹¹ÁÝÝ÷Üs>üðC466v˜ã‡~À<xzzbΜ9øî»ïºt pêÔ)!×3Ï<Óæø„÷~ûí7á½ýû÷wx²ÙlÆ®]»ðÀÀÇÇÎÎÎ5jÖ¬YÓîÏÆ7ß|ƒW_}þóŸÛ]R““µZ ¥R WWWŒ7ÿûß1wî\ás+++ÛKCCÞxã ÜyçpqqAPPÖ¯_ßfìÈ‘#±cÇá÷3gÎöéïïßåóF} K4Ýo¿ý£GÆž={ ×ëQQQÊÊJ"..o½õ–0vË–-˜:u*~øáÀh4¢¶¶ÙÙÙ˜2e öìÙ#Œmii\.‡Á`ÀW_}FƒÁ€êêjâСC A~~> 88X¸vË–-ír>|ÙÙÙ¨ªªÂ]wÝGGG$%%áĉíf=—,Y€ ºt.V¬X 6硼¼'OžÄªU«„ûëêê„ñÅÅÅÂ%äaaa8sæ ***`0••…]»vaùòåøî»ï••…òòr\ºt ÅÅÅøüóÏ1cÆ 444´É°yófÌ™3ÿùÏPZZŠêêjäääà‰'žèÒ1€R©„Á`€››8 ¼~úôi¤§§Ã`0`ìØ±ÐétÂ{ï¼ó ìíí1~üx@cc#.\ˆ—^z ™™™0 ¨ªªBNN>Œ±cÇâøñãÂ>:»':99ãÆCNNêëëQQQóçÏãÕW_ÅþýûÑÜÜŒÊÊJ˜ÍævÇòöÛoã½÷ÞÃ… PUU“É„äädL›6M8wyyyÂeee00 0 ())üòË/¢gwÝuW—Ï%Y.–h""¢›”7ß|_|ñöïߟ~úIX܆ÈRedd ,, ƒiii0™L ‚‡‡ŠŠŠ””$ŒMJJÂ3Ï<ƒK—.!771bÊËËqèÐ!xzzB­V#++KØæÊKkÓÒÒ——oooÈd2¢¢¢«V­¼ð ÉdHMMÅ7ß|ƒK—.µÉúÎ;ï ¾¾NNNX¾|9ÀÞÞ¾Ã㪩©¶7ðó󻿹ˆ‹‹Ã×_¼¼<ÃßßJ¥éééBA»Ú¥ÂeeeÈÈÈ€³³3œœœ`euùŽËÒÒRäååÁÁÁ£G†§§'ÒÓÓqúôi”——ãí·ßöqñâE¬^½•••(//‡»»;”J%RSS¯ëß"GGG8;;ãâÅ‹hllDFF€Ë½µ¨^ºt ‡¶9uê”p&LDFFB¯×ãÂ… 8wî\]]1zôhXYYáܹs¨®®Æ‚ Ú-à&•þÿzÒÜÜŒGyøöÛoQVV†àà` <åååÐay€ÊÊJ˜L&á 777¤¥¥áСCP(ؼy3`Æ 6l`À€˜5k–-[†eË–aãÆ._É`ccƒêêjäååuù\’åâ=ÑDDD7Él6£´´çÏŸGYYÊÊÊP^^ŽââbÔÖÖÂÅÅ...8p  „Aƒ ¯µ¾îêêŠÂÅŶ¶¶bÑ5EFF¢¦¦666P©TسgO›Åœ8 ¬ŽÜ:ÖÞÞ . LSS|||˜˜ˆ{ï½ï¿ÿ>Þyç6Ÿc6›1oÞ<ìÚµ ‰9999r$ŒF£Päär9î¾ûnüüóÏð÷÷Ç®]»ðä“OªªªpôèQ—KÙŸþô§«—Z­F¿~ýP]]Ñ£GÃÕÕõšçbãÆ¨¨¨@ÿþýñþûïcÙ²e.Ï®úøø´›1¾RKK |}}qñâEa}…Öûµ·lÙ‚Ç\8¯UUUÈÊÊBHH.^¼ˆ­[·â/ù ** uuupqqÁC=„?üÀå2y½‹£…††âСC ÄáÇ1dÈ$$$@*•¢¥¥éééhiiA]]***`4áêêŠQ£FA¡P   [·nEUU €´´4 ÿüó6 zxxÀÃö¶¶xê©§ðóÏ?#''VVVJ¥°¶¶F]]ôz=ššš`mm-Ü÷\[[‹—_~YØ—ƒƒ^|ñEDEE]óXZ=ôÐC8t謭­qøða<ùä“ÈÌÌ„§§'ÊÊÊPYY‰;ï¼'NœÀO?ý³ÙŒAƒaêÔ©€C‡aРAÂ%Ü}áêêŠââb?~¼Ó}äÈἨÕj¡@ÀêÕ«ñꫯ¢ºººÃmˆ©S§ ^ýu¼ùæ›ÈÌ̼®EÄ|||ðàƒ¢¬¬ !!!]ÞŽ,K4Ñ-ÖZz»ª®®®]án-áz½¾Ýk¥¥¥°²²ê´pwôš»»;W¢¥ÖØØ(\†kgg×f–ñ÷š››…Y¼þýû·;kÖ,H$äç磪ªªÝöÎÎÎÂåÍ­œœœàââ‚êêjTWWÃÞÞ3g΄ÒÓÓqéÒ%ddd`È!Ø´iakk{Õ{ƒ_zé%|þùç(,,„••víÚ¥RyÍs‘ŸŸ/Ì„Ž=ºÝß«?ýéOW-ÑR©cÆŒi÷úwß}‡… bРAÈÌÌìp!1F8;; çÎÖÖ¶]i ¿®ýØcá©§žBFF.]º„#GŽÀd2ÁÁÁóçÏÇûï¿ÁƒãðáÃÂBnUUU˜6m@¯×wZn[€pßqGrssQVVxàÚûСC‘˜˜Øá¶®®®:th›×¬­­!“É`4QQQqÕ|WòòòBlll—Ç“åc‰&""êalmmakk+,nÔuuumŠõ•¿Nž<Ùá뿟پZ ÷òò⣼HÐÒÒ"ü÷µþ\\yÏjG³À‰‰f³¹Í~¯¶‰DÒás€xàìØ±¾¾¾Ø¶m–.] ½^4hP‡eÕl6cݺuøê«¯„ýõ×_·™I¿Öñµ´´@&“A¡hÿ„þýû_õ™Å&“ vvví^_¶lª««QYY Lœ8...P(øøã…ûœ[Ï™Ùl†L&k÷…py6úz¾4³±±««+222 T*ñÚk¯Ál6£¨¨kÖ¬ÁßÿþwàðáÃ8sæ $ *++…YÚ+¿8¹çž{ð‡?ü¡ÓÏš1cF§ï™ÍfÔÕÕA"‘tøE¤\.‡­­m‡—ËËåòN¯:0™LW=~¢ka‰&"ê#Ž?Ž×_{v½+v‹ûùû°±±;€ËÅ[©Tviæ €°ÊmG3Þ­³ÝW¾V^^©TzͲ}åk®®®W-Ô{) Èd2477 +L;88t8¶uö¯¹¹—.]j7öÊKk¯ç‹£Žüïÿþ/vî܉ììllݺÕÕÕhjj‚³³3V®\Ùn|KK ž~úiìß¿ùùù°¶¶Æ¾}ûpÿý÷wù3ÝÝÝa2™ÐÒÒ"éðùô>>>HKKÄ °iÓ&üõ¯Þ{å•W®;Ãã?ŽÝ»w ÷½ûøøçfúôéøðÀ‹/ÂÁÁ¡Íÿ;•J…µk×~úé'|ÿý÷íf£SSS 6  Ã “'OÆ®]»\~\ÕÒ¥K…¼cÇaẛÕzŽe2Y»ÕÂË—œïß¿Àå[ ,XÐ-ŸK½K4uÉ•—™wi›ÎU+((ÀÙ³g¹¨Z/öÆoàÁÄùóçQWW‡‰'âž{î RRR°ÿ~¬X±Ó¦MúuëðÌ3Ï 33[¶lÁÙ³g1räHüúë¯m[½zõMçR«Õxùå—áää„¢¢"Èd2Lž<¹Ý}Â<òNœ8üü|H$„„„૯¾ÂW_}ÕfÜŠ+ÚÌ€vdéÒ¥x÷Ýwaee…E‹!<<...8pàrss¯û kkk455!??ááá3f ’““qðàÁ/_^»v-"""““ƒÏ>û ©©© Â?ü€'N\w†¹sçB*•âäÉ“0›ÍP(BQV«ÕøðÃ…çt———·)ÑÆ ƒJ¥Â¿þõ/466bÞ¼y˜9s&FމÒÒRœ9s'OžDmm-Ö­[wÕ ­&rss1eÊÜwß}ÈÍÍÅ®]»PSSsÝÇÕ‘Ö/“ÉðÖ[oáôéÓ._ÖþÜsÏ!==k×®…ðh.êÛX¢‰ˆˆè–á¢j–kÁÿcï¾Ã£*·g&“B*F(B®‚*(°v£€€ E,¨ ˆ¸î*®ÊŠºÈ²EeW¥) ¢?Aš(B Rƒ ¡ÒÒ{&É”÷¼9›ÂÐ åþ\—×ErÚsΙ˜ÜO2„Q£FñÉ'ŸÇÕW_ͶmÛÈÍÍ娱cÕÖa;v, ,`Ó¦M••Å?ü@bb"xyyñî»ïº]9SŸ?ýéOLš4‰={ö`·Û fôèÑ5ö[±bÅÅŘL&zôèÀž={ªí“’’­·ÞzÒ=mÚ4-ZD||þøcc9&³ÙLûöíùïÿkÌì\©¾Y›¡b,um<==¹æškغu+¥¥¥DEEÕØ¯ê„\Û¶m«õ\îV¶˜Íf<È!CX³f kÖ¬Ád2Ѽys†Ê'Ÿ|‚Åb©uóÚ&S˜8q"‹…·ß~›mÛ¶ár¹hÔ¨?þ8111ìÝ»·F×㘘üq¾üòKV¯^Éd"$$„iÓ¦1zôhÒÓÓiݺµ[÷ð‡?üyóæa2™hÙ²eµÙ©S'víÚ…ÉdbÀ€5ž•¯¯/{öìá­·ÞâÃ?äÀ¸\.L&V«•Ë/¿œQ£FÑ¡C‡jÇ;v¬F6nÜȈ#8pàéééX,ºwïÎáÇÉÈÈ0>sUíÙ³§ÆŒÞ•N|æaaa|öÙgŒ3†_~ùÅ?Þ¨Q#cŸS™Í[.~&שÎ2pŠ=kn ýø§ÜfcTP¥gaìÃÔ©SÉ8Ç”ÉãÎø\­;ÝÅæ˜-§¼ˆ½ˆÈ‰¦NJ\\Ÿ~úé99ÿO?ýÄëy‰W~tNÎ)2y†aöjÞÐÅSTߤjµ}ï|˜TíÇdܸqüúë¯gíœçBii©Û-‚õíët:ÉËË*&&;qöê‚‚£e5((¨F€+--5¦‡‡þþþ5®‘››ëÖd[~~~n Xµj ÀÓÓ“²²2<==q:ôë×èèhš6mÊ×_m´æV½‡“õÖp:ÆìÛ€1aÔ~ÿð¿¨+©œÍ»®çQ»ÝNAAPó=T}ÆÞÞÞ5Blmê{çeeeF7u£õ~ïÞ½ÆrV•ûyzzͰaÃHKK#,,Œ´´4 ¢•ºry­ÚÊUùÞÍfs“á•””`³Ù0™Lát:®ã‹¥Z¸–KÒƒj‰‘KŠ&U;wN¥Km}ûVVZÔåd!ÐËËë¤e9ÛÏû©§ž¢¼¼œ!C†Ð¾}{²³³ùî»ïŒ.ÈV«µÚäZîY ÆìÓµ-‰u¢+qNeXE¥Ê¡µqç×vL]<==kíñÃSO=ÅÍ7ßL¯^½ $..Žo¾ù†-Z––ÆðáÃý­Vk½÷êÎ{¯ìSÉl6ŸÒû’‹ŸB´ˆˆˆÈI4ô¤j™™™äææ²lÙ2MªvžÊÍÍÅËË‹­[·‹Ãá >>žììl¼¼¼X¸p¡–|;M!!!ÄÆÆ’‘‘···±®ø®]»hÖ¬ÿþ÷¿ºˆr‰Qˆ¹DôéÓ‡•Kfå ]”‹ÆÈÇžgö'_h¼¬ÔêlNªvìØ1ŠŠŠxÿý÷5©Úyê‘GáË/¿dçÎÆ˜[«ÕÊ5×\üyóèܹs—ðÂÔ§O®¹æÖ¯_Oll¬Ñß××—¡C‡òÙgŸihùÝ)D‹ˆ\"Ìf3>>Þ¸ ÑgËâoVðñL»B´œõMªöã?ràÀ~øáã{N§“ÌÌL²²²ÈÌÌ$33“ŒŒ 222ÈÌÌ$!!Áø~zz:™™™ÆlÕÁÁÁ„„„Bpp0M›65¾IÏž=Ï[¿(LŸ>éÓ§ã‘N§z œ:t`ÅŠÆ×6› ooï,‘ˆB´ˆˆˆÈÉl6ZëŒÏu)))1Bwe°®ü/..Žôôt.»ì2…è3d±XÔuûQ€–óB´ˆˆˆÈ%ÂÇLJ-ZТE‹†.ŠˆÈKDDDDDDDܤ-""""""â&uç>CÅÅ%\yå•x{{ãëë Tt•ª¯áïïo,_9CgÕEî«.ïççgL@„ÉdÂb±T¬ŸWyFkí`±XŒá¡b6HwÖù=LŸ>W^y€9sæ0lذ.Ñů¼¼œ™3g2oÞ<’““)--­±Ïœ9s4hP”îÂ3{öl^zé%>øàzè¡.Ñ™9tè1ÿÁСC™1cF—è¡}†||¼ùnõ„„„PTT@qq±ñ?©üü|.—‹ÜÜ\ìv;@Å ƒ%%%RXX@bb".— ‡ÃA~~>¥¥¥PTTDYYY×(//7ÎUW¨¯-¨{yyѨQ# bé€Êg1›Í˜Ífê¡þlTˆˆˆÈÅ+##ƒÂÂB"""(/¿tW hÖ¬¥¥¥têÔ‰M›6Ók=óÌ3üôÓOäçç“Ýn¯¶=44Ôø{òt<ýôÓ|ýõ×lÙ²…víÚUÛ>pà@vîÜ @ffæ¿UåßâµVH\h*sFPP‘c&NœÈG}Tm_‹ÅBDD‘‘‘ 6Œxà’^.O!ú ™L& kè¢Ô«¤¤›ÍæÖ¿ÝÝ7''ç´Ž;qߪUvmÿ>Ùös¹oeE‚È…*::š·Þ|•‹ÿÕÐE¹hÌ›ó¾Ñ+HDÜ“ÝÐEhP999”––²wïÞszÒÒR>ûì3JKK±Z­ôìÙÓhIJJ"99ùŒÿ®IKK#''Gíäää\TaËd2]T÷Ô¸Ÿ‚‚ãïüªûØl6“&Mâ믿fÑ¢EFÃÙ¥æÒ¼ëKPåÚ“ð¿ÖáóÑ™„úÚŽ;1èŸÉ5òòòp:À¹õ§{\Õnþ"'r8FÏ9;† ¾³–±qˈ#ð÷÷' €þýû7tq.z X­VJKK¹÷Þ{Y°`±í7ÞàÍ7ßIIIqóÍ7Ó¡Cãçá­·Þb̘1´k׎¬¬,"""˜:u*Ó§Og÷îÝóꫯòÄO°råJ–-[Æž={8~ü8V«•+®¸‚‡~˜‡z¨ÖJ%K–ðÁ°wï^<==éÝ»7C† ©·ìLž<™§Ÿ~—ËÅ=÷ÜÃòåËIMMå³Ï>ãá‡æûï¿gÙ²eìØ±ƒcÇŽa2™h×®ÇgôèÑF€µk×?ûO?ý4~~~,Z´ˆÔÔTìv;»víÂf³±téRV¯^Mrr2YYY„„„лwo^xᮺêªjå¼í¶Ûغu+Pñsøþûï³}ûvL&½zõâÍ7ߤcÇŽìÙ³‡)S¦CQQÝ»wçÍ7ß4Æ…WJNNæ_ÿú7näÈ‘#X­VÂÃÃgÖ¯_?…h‘ÓQö/„ _׿O'¨çääœ•Šƒ‚‚c\ÖùÖm¿ê¿Ïç÷+"Ò:vìHNNW_}5sæÌ©¢·nÝÊîÝ»q:ôêÕ‹ˆˆˆ:ÇDçææ…ÍfÃf³‘——GII eee,\¸Ù³g³~ýz:tèÀUW]ÅܹsiÚ´)kÖ¬1BôªU«Œ9bÖ­[GQQ¾¾¾°aÃl6—]vÙItjj*$,,Œüü|òóóq:ìÛ·—_~™Å‹óÕW_ÁG%''† B“&MÈÈÈ ¼¼œ£G2~üxÒÒÒ;v,åååØív\.PHªv™Ý¾};7ndذaôîÝ›òòrŠ‹‹),,$::š~ø—^z‰‰'Ö{G5~çBE×îÒÒR, %%%uN>ûðÃsôdddPTTDII [·nå®»îbêÔ©<öØc@ÅçÊßåUÃ2TŒŸ-,,4ºxŸx¯*º¶GEE÷YõÝýõ×Ìš5‹Ÿ~ú‰öíÛW{Þ~~~ :”¦M›’žžNyy9iiiüùÏæÈ‘#¼øâ‹ÆµNõ6›Ûo¿ŒŒ rssÉËË£¬¬ŒåË—“˜˜xJsùØívî¾ûn:Daa!¹¹¹”––²fÍfÍš…ÉdÂË˫ڻÊÌÌ$77—ÜÜ\žyæüüüÈËË£°°ƒòÞ{ï1{öl<<<ÈÎΦ°°yóÍ7YµjŸ}öYµ ýÚk¯1cÆ , YYYøøø°wï^V¯^íö½@Eƒ±cDzaÃòòòHNNfñâÅL˜0ÿjå9~ü8sæÌaÑ¢E¬^½Úè)yàÀrrrèÚµ+S§N%44”üü|Š‹‹ ÄétEPPÙÙÙdffRXXHII v»%K–ðÉ'ŸT› ¯rXÅbá¾ûîÃÏÏÏ6²wï^úöíËk¯½ÆäÉ“  ==²²2:Äm·ÝÆwß}gé-[¶pÛm·DVVÅÅÅøøø`2™Ø²e ;wîdãÆ Ñ"«‹¹U¿¾ãêëªר<×ïÕm÷îݤ¦¦²lÙ2·¯¡ÉùD¤!Œ;– &ð믿’œœÌ±cÇhÖ¬™±ýïÿ;eee4kÖŒ'žx¢Ú±'ŽÃ5jf³™;v`2™ˆŒŒÄÏÏ„„âãã±Z­Ü}÷Ýìß¿ŸÛo¿—_~™ììlV¯^ͳÏ> T´òV¶ÀÀ@¢££¹õÖ[Ù¸q#þþþØl6n»í¶“Þ׈# eÆ ˜ÍfÚµk‡Óé$11»ÝNQQo¿ý6o¼ñFµãœN'Øl6Z·nMVV‡Âd21qâD~øa®ºê*&L˜À[o½…ÃáÀÓÓ“#F爊Š";;›û￟>}úãMÛµkGQQiii”••1yòdºwï^ïý¼òÊ+lß¾Õ«WS^^Nûöí¹á†°X, :”ï¾û®ÎcwíÚ…ŸŸaaa´mÛ–cÇŽ‘˜˜ˆÓéä¹çžã¶Ûn#""‚×_Y³f‘’’‚·ß~»±JLÇŽ)**âƒ>0Ą̂Q£Œ`WÙšþè£âááÁæÍ›1›Í´iÓ¦Ú»÷ððàž{î!..®Z(t8FÅ@ëÖ­ÉÉÉ1ž÷_ÿúWFe´Ÿê5&OžLrr2‰‰‰X,Ú·oÙlfÿþýX­V£ÄÿøÇ?سg©©©X,Úµk‡Õj5®Ußøj—ËEjj*4kÖ ³ÙlTÞ¤¤¤àííMxx8‘‘‘Æý;NJJJøê«¯Œùü‘÷Þ{‚‚<<äfZ4¯{BÄ…ÿ÷‡¯s»Ž¯ÿx‘‹ÉdâÆodݺutèÐ/¾øÂhý+++cÅŠ@Åÿ7ëë2º}ûvvìØÁÑ£G &>>Þø˜Óé䦛nâçŸ&%%…-[¶pýõ×ãååEii)ëׯÇáp@II &“ ³ÙLII ?þø#·Þz+kÖ¬¡°°ooï“.ã´yófcÂ-‹ÅÂÞ½{éСPÒ‡ Bvv6S§Nåå—_®6Iii)‘‘‘ìÝ»×X­¤gÏžlß¾OOO¶mÛÆ€˜4iS¦LÁápàããÃìÙ³«•aÚ´itëÖE‹áííMbb"áááLš4‰™3grôèQž}öYâããë¼—×_­[·²fÍìv;ýúõãã?6¶×¢Ÿzê)ÞyçúôéüoE™>úˆ©S§RXXÈܹsyå•Wxíµ×رc)))X­VÞ~ûm£g@¥o¾ù†ììlL&³fͪV²uëVbccë|÷ýû÷gË–-$%%±mÛ6®½öZãØ’’.»ì2âââŒUez÷îMLL >>>ÄÄÄpçwžò5®ºê*¦OŸN~~>lڴɸîöíÛ¹îºëp:nU^;N¦NJvv6žžž¬\¹’KKuèв²2ãóR›Î;³k×.,‹8ãââX´hC† 1xnn.»wïæ¦›n"==O>ùÄÑ'N¤  €€€^ýuãçôøñã´nÝÚ˜ï§.K–,!))‰ÒÒRvïÞÍþýûÉÌÌ`ðàÁtîÜ™O?ý”#FÝùóóóIJJâšk®áàÁƒÌ;·Fˆ®¬ôX»v-ýúõ*/¼½½ùÓŸþÄW\Áu×]üïï ·Þz‹yóæ‘““ÃW_}U£‚ÎápÐ¥K~ùå, yyy„‡‡SPP€Éd¢yóæýôÓS>¶²ÕüÄ%ôªŽ=oÙ²%ƒ%- ìm±øµ­û|E1¤eÕ"uüÿ?Þ¤ûåÒõæ›oÒ§O²²²øä“OŒ?οùæìv;~~~ 2¤Î®ÃË—/'44”Ç“‘‘Qkwë6mÚ˜˜Èúõë¹þúëéÕ««W¯ÆÛÛ›;v‹——Wµ®Å+V¬àÝwßeåÊ•”””`µZ`X—µk×ëž{î14TŒ«îر#±±±8¶oßn´HAE¥åÇ\-=öØcìÞ½›¢¢"’’’Nþ@ÿ*+`Ÿ{î9#@üéOâŸÿü'&“‰ÄÄDl6[½ìt<ôÐCÌŸ?ŸI“&±ÿ~²²²Œkøúú’››ËºuëŒõ¾ÏÄòåË «÷ÝGFF’Àúõë«…hooo¦OŸnü~xòÉ'Ù±c………Æó>Õk”••ãw»wï^íš=zô OŸ>üôÓOnÝ_\\œÑ;¢}ûöF€†Š1ë·ß~»1¾»6&“‰o¿ýÖ¦f³™ððpÂÃɉ‰aøðáÄÆÆ’ššj¼#OOOJJJصkP*+—«ìIP),,Œ§žzŠ÷Þ{¯Î28NrssY¿~=PÖ;†Ëå¢yóæ¼òÊ+Fï¸'žx‚˜˜RRRðððÀl6cµZ)))!!!òòòj•þþþôèÑÃÐð¿¿³FŽɬY³øãÿÈ¡C‡ÈÎÎ6î144”ÌÌL¾ÿþû!Újµ2oÞ<ã™Ò¡C#Tÿ÷¿ÿ5*¿*Ç…¯Zµ ///RSSiݺ5V«‡Ã¿¿?ƒ "**о}ûÒ¾}{:tè`üA!ZDä"P5à‡„„ÔºOdd$ÿøÇ?Ý:ß3cÆžQy.õãE.7Þx#AAAÕkT}þUßo¥¾}ûº¢SRRŒVÞÊÕªnºé¦zC´Åb¡M›65¾?þ|^|ñE‚ƒƒ9|øpµwT©²2=++Ëè®Ý¾}ûj|AEeQ}!Ún·³eËãk“É„¿¿?QQQÌ™3OOOÖ­[ÇСC !11±Öuǽ¼¼(((¨61[DD;w®±¯ÓédРA¤§§S\\Lff&ååå5>‡ééé5Žu¹\\~ùåÕ¾W9¡‡‡:uª¶­rŠÉd";;›Ö­[óÀ0sæLRSS cþüù¼ñÆxyy1zôh^xá¼¼¼¢EDDDäô :”Y³fѪU+æÎKóæÍùå—_€Š?Zûöí[ïñ•㌡bLp·nÝêÜ÷ž{î*®Ùl&++‹•+WòË/¿àt:éÑ£÷Ýw , 007Þxƒ€€l6wÝu×IïÅårCrj›…¹r¸Lå$OU™L¦ZW0›Í8ÎSwZyÐUËlLzu6­_¿ž7³$wïÞ®]»Lff&K–,!++«Öõ O‡Ýn7îõî»ï¦k×®uî{bWüºž·Édªö¼Oõû÷ï§¼¼³Ù\k¥K£FNyb1³ÙlÌcR•O½+•œx¡¢û¸qã())!++‹N:ѳgO‚ƒƒñôôdÚ´i”••U›¼Îåra±Xj]Õß߿޵Â===ùÛßþƨQ£ªÍÇRÕc=Faa!yyy´iÓ†Þ½{Œ··7~ø¡Q1ub·q__ßZÇ4/Z´ˆ#GއÝn§gÏž\yå•“””ĦM›8|ø°QÙq¢ŸiåýÕö™©ÜVõçsÆŒ„……1}úôj&;vdåÊ•üüóÏ,Y²D!ZDDDDNÏ[o½ÅìÙ³9xð ñññb·Û áÉ'Ÿ¬÷t¨fRÙõ2((È­µ‹›7oN`` ™™™ÄÄÄàïïÅbáÞ{ï¥oß¾¸\.òòòøú믱Z­øøøuÒóFDDdïܹÓXšªÒþýûÀß¶mÝÃAÎD³fÍŒ S­ ååå$$$aèl—aݺuøúúRVVÆÄ‰yûí·m_ý5›7o>k­ÐPñî+ŸwãÆÏêºÕ§{ÊYÆN§1öµª_ý•òòòZ鉚5k†Ëå2fw?QeH<;wîÄÃÃÒÒRn¹å–j³kggg3mÚ´jû7mÚÔ(Ão¿ý†Ãᨶ¼YeT}5jTçp¶cÇŽÞ]yå•ìÞ½ÛØf·Ûëmå®Ëºuëðð𠬬Œ©S§òÒK/Û¦OŸN||<‡>åóžŠÉ“'3yòdÒÒÒ˜?> , 66–””ÂÂÂøä“OZj0—ˆˆˆˆœ–Êœ322 áÝwßÅåra³Ùxøá‡Ozü-·ÜbŒ^¼xq­acÛ¶m <Ø—€ÑÂݤIL&V«•Ûn» ___Z·nMII .—‹²²2G­ÝiOÔ¯_?#ÔÌœ9Ó˜ü*ÂËž={ÈÉÉÁl6Ó¿ÿ“ž¯.•ãrk Pýúõ3Æ~þío«¶mæÌ™tíÚ•ãÇãååUm6ô³Áb±­ÛU»Ä–––òî»ï’––Vã˜Ê{±X,Õž—;Ûo¹å£ëïÂ… Ù¿ã·nÝÊàÁƒktWvש^£GÆ{Y»vmµ±ìGŽ1Ö(wÇW\a´pîܹ“¸¸8c[^^óæÍ;åû±X,Ƴ8qèÖ[o½U£ÒÊÃð°ŠI0ÃÃÃY°`±Ín·ó÷¿ÿý”ËpbyªÎŠ_ÕG}tÊ••ç¬ìŽ_µûuAAÿþ÷¿III9ƒ×Ïápð—¿üÅéááá¼ôÒKìܹ“ž={3vÿòË/¡j‰‘Ó6vìX^xá|}}®£;w®16±6  M›6äääPZZJ¯^½6l˜1öw×®]:tˆãÇWër9|øp¾ýö[ )..& À˜úÎ;ïäßÿþ7ØívºtéâVËáM7ÝDãÆÉÊÊ¢¬¬ŒîÝ»3dÈ øúë¯iÑ¢iiiôîÝû¤ã«ëÓªU+cmã‰'áãúë¯ç‰'žà_ÿúP±¾mŸ>}0`‡bíÚµDFFâr¹êñütuïÞݨ¨˜0a¿ýö&“‰eË–qäÈ‘jëù$—]v111lÞ¼¹ÚzÓ•Æ©[jW IDATŒÃk¯½†Ífc„ üôÓO´hÑ‚U«VqèСS.CU¡¡¡X­VÊËË9räǧ[·nìÞ½›ï¾ûî´*?ºwïÎÒ¥KŠåÉÆŒCYYÿ÷ÿGnnîYí q"—ËÅ;ï¼Ãþóz÷îM—.]hÚ´)ÉÉÉFÏ„„„^{íµTµD‹ˆˆˆÈi7nìØ±ÃX6æÄYsë³lÙ2š7oŽÓé$??Ÿèèh–.]ÊîÝ»ÉÎή69R¥b2™ŒÖͪ“@ <ؘ­Ûd21xð`·Êa2™Xºt)~~~äåå‘––ÆúõëÙ·oV«•;wh,ßuº|ðAüýý)++céÒ¥,_¾œ>úˆùóçÓ¬Y3fÍš…¯¯/6›Ý»w³jÕ*ÒÓÓ1™LlÚ´‰ˆˆˆÓZÅádî¼óNZ·nÉd¢¨¨ˆU«V±aÃòòòÈÎήµâà¾ûîÃjµ’žžNRRË—/gÑ¢EFWð#FàååE~~>[¶laùòå|öÙg|ðÁ˜L&V¬XADD„ñî7nÜh¼ûœœœZßý©8kÌ;—¦M›räÈÊÊÊØºu+ëׯ';;‡ÃáV…L¥Ù³gLrr2.—‹ØØXÖ®]kÌp]9îÙÝsúûûóÄO`2™ÈËË#66–ï¾ûŽ}ûönè/ù :u">>“ÉDrr2«V­2–r:Ù‹“yõÕWHMM%99™•+W²mÛ6£kü©zøá‡ñõõÅd2‘ŸŸÏ²eËˆŽŽÆf³‘••Uë|gSåg!55•˜˜–,YÂÊ•+)..ÆÛÛ›G}”AƒWˆ‘Óf6›¹á†Œ®›ÙÙÙ 6¬Îý9Ríëððp8À‹/¾HÓ¦M9pà?ÿü37näСCtìØ‘÷߿ڤFM›6%44Ôøºêõ®¿þújã<ï¸ã·ï¥sçÎ8p€RRRBLL k×®%33“[o½•äääZ—IªÚÕ¼ª¼¼¼!pܸq<ñÄøúú²oß>¢££IJJ2f2d7n4ºnݺ•ï¿ÿžÜÜ\î»ï>:Të¤Sµ±ÙlõŽy­:ñÉdbýúõÜÿý˜ÍfvíÚŦM›(,,dâĉµv×n×®3fÌ qãÆìÙ³‡èèh¶oßn´@8É“'ÈÞ½{‰ŽŽæ×_5Vxx8d„ 4iÒ„ƒÖúîO ™uµâÔxÞ§z€€âããùÃþ@vv6?ýô[·n%""‚qãÆQVVfŒ?™FçÊÊÊbݺulݺ•lTôTý,ŸÌôéÓyùå—ñôôdçÎlÚ´‰ŒŒ ^xá…Z'£سgC‡%77—~ø­[·âïïÏ”)Sp:u¶îÖ6Óö‰&NœÈ”)SðööfÛ¶mlÚ´‰´´4üqºtéPëg§rÂY­Vbbb¸çž{ŒÏáæÍ›)))á…^¨³²j"Q©¶VúJ•å³X,<òÈ#øûû?›?ÿü3GŽ¡mÛ¶Ì™3Çè)brIõŽ=kn ýø§ÜfcTP¥õ<wM:•Œ£qL™<îŒÏÕºÓ]lŽÙBË–-Ïø\"ri;“u¢Eäâöã?2nÜ8~ýõ׆.J­ª‹ÊY¬OT^^nü!{²™‰KKKOÚ:WTTdü‘ïïï_í|ùùùÆXÍ   L&Ó©ÝÐÿWVV†Õj­óøÂÂBcLw```µV½ªÏÄÇǧÎ5sssq¹\uÎ~ìγ¨Ýn7–:òòòª¶¦²Íf3‚¿¯¯o­¡¼êº¾N§Ó/žžžuvg¯|'f³¹Öʆ‚‚ìv;V«µÎõÃë»ßúžwyy¹®ë{Þ'»Æ‰ª®]ZZj®Fô.—‹+VpÇw`6›sÙl6®ºê*~ûí7¼½½Ù·o­[·þ÷y¨ëVe·Û±X,Æç³òso2™ ªõ˜ªïÕápUßkqq±QâÎ}Vªœ½rò²ªï«òç°ê{ªë3_WyëúLW~®ª^§R}Ÿ™ª÷PmÒµJUßjL´ˆˆˆˆœOOÏ“¶ŽZ­V·—rçv__ß:Ã\m!þtœìžê ‚•ǺÓb\WØ©t:*&•ªkVeooïzC&Pí]™Íæ:ÏUU}ï¨uI£Õw¿õ=o«ÕêVOvU}‡^^^§t¬Ëå"**ŠÈÈH D«V­8~ü8ß|óQÁrùå—Nþy¨êÄŠ(w>÷Uß«Åb©õ™5jÔ¨Z¥‹»Nì^Ûû:•÷T¹¥º>Óõ}®êû̸sŸuý +D‹ˆˆˆˆˆœ#………lذ«ÕŠËå"##ƒ¬¬,¼½½Y¼xqCONƒB´ˆˆˆˆˆÈYf2™xä‘GX¶l;vì0Æk{zzrà 7ðÅ_ЪU«.¥œ…h‘³Ìd21wî\ãëòòr,Ëψ- O!ZDDDDDäswN9ÿ)D‹ˆœG.\Èš5kº"rž)--%,,¬¡‹!""(D‹ˆœ7FŽÉÀº"rž:ÙR0""òûPˆ9O„……©¥IDDDä<§Qí"""""""nRˆq“B´ˆˆˆˆˆˆˆ›¢EDDDDDDܤ-""""""â&…h7)D‹ˆˆˆˆˆˆ¸I!ZDDDDDDÄM Ñ"""""""nRˆq“B´ˆˆˆˆˆˆˆ›¢EDDDDDDܤ-""""""â&…h7)D‹ˆˆˆˆˆˆ¸I!ZDDDDDDÄM Ñ"""""""nRˆq“B´ˆˆˆˆˆˆˆ›¢EDDDDDDܤ-""""""â&†.€ˆÈ¥,..ŽÏ?ÿ¼¡‹!"ç)«ÕʤI“º""R…B´ˆH:pàŸ|ò Æ k袈Èy¦  €/¾øB!ZDä<£-"ÒÀÚ´iÃ{ï½×ÐÅ‘óLJJ _|ñECCDDN 1Ñ"""""""nRˆq“B´ˆˆˆˆˆˆˆ›¢EDDDDDDܤ-""""""â&…h7)D‹ˆˆˆˆˆˆ¸I!ZDDDDDDÄM Ñ"""""""nRˆq“B´ˆˆˆˆˆˆˆ›¢EDDDDDDܤ-""""""â&†.€ˆˆ4Œ… ’’’RçöáÇӲeK Ç?ÿüóxxèW«ˆˆÈÅL¿éED.Q[2óÛÑÃunoTVH8¥un_“™FšŽ7¾^ñþxæ™g¢EDD.rúM/"r‰ºë™§ÈÀYï>öz¶ |fôI¯q)¿úÃ'=Ÿˆˆˆ\ø4&ZDDDDDDÄM Ñ""— ¤¤$VÌšÓП¨tëÝ ‹ÅÒÐÅ‘sL!ZD䔜œÌ÷ó?oèb\Tf¬Y——WCCDDDÎ1…h7)D‹ˆˆˆˆˆˆ¸I!ZDDDDDDÄM Ñ"""""""nRˆq“B´ˆˆˆˆˆˆˆ›¢ED.AmÚ´á®'oèb\T~‰ù§ÓÙÐÅ‘sL!ZDäÔªU+nñ`Cã¢òä€[°Ùl ] 9Ç¢EDDDDDDܤ-""""""â&…h7)D‹ˆˆˆˆˆˆ¸I!ZDDDDDDÄM Ñ"""""""nRˆ¹%%%±bÖœ†.ÆE¥[ï^X,–†.†ˆˆˆœc Ñ""— ääd¾ŸÿyCã¢2cÍj¼¼¼º"""rŽ)D‹ˆˆˆˆˆˆ¸I!ZDDDDDDÄM Ñ"""""""nRˆq“B´ˆˆˆˆˆˆˆ›¢EDDDDDDܤ-"r jÓ¦ w=ùxCã¢òKÌÏ8Ά.†ˆˆˆœc Ñ""— V­Zq󈺕'Ü‚ÍfkèbˆˆˆÈ9¦-""""""â&…h7y4tDDDäÒ‘‘‘All,IIItíÚ•ë®»®a %""r ¢EDDäœëׯ;wîÄf³ár¹p84mÚ”Ç{L!ZDD.(êÎ-"""ç\LL ………X­VhÑ¢E—JDDäÔ©%ZDDäâr¹Ø»w/Àn·Ó¼ysºwïN£Fjì[ZZÊ–-[8rä>>>tëÖÖ­[רoáÂ…äää`6›yâ‰'HNN&66–²²2ºuëFûöí}·oßÎÎ;¸îºëèÚµkómÛ¶ØØXzõêÅ•W^I@@\{íµ$$$°mÛ¶³ôDDDD~_ Ñ""— ¤¤$V¬Y͵O<ÚÐE¹htëÝ ‹ÅrN¯±råJÆŒCVVv»²²2ãšýû÷gõêÕÆ¾~ø!/¿ü2%%%8NL&‘‘‘¬ZµŠÈÈHcßW^y…C‡a2™Xµj+W®Äétâp8°X,\{íµ¬^½šFQXXȳÏ>Kyy9¡¡¡?~¼F9Ÿþy~ýõW ظq#)))FÐ3fŒB´ˆˆ\°Ô[D䔜œÌ÷ó?oèb\Tf¬Y——×9;ÿ¼yó1b)))”””@ãÆ #00Ыï¾û.“&M"??ŸòòriÕªÁÁÁÐÐP:wîŒÍfcРAµ^ËjµòÎ;ï°råJ&Mš„ŸŸ.—‹U«V‘ŸŸÉdbĈÆxæ×^{­ÚñŸ~ú)-[¶`ذaç𩈈ˆ4 uç9ÏÍ;—æÍ›“››Ëu×]ÇW_}elëÔ©wÞy'™™™|þùçDDD››KïÞ½yçwèÖ­íÚµ£wïÞ˜L&vìØAyy9V«Õ8—ÅbaæÌ™<ôÐCôèу 6°hÑ"ìv;ñññtïÞG}”ÿüç?˜L&¾ÿþ{ãx—ËÅçŸNNN&“‰7Þxã÷x<"""¿+µD‹ˆˆœç~þùgŠ‹‹xæ™gjÝ'88€;wRTTÀèÑ£«íÓ®];.¿ürš6mŠÓé¬1.Ùl6sçwVû^ûöíñóóÃáp’’@›6mèÒ¥ W]u%%%,\¸€uëÖa±XÈÏÏ'22’æÍ›Ÿá‹ˆˆœ¢ED.U.Žòr\.W½»9ååuþ§ãë?þlÈÎΦ¤¤€«¯¾ºÞ}srr°Ùl\qÅ5¶·hÑÂXbêðáÃÕ¶9‚‚‚ª}ÏËË “É„Ë墴´ÔøþÈ‘#Vì)S¦-æ>>>Œ;Öíû¹¨;·ˆÈ%Èl6ó3#5fΚïéÙ¯oû>~Ûl]ÿSÛu|ÅñM1չϙòõõ5&抋‹ãª«®ªwßÊ ûÛo¿ÕX‚*++‹¼¼<BCCO»LÇçÅ_Ä××—]»v‘‘‘Á·ß~KAAŒ3æ´Ï-""r>Sˆ¹õéÓ‡òòr·öÝüÚ3ºÖ¥~üÙеkWÒÓÓ˜?>÷ßûvêÔ‰#GŽ””Ä‚ :t¨±-77—_~ùÅXºG§]&???¢¢¢øí·ßøùçŸ4h-Z´à×_¥OŸ>çt¦r‘†¤îÜ"""ç¹|Çc6›ùî»ï˜6meee@ÅÐ3gÎdàÀ <ØÜK—.eÕªUòÜsϳm·mÛÿ3*×È‘#ÉÎÎ`óæÍa2™jÌØ-""r1Qˆ9Ï]yå•Üÿý´k×—ËÅŸÿüg|}}ñóóÃßߟ^xÍ›7ЫW/zõêEçÎq8DEEáííMpp0Ë–-#%%«ÕÊ矟ù:áýû÷Çf³Ñ¢E L&‰‰‰øùùqóÍ7׺¯ÉdÂd2ñᇒ’Âßÿþwãû}ûÖÝ­^DDä|¡-""røç?ÿÉ Aƒ ¤U«Vx{{SRR‚‹ÅX›*Öjîܹ3aaa„‡‡ãr¹p8¸\.üüüX¼x1={ötûÚ•“šÈl6óÈ#àïïoL°V×úÓ•-ÖUåääÿ®œìLDDä|§1Ñ"""‹Å”)Sxúé§Yºt)ñññ„‡‡Ó¯_?n¸ác____.\ȶmÛX½z5©©©x{{sõÕW3dÈݸ~øaŽ=ŠÅb©qÝ®]»òÀжmÛÛ{ì1ÒÓÓéÓ§“&Mªµü/¼ð111õÞãå—_^ïv‘óB´ˆˆÈ¤uëÖ<ÿüóníÛ³gO·Zœßxã:·ÝrË-ÜrË-unoÓ¦ üñI¯ñè£ò裞t?‘óºs‹ˆˆˆˆˆˆ¸I!ZDDDDDDÄM Ñ"""""""nRˆq“B´ˆˆˆˆˆˆˆ›4;·ˆÈ%ªw¯k9z4­Îí›7~G³faun¿¡ïí:¾ÊñaáálÙ²µÎýEDDäâ -"r‰Zðé;Øí¶:·ã´%×}ü'Åîpèx ##‡!¾Tç¾"""rñPˆ¹Dµh®ò3;þL¯‘ïiµžÑ¹DDDä¡1Ñ"""""""nRˆ¹Í›7ç&¼ÝПh4iȇÿ™ÖÐÅ‘ßB´ˆÈ%¨¼¼›­¬¡‹qÑðööäî»nkèbˆˆˆÈï@!ZDDDDDDÄM Ñ"""""""nRˆq“B´ˆˆˆˆˆˆˆ›¢EDDDDDDܤ-""""""â&…h‘KÐÈ‘#™þ¯WºœÜ|Æ<ûRCCDDD~ Ñ""— ¼¼<º’’R–.[ÕÐÅ‘ßB´ˆˆˆˆˆˆˆ›¢EDDDDDDܤ-""""""â&…h7)DŸEß}÷óçÏ';;»¡‹"""""""ç€BôYd±XX²d ‘‘‘ôïߟýë_$$$4t±DDDDDDä,Qˆ>‹n¾ùf/^LZZ¯¾ú*IIIôíÛ—¶mÛòüóÏÓélèbŠˆ0oÞ<ž›ðvCã¢Ñ¤q þgZCCDDD~ Ñ瀷·7ä½÷Þ#55•o¿ý–Æ3~üxÂÃÃyä‘GX¸p!EEE ]T¹D•——c³•5t1.ÞÞžÜ}×m ] ù(Dÿºté¤I“ؾ};[¶lášk®aÆŒ4oÞœ¨¨(f̘ÁñãǺ˜""""""r Ñ¿³6mÚðüóÏóÃ?À#OTŽ£®K½wï^.\ÈøñãIIIá¶Ûn#**Š;î¸__߆.îåü#ÑÑÑØív ðó󣨨ˆ˜˜˜jûY,"""¸ì²Ëðöön ÒŠˆˆˆˆÈùL!ú<Õ¥Kc,uRRK—.eÆŒ<ùä“ôéÓ‡¨¨(î¾ûnÂÃú¨„FQPP`|}ðàAn¾ùæjû˜L&Ìf3.—‹V­ZñÁp×]wýÞE‘ó˜ú_Z·n]ë8êÎ;kõ²Z­DFFI›6mhÖ¬N§“¤¤$zè!>ÿüó†.¢ˆˆˆˆˆœGÔ}9ŸÇQ—––rðàA\.mÚ´ÁßߟuëÖáp8ðõõ¥W¯^ÄÇÇ“””@·nÝhÚ´) ;v €o¼Ñ8gNNGÅf³Ñ¬Y3"""ê-ƒËåâàÁƒѪU+‚ƒƒëÝßËË —ËŻヒÃáàÈ‘#LŸ>ääd xá…¸ÿþûqÔ………>|˜ââbš6mJëÖ­k=ott46› «ÕJ¿~ý(..&11‘ãÇÓªU+.¿ürÇ'-- ‹ÅÂå—_^kwý£G@ûöíiÕª‰‰‰dggÓªU+BBBªíìØ1Ž=Jhh(-[¶¬óþ‹‹‹INN¦¸¸˜"""ððÐÿ.#GŽäAݺœÜ|^{ë%>üø“†.Šˆˆˆœcúkùv¾Œ£.//'**Š5kÖàt:ñððÀl63räHfΜ‰§§'mÚ´aß¾}L™2…Ù³gãååÅСCYºt)ÅÅÅ8NÂÂÂHJJbèСDGGSPP€ËåÂl6c6›iÖ¬}ô·ß~{r|ýõ×<ýôÓQ^^ŽÉd¢M›6øøøÔ[þÆ3lØ0ãëÇœàà`žžžìÛ·U«VñÑG‘’’‚ÉdÂápàééÉã?ÎôéÓ«sذa¤¥¥áééɈ#øì³Ïp:ØívFŽÉ„ xæ™gرcv»—Ë…ÉdàÚk¯eÑ¢EÕ* fÍšÅo¼¯¯/7Ýt?ýô………Fô›o¾™¯¾úŠíÛ·sß}÷‘™™ €‡‡ݺucÙ²e„††ç;xð ?þ8111Æý˜ÍfL&:tàǬ¶¿\|<<<0yy‚«¼¡‹rQ())eé²U|øqC—DDDDÎ5…è‹HC£îÖ­qqq„……ѲeKrrrÈÈÈàóÏ?ÇårѤI“ZóóócÁ‚Ю];ŠŠŠ°Ûíäææ²bÅ ÂÃɈˆÀn·S^^NFF)))<ðÀÌ›7»ï¾Û8×üùó;v,Œ‡¢¸¸???·ï'((³ÙŒÃá Q£F1iÒ$Š‹‹ ÇÛÛ«ÕŠÉÉÉüç?ÿáðáÃ,]º´Æ¹ÊÊʘ7o4nܘììl<<<øþûïÙ¼y3áááøûûãt:1™L?~œ˜˜®¼òJâããiܸqµó5iÒ„åË—Ó¸qc:tè@~~>GŽaýúõôïߟ;wâççGûöí)**âðáÃìÞ½›¨¨(~þùgL&™™™\wÝuäææâïïOpp0f³l6û÷ï'33S!ZDDDD¤ Ñ©ÊqÔÏ?ÿ<ÙÙÙ¬]»–eË–ñòË/Ó¹sg¢¢¢¸çž{èØ±ã]çƒ> ..ŽöíÛ“““àAƒèÚµ+[¶láwÞ©÷ج¬,, =zô`РA8NV®\ €ÙlæÊ+¯äÎ;ï¤uëÖØív~üñGfÍšEII ãÇç®»îÂl6“““øqã(((ÀËË‹áÇsçw’À”)S°ÙlF«­;^zé%£%;##ƒÈÈH®¹æî»ï>Ú´iƒ§§'[¶laöìÙ„„„°lÙ2RRRhÕªUó™L&FŒA·nÝØ·oŸŒ¸çž{¸öÚk '==™3gràÀòòòxçwøûßÿ^í\‡Æl6Ó¹sg{ì1Š‹‹y饗(..fçΘÍfÚ¶m˘1cxñÅÉÏÏçðáÃlܸ‘¾}û²jÕªŠVH“‰îÝ»3fÌIKKcíÚµ,\¸Ð­ç$""""r)Rˆ¾œËqÔ|ðááá<õÔSL˜0€»îº‹Ã‡3wîÜ:õòòâŠ+®`õêÕÆuŸ{î9l6III´lÙ’cÇŽ±wï^RSSéÖ­$%%QZZʾ}ûèÒ¥ .¤I“&äææÒ³gO>þøý)ÛµkÇÃ?l¬}¢ÒÒRvïÞMhh(‡ƒ‚‚ÊË+º·^{íµ„„„®]»h×®™™™$%%O›6mèÙ³'YYYÄÇÇ3sæL&Ož\íü&“‰·Þz‹?ýéOÕ¾øðaž}öY<<<8tèñññØív|ðAÆÝngñâÅ5Bt`` aaa¬]»OOObccîñAAAlذÁhyOKKãµ×^# €ØØXúöíKRRÞÞÞ˜L&zè!†nœäÈ‘¼ÿþûX­Ö:ß›ˆˆˆˆÈ¥L!ús¶ÇQ>|€={ö°xñâjÛ^yåæÎ[g phh(#Gެܽ½½ùíÝyxTUžÿñw­©J*IU YAY‚À°“¦Di0¨C«(m :ÓC3O»µãØj3=Ó-ŒmÓ*#BKÓ6ã‚ úH‚ìÃ2 a_²@6’¤ª’º¿?òËBÂ"ˆ úy=O=&uÏ=÷Ü£þñÍùžïÉÉÉá¿ø†ÑìÞÆbd=zô`óæÍ~þóŸ7iwë­·^´PVcÀ|úôi, ááᤥ¥áp8,X°hHË0`»w料¾ÞÜ}®}ûö5ûÎn·3mÚ´fß'%%1sæLæÏŸO]]¡P¨Y›ÂÂÂfß%''së­·š4@ß¾}Y¸p!ÉÉÉ >¼Iêzc1·@ ÀÑ£GÈÌÌÄf³ …xøá‡yúé§ê`0ˆÍf#4«„žž~Éç·”þü—¿ü…“BqË IDAT|·ÛM¿~ý(,,¤ººš@ @]]µµµØívª««(..&`±XèÙ³g³þ:uêDUUµµµÍ®y<,  22’ÔÔT† ÆÄ‰±Ûí;vŒ¬¬,*++±Ùlø|>€€§¦¦²wï^s<ç2 £Ù¾fhXñ]²d n·›N:Q^^Nuu5†a˜ïè÷û[ì¯C‡M¾ 0 ¯ÿ~jjj?~U«VqðàAî¼óNÖ¬YCFF?üáÉËËkvÍf£¾¾Þ,þu®Æ ÑbF‹iÃO=õ†aÐ¥K†Êûï¿Ïž={8vì}úôir?4TÈv»Ý†ÁÉ“'›õwæÌ3€lIzz:999äääðÎ;ïðâ‹/rÇw˜+ØsçÎ%11‘`0ÈàÁƒY¹r%Ÿþ9ÇŽã¹çž»èŠ}ãÑXç*//gÙ²e„B!Ün7O=õ6làÈ‘#;v쪎˜ºœ}ß‹…%K–0þ|FŽIJJ >Ÿ=z˜Ç}-^¼øŠÇ """"ò]¦ ZZÔ®];î»ï>Þzë- yì±Çš­rfåíØØXvïÞÝäÚ•b§OŸàСCüþ÷¿'33“„„|>_}õU³ö]ºt1W{ßzë­&׊‹‹9qâÄ£ÑçŸnìóçÏgÀ€$%%áóùصk%%%_«¿}ûöár¹€†½ãS¦L¡K—.æ¾î–V̯…±cDzpáBŽ=ÊÎ;5jiii„B!^{íµoe Òz/^ÌŒ_ü¦µ‡ñã‹fÞËsZ{"""ò-P-—är¹7n\‹ÇD{ÌÔOßÔ©SINN¦{÷îÜpà TTTPYY‰Ûí&::ú²ª˜Ÿ«qOrTTIII„B!ŠŠŠHHHÀëõvÁ{Ïž={E×ÎßGçÎ £¨¨ˆÒÒRbbbˆ‰‰aìØ±üìg?ûZï$""""ò}¡êÜrÕ†J^^ÿùŸÿÉöíÛ1 ƒîݻӱcGf̘A\\qqqfû!C†˜Ç-_ÑÀív³gÏ,X@nn.§OŸ&11‘‰' ™?>@“Šá lÛ¶… òñÇsöìY:vìÈÔ©Syûí·ÍýÚ…¾bbb5jpé*â‹…+V°téRrrr8qâqqqŒ3†ÔÔT~ó›ßššÊ=÷ÜcÞ3räHN:eþ!à|Çç‹/¾àü#{÷î% qã7òÀðâ‹/rðàÁ&EÉ dŽ÷üŠææµÎ;7¹æóùÌk¼òÊ+lÞ¼™µk×ràÀsœ:uâž{î¡oß¾‘ï3‹ñu7¬~MLŸŽ£FMÿéUõ¬­å'ÞxüßÀ^Í矞Óù{ùí¬Ÿ_ºñ%tì~7m!%%åªûº^Í™3‡Ž;šGBACÊp÷îÝ)**"++‹ììlfΜÙÊ#i{Þ}÷]æÌ™ÃgŸ}ö­>wáÂ…¼:ïEî̾™éd㉿`Û×^‡ÊªæG¸5Òý ÷[]©XÍÿ0(r¥Ž;F×®]U§BD¤m¹[+ÑrÕ^ýuöïßÃá >>ž@ @aa!¡Pˆ~ýúqàÀî»ï¾Ö¦ˆœ£W¯^ ÿÁÍ–®±y¢/Øötù*ÊÏ\¤3Ýßp¿E;¤DDD¾DËUKNN¦  €@ ÀñãDZZ­$&&’ÀÉ“'Y¾|¹YÝZDÚ†0`À€Ëjûô¯ž¹ªg}ßï‘ïÑrÕÞxã Ö¬Yúuë(,,¤¶¶–víÚ1xð`î¿ÿ~¼^okQDDDDDä¡ Z®Zll,÷ÜsO“ÂZ""""""ßEÚÀ%""""""r™D‹ˆˆˆˆˆˆ\&Ñ"""""""—IA´ˆˆˆˆˆˆÈeRa1¹*UUUlÞ¼€:УGV‘ˆˆˆˆˆÈµ£•h¹*ë×¯çæ›ofÒ¤IÌ™3§µ‡#"""""rM)ˆ–oDFFFkADDDDDäšS:·\±C‡±k×.ó÷üü|>þøcó÷Þ½{×äž‚‚òóóq8¤§§ãv»›\¯««cݺuø|>úõëGYYGÅn·Ó½{wl6[‹ã1 ƒ‚‚ q¹\$$$sÁñ›ývéÒ…ˆˆˆfmvíÚEqq1ÇÇf³‘——Ç©S§ðz½dff^|’DDDDDä;EA´\±éÓ§óÉ'Ÿ°uëVÖ¬Y@TT .äŽ;î`Ö¬YÌ™3‡ªª* ÃÀn·c·Ýv¯½öíÛ·öX;–úúzÚµkLj#Xµj¡Pˆúúzìv;3gÎdöìÙæ8 Ã`ÆŒüéO" …Ì@»]»v<ûì³<üðÃfû-[¶pÿý÷sðàA à  a±XÈÌÌä½÷Þ#%%Ål;cÆ 6lØ€ÍfãÁäÏþ3Á`úúz†Îúõë¯á ‹ˆˆˆˆH[£tn¹bݺu3W’»víJ\\œù©««3Û?ž_ýêW„B!222èܹ3‰‰‰¬^½š¾}ûRRRb¶ ¤¤„•+WEÇŽéÙ³'õõõÌ™3§I}×]wñòË/ãt:ÍþSRRˆ§¦¦†œœ³í§Ÿ~Êßþíß²oß>Ün7:u¢W¯^$$$°sçNºvíÊÉ“'›½«ÝngÁ‚æ=ñññX­úßGDDDDäûF+ÑrÅþõ_ÿ•~ýúñÓŸþ¯×K¯^½xþùçÍëñññ,Z´ˆÕ«W“‘‘Á™3g˜2e ={ö¤¬¬Œ^x={öPSSìY³xñÅ›=#,,ŒGy„Ž;òî»ïâp8رc¿ûÝïxì±Ç€†@ÜjµÆý÷ßOÏž=ñûýìÛ·Å‹›}ùý~&OžÌÙ³gq»Ý :”©S§RQQÁ /¼@TT_}õãÆc÷îÝMÆá÷û±ÙlÜzë­üà? °°ãÇ_£™‘¶JA´\1ŸÏGBB‚ù{dd$7ÜpC“6Ï=÷†apúôizè!âââ8uê>ø 3gΤ¸¸˜7ß|³Ym±Xøä“O0`wÜq;vÄãñPZZ 4¤r7¸111Ìœ9§ÓiöñÄOŸŸ4Ûv{Ãòñññfð 0vìXúôéƒÅbá‹/¾ ¤¤„víÚ™ýØl6î½÷^-ZôMLH'Ožlò(€òòòÖ‚ˆˆ´@A´\S«µ%%%üÛ¿ýÛÛ•••Q[[Û仈ˆ3€††”êo¼‘ýû÷SUUEii)111¤¤¤pôèQ>Œ×ë¥oß¾Œ?ž»îº‹N:™©ã[¶l!  ü¹éØ)))dee±~ýzJKKY·n“&M2¯GFFòÓŸþôê'DäûŒÏ>ûŒ§Ÿ~šþýû³lÙ2RRR8}ú4Á`€^½z5ë»S§Nlß¾ÒÒRŽ=ÚäZ]]]“‚c"ß”¾}û*ÃADDDä:¢ÊHrÍ8ó爈‚Á †a\ðÕäþÆ`ùR @^^¿øÅ/:t(áááÄÇÇ …رcãÇ' †Ëåhq?see%UUU@Cªú¹B¡P“4qù~R-W¥qqc |.§ÓIdd$ÐDçææ^°ŸŠŠŠ«Gll,?þ8¹¹¹”––òç?ÿ™ÈÈHü~?………|8óæÍãÔ©S†Axx8½{÷¾’é‘ï¸kD2„ÀºuœY·áªûº÷,®‘»q'Oÿú•«îçÌU® ^ï:vìˆÝn'//“'O’ššŠÓé$66–矞ٳg³råJJKKÉÏϧW¯^ø|>l6ÅÅŃA<]ºt¹â1|ñÅ<ðÀL:ŸÏ‡Ë墨¨¿ßOjj*µµµôéÓ§Óɘ1cصk{öìaĈ´k׎`0HMM ~¿ŸˆˆfÏžÍfûgIDDDDD¾+®yý“©SùÉÔ©×ú1_KVV–Y`êj=ñÄ“x½Þo¤¯ëÕ?ýÓ?ñꫯRWWgî5®®®¦¨¨ˆádzqãFn»í6ÊËË ãp8ˆ‰‰!66–¢¢"Ú·ooöW__Ñç_ÅÛjµÇÙ³g)++Ãjµâõz‰§°°åË—›û™çÍ›ÇwÞIuu5Ðp´P("&&†ššf̘Áƒ>Øì™—“ˆˆˆˆˆ|?|/«s4ˆAƒµö0¾3fÏžMVV«W¯æÄ‰øý~ á,f€ôôtöîÝËÊ•+Y³f GŽ1¯wïÞììlÒÓÓ†=ÖC†  33³Ù³z÷îMUU={öÄårѾ}{>ÌÚµkÙ´iùùù8p S¦LÁãñ˜÷GFFòá‡òþûï³jÕ*Ž=juï½÷6{fVV–YŒ,,,ì›8¹îXŒó«A‰ˆˆˆˆˆˆHKîVun‘ËÔf‚èÊÊJ3ÍWDDDDDD¤-j3Aô[o½ÅŒ3Z{"""""""ÔföD×ÔÔššÊöíÛIKKkíለˆˆˆˆˆœ¯íì‰v»ÝLž<™×_½µ‡"""""""Ò¢6³ ðùçŸ3nÜ8Ž9‚Ífkíለˆˆˆˆˆœ«í¬DôêÕ‹ääd>øàƒÖŠˆˆˆˆˆˆH3m*ˆ˜>}:óçÏoíaˆˆˆˆˆˆˆ4Ó¦Ò¹AÆDDDDDD¤Íj[éÜ c""""""Òvµ¹•hP1i“ÚÞJ4¨À˜ˆˆˆˆˆˆ´Mm2ˆ‘¶§M¦sƒ Œ‰ˆˆˆˆˆH›Ó6Ó¹AÆDDDDDD¤íi³+Ñ c""""""Ò¦´Ý•hP1i[Út *0&""""""mG›Nç‘6£m§sƒ Œ‰ˆˆˆˆˆHÛÑæW¢AÆDDDDDD¤Mhû+ÑÐP`,%%EÆDDDDDD¤U]A4À´iÓT`LDDDDDDZÕu‘Î *0&""""""­îúHç‘ÖwݬDƒ Œ‰ˆˆˆˆˆH«º~V¢AÆDDDDDD¤u]WA4¨À˜ˆˆˆˆˆˆ´žë*T`LDDDDDDZÍõ•Î *0&""""""­ÇÞÚ¸3fÌ //¯µ‡!""""""ß3×]:·ˆˆˆˆˆˆH+¹þÒ¹EDDDDDDZ‹‚h‘ˤ ZDDDDDDä2)ˆ¹L ¢EDDDDDD.“‚h‘ˤ ZDDDDDDä2)ˆ¹L ¢EDDDDDD.“½µ WïäÉ“¬^½€>}ú0`À€V‘ˆˆˆˆˆÈw“‚èï€?þ˜‡zˆ˜˜zè!Ñ""""""׈ҹ¿C’““[{""""""ßi­º][[ËâÅ‹HJJbܸqlß¾C‡ÉСC‰ŽŽ¾à½»ví¢  ¿ßOZZýû÷Çáp4iWUUÅ’%KHKKc̘1ìØ±ƒP^^ÎØ±cIMMàÈ‘#äååQ\\Lxx8ýû÷'))©Ù³×¯_ÏW_}Àí·ßŽÅbaóæÍÔÖÖÒ³gO222̶lÚ´‰²²2ÒÓÓéׯ_‹ïصkÇ 66–ÌÌÌ ¾£ÜÜ\Ö­[gþ¾sçNæÏŸoþþ£ýˆ„„ó÷³gϲeËŠŠŠp»ÝÜtÓM¤¥¥5é³¼¼œåË—йsgFŽÉöíÛ9xð ‡!C†ÓâxN:Å—_~IAA‡¤¤$z÷îÍfkñ·lÙ‰'p»ÝdffÒ©S§fíÞy犋‹˜>}:Çg×®]Ñ­[7†~Ñ9ùÆ­¨¸¸Øp:`DEE;w6"## §ÓiØl6Ãn·=ôP“{òóó›nºÉp8FXX˜a³Ù ‡Ãax<ÃçóK–,iÒþرcFxx¸>ŸÏÈÈÈ0¢¢¢Œ°°00æÌ™c¼öÚkF‡ —Ëe¸ÝnóÙ‡Ã0`€qúôé&}fgg€ár¹ŒÑ£GN§Óp8†Ýn7\.—1~üxÃï÷Ï>û¬f¾Ûí6 dœ9s¦I ,0Ú·ooDEE.—˰Z­†Óé4ìv»Ñµk׋ÎáÀ  ÅOtt´±aÃÃ0 Ãï÷wß}·áp8 ‡ÃaX­VÃår.—Ë>|¸qìØ1³Ï½{÷‘‘‘`´oßÞÈÈÈ0¢££°°0Ãjµv»Ýøû¿ÿû&㨨¨0ÆŒc8ÃétV«Õ 3"""Œððpãüc“öóçÏ7¢¢¢ŒÈÈHÃáp˜sžžžnìß¿¿IÛŒŒ óÆoÎ)`Lœ8ñ¢ó#"""""ò úq«§s»Ýn aÅöèÑ£8¢££¹á†°ÙlÌŸ?Ÿ©S§ší Ù¹s'111´oߟÏGtt4õõõ”••ñ³ŸýŒ÷Þ{¯É3¢¢¢(++ãСCDGGãt:q:|ðÁAdd$ÑÑÑÄÆÆâr¹Øºu+7ÝtÁ`°ÙØN'ü1‡˜˜|>µµµäääУGfÍš…ËåÂçóÑ®];jjjعs'Ó§O7ûX¹r%ÿò/ÿBqq1@·ÛMLL ±±±ÄÇÇsðàÁ‹Îß¹«È)))M®9s€úúzúöíËÒ¥Kq:ÄÅÅáóùðx<ƒA¶lÙ Aƒ())1ïmß¾=%%%Mæì†n  1oÞ<^xá³ýÍ7ßÌG}„Ûí&66¯×‹ÇãÁåraµZÍ•{€ßÿþ÷üó?ÿ3ÔÕÕMJJ íÛ·'//^½zqâĉß÷Ã?4ç422»]ÛúEDDDDäÛÓêAô¹¼^/ýë_ùôÓO¹ï¾ûˆ‰‰Ájµ²xñb>l¶kß¾=÷ÜsúÓŸøïÿþo>úè#žxâ œN'gÏžå—¿üåŸáñxx饗xûí·yòÉ'éÓ§‹…!C†0{ölV¬XÁÆY¸p!7Þx#‰‰‰äççóÆo4ë«¢¢€Ÿÿüç¬\¹’Ù³gãv»©­­åÀ†Á´iÓxï½÷x饗Çï÷³råJJKKx÷Ýwñx<<öØclذÜÜ\-ZÄ„ .¹ÏyÙ²e,Z´ŸÏÇ“O>‰aægèС<óÌ3ìÝ»—””zöìɼyóذao½õƒÆ0 ü~?sæÌiÖ¿a´k׎¿üå/¬ZµŠ#Fзo_žþyêêêØ¾};V«•ÈÈH^{í5¶lÙÂ'Ÿ|Âܹs0`VkÃj'NœàÙgŸ¥¸¸»ÝÎ?þã?’““üyóHLL$##¿ßÏ„ Z|_«ÕÊSO=Åý×ñ‡?ü!C†\t~DDDDDD¾ImfÏb±ðÎ;ï˜û[{ôèÁáÇٵk;vìà¹çžcÑ¢EtïÞüü|‚Á ›7o&77—üü|êëëñz½œ:uŠ‚‚ èСC³g¬]»–ÌÌL† ÀM7Ý„Çãaÿþý|ùå—lØ°ŠŠ z÷îÍþýû …B,]º”Ÿüä'Mús¹\L›6gžy€°páBrssq:dgg3{ölÈŠ+X²d ìÛ·ÁƒSTTdîã6l7Þx#Œ5ªÉjï•zå•W0 ƒ‚‚îºë.¶mÛÆ¶mÛ2d7n¤¤¤„wÞy‡ÿ÷or¯ÕjeÇŽæ¾êÌÌL:tè€Çã1÷)WUUa±X°X,ÄÇÇ3pà@sÏtff&wß}7~¿€¥K—’˜˜HEE4q€nݺѿ, »ví¢¶¶—Ëe^·X,Ìš5‹Ç{ @{¡EDDDDä[×f‚è°°°fAѤI“Ì`oûöí@Càúøãóâ‹/ …¨¯¯oÖ—ÏçãøñãÍ‚hÇcÐç*--å‡?ü!{öì! RWW׬ÍÉ“'›}Í-·ÜÒä»nݺ‘››‹×ëeܸqM®õìÙÓüùøñã <˜aÆQTTÀ-·ÜBdd$ýúõã®»îbòäÉ—,,v)¥¥¥æŠy0lqµ¹Q~~~³ïÚµkפ0YXXiiiTTTpèÐ! ÃÀëõKAA_~ù% Üpà Œ3†I“&1lØ0ÂÂÂØ±cÕÕÕ<øàƒMžÕ©S'zöìÉÞ½{)..fóæÍŒ1¼îr¹˜üðCü~?Á`ŒŒ ¶oßN]]•••ìܹ³ÅÀû›ƪU«xóÍ7™ûl“#¬¾®ÆyˆŒŒ$??ÿ‚Ÿ/¿üòŠŸÓ¯_?Ž9ÂË/¿ÌßýÝß‘€Çã¡¶¶–ƒrçwa“;pà@³~JJJ̕󸸸&×B¡P‹Ge‰ˆˆˆˆˆ|[ÚL]SSC^^^“ïÖ¯_Åbþ/º1Àòz½Ü{ï½f][[Ëþýû¿ösŸ³gÏ\rõµk×®@Ã<œ¿¯Ùjµ2iÒ$¬V+•••dgg³qãFózii)¯¼ò ÉÉɼüòËWôŸþ9©©©Ì™3‡S§N™ßÇÇÇ7i ¹ýöÛÍ=à«W¯fõêÕ@C&ÂŒ3Ç0 :vìh'i+ÚLa1‹ÅÂÁƒñù|8N¬V+@€úúz²²²ø›¿ù&L˜Ào¼Amm-Æ Ãn·SSSC}}=‡£Åóœ/&++‹ÊÊJ¬V+7nÄãñ`·Û±Z­TWWc·Û[,4öM©ªªâ£>âƒ>À0 """¨­­ÅãñPZZŠÝn7ÿ€p!=zôÀn·søðaŠ‹‹‰ŠŠÂn·ÁŠ+øÃþ@NNÅÅÅ1zôhsź¾¾Þ\E¾<óÌ3<õÔS@CšzMM uuuÄMm$ëIDATÇÇÓ¥KHHH`äÈ‘ìØ±ƒ¯¾úЉ'š$p¹\œ9s§ÓÙâ‘b""""""­­Í¬D‡……Mrr2¡P¿ßÃá`РA|ðÁf»W_}•ÌÌL\.¡Pˆ@ @BB>ŸÏ\¹lLùnÔÒ~ëF ¼úê«DEE‘€Õj% ™…Ë.æb+ß—{ÍëõMRRQQQÔÔÔ`±X¨««Ããñ°`Á‚Kîõv»Ý<òÈ#„‡‡ ©¬¬¤¬¬Œ³gÏR[[K»víØ¾};}ûö%22«ÕJ0Äb±àõzIHHÀ0 ºuëföYYYyÑgž9sÆüÙåráp8p»ÝæJr ÀçóGJJ K—.5Û/X°€›nº‰ØØXâããÍ4tÃ0ðx<,]º”Áƒ_ôù""""""­¡Í¬Dû|>6nÜȲeË8zô(‡Ñ£G3jÔ¨&íÜn7;vì`åÊ•lݺ•òòrRSSÉÎÎf÷îÝäää˜Ç[y<óX¤Þ½{·øìI“&1hÐ –/_ÎÁƒq¹\ <˜Ñ£Góè£ÿ—2 0qâD³òvlll“¾FŽi¦„Ÿ„gff2}útsïõæÍ›Ù³gë×¯çØ±c”––’@×®]ÉÎÎ6‹p]Êoû[²³³ùôÓO9qâ„9†Æã©RRRضm[·nå“O>áĉØl6ÈÌÌdÔ¨Qæ1T^¯—ììl3à\'N4÷O[,zôèAyy97ndÛ¶mP__Obb"Æ kvt™ÛífÉ’%üÏÿü~ø!'NœÀårѧOn¿ýöfÇzÝsÏ=?~ü²æADDDDDäZ²†a´ÖÃKJJèܹ3gΜ¡C‡-žS,""""""ÒFÜÝfÒ¹EDDDDDDÚºV¢ÓŽEDDDDDDÚ:;°µµîp8¬&LHèÖ­[-PØZc¹„âÿ\¹6É¥6BûIEND®B`‚doc/image/parameterflattening.svg000066400000000000000000000277021304650273300174750ustar00rootroot00000000000000 image/svg+xml conv1 conv2 conv3 conv4 Network layers: flattened tensors: params tensor gradParamstensor conv2 grad weight:view onto flattened gradParams conv3 weight:view onto flattened paramstensor doc/image/parameterflattening.svg.png000066400000000000000000002214621304650273300202570ustar00rootroot00000000000000‰PNG  IHDRÐúÞî¾ sBIT|dˆ pHYs × ×B(›xtEXtSoftwarewww.inkscape.org›î< IDATxœìÝw˜\eÙÇñï–d[²iH-ôÞkBïE)"JGD@,¯6D, /E@•.Ò;B'ÒLBoéd“íõýã>óÎìfv³É&™-ßÏu͕͜sæ<3›œ9¿ç~Îs@’ÔW­ œžñX/Ë:%ËZyMë¾´$Sºð:ßÌxo-‡vI’¤)Ìu$I9³6ðkà^`$ppP›u6î^Æ} ÞJ~~8n_ge»([¯s=м^G’$åP~® IʩψªèW€ €=²¬³øe÷“ ~ŒèâkI’$åDf€ÎNî#ªey캲؃ý€ôç¶[ŽÛ"IÙ¸øpñ ÜO30c¾¾$IÒ • /#®ñzøp]Æãl`&q-ܲúðdò(ϲü¶dÙ¿º°îdÑ1 (íÄú¿$ýù¬¶Û%Im­œTǫ×rÛ¿•ìz`𭇂ïÜŸñ÷­Hïž$B{êço·yý{2–­™ñüîÏŸñü@¢#`"P“¼§W“×m{ÙÒÏ2^ãKÄPöÙ@#pëÞ÷þmÞÃKX?›õsßMÀààÀŒõ ‰ï“'“eÙ¾‹WÏhËÏçÇOóàSà* pJÆkÜLOÚõb²ÎÀ Àû@-°øøp@Æk•£“‡#$I½Fêd¢8™øò{xžøÂØ’ø²¬éâ¾¶!¾” ô˲|,qõë.î§;™TwrÝ-‰ÏýL x…µH’²[üŠ8Fÿ–ø.hêp 8ø;qðÅDhª&&˺šU¿%®¯I»éÀ]¯±3êv~œü9Y¶1°=ðž÷K^"°~ìÌJž< LHÚ³†g%¯{xò¨KÖßx™øþ»1yígˆÉÕvîà}Ÿœ¼¯¿?"‚ø½¬ßžkˆï‰ñÄ÷c1\¾øc²üòä=ÌIžILævK–6- ¾Ï?Ož+$:Ö#®Á¾‡ß ‰ðþ*ñù½Ÿ¬¿^²íÄçñwà"„øLîOÚõg¢³%øw2ø1ðxòZ© ÿ’$õx© ôúÀÇÄ—ãÀ‘Dïó1ÀƒËqo'Jíye9î«'z›èÑ—¤•íE"ì &‚Ø×—°þh" šü¹&°'„Ï&®­KT<'!65YÙäñäÞÞ6IÚîžÆUÚ}2ö¿71¡ÙH"€B„Äû׈QO£ˆ~D« Ú¼w’çk¯»ß…yí¼ï ˆÀüKbvíÿmgÝÎ8„è¼^/y/GŸÿùÀºÉz×&íºš˜=S>pº·#:½!*ñƒ“m~E\N4ŠøÝ¬ ü¸Öïõ#`PAõݽˆ|>Ña°7p0X…øý|3Ë{{„ø|$Iê5 ‰¡w£ˆÞíÄá_’å÷·³Ä—òÁÄ0³u‰/ÑyÀ DïôgÉzEÄP±M3¶½œtPlLÚ14ù{YÆþ^"=-8ñú*°P@ôœßJ okÉØî\Ò·d¹œ¸ÉNDu÷íä¹ YÞW1™Î1É>ò‰*Ç­d¯0'.ÇCèf&ëõ#]åèHqb´51\¢²Q™ü< ¸(cý1ÄIèÖÄg5…xï%†O¦Kœô@œT~ Ø—8aýˆšŸ­säâDxmb(ä<`21ïc´îÙ8 Ø‘¨zÌ ª×d´¢ƒæGÉÏϟͱÀ:Dµå+ÄçöàkÀZÄïi.ð&qö­¿’–¯¢‚x#†nîè`ýs?ßžÎ#ýôhÒ#о›üý?Äñ bxõ1m^oW"l¿H„ðûˆ ö21´¸%ù{Q!^“¨€¾NàM€m‰cýëÉÏS“×¾9yìI÷ Teì;UùKz´ÕêI»S ‰ãì–DP½ø.úwŸÑ’<üœÅ;üñùCtL ¾§‰Î‹M‰N ˆŽ… â»øe¢Š<„Ñt0ñ]¾'q,‡8§ŽçýˆülÆþk‰Ï{3â8 1 û%âû|‹ßòlñùeÚ…¸$©3ß…’$õ…DOöuÄ ÍDpØô0°l^$‚Ø›¤¯…ú‚¸>êUâKÿYâËùd¢R1•8‰IÝd5â:¹…D/øÜdyʆ@â„n1ìo(fÇá¶‘¨œ@zÈáaD˜ÿ>Ìî"NF>"zù"‚hj¸D`¼‹è¸-Ù>/ÙÇ/’×9‘ô­HŠˆ°\D ý[“ôI×Nt~8zêwðiò9 KžJT.JÞëåÉûº–¨Ö'‡%ïå@b8 ÄÉh9ñ{üð(qõYòZ—øÒŒvÜNœ”ýx—ø,ˆN‚›“¶¼—¬{|²íŸ’íJ“}ïJTt =,pqâ;!ùœþC\ë¾ø\W!~§ýˆÏñ×'ïñâwREüÛÉ çýˆß¤®{žø¿¿)ñð-bTR6_"‚×›Ä-©2«Ãó‰0÷*QùìŒqıî¾äµ$Bß+ı`=â°9ìž#f :Ù~¢£ïëÄ1ijú¥yžeµ"w$:óR¦Ç ÌK•f¶ißo’¶ó‘Äqñýxa²Ÿ”k‰Û¿'Û|?y>õr:éIàö!¾Ã¶$¾/ÖH)/ÇåG‰à› §Çé¹ÏÍ ~¯Ä÷â5ÄïêEâ˜<ƒÖCó_": =Ä^’¤¯5{U¿D›Fz¶ÔÁíl›GºÇÿ}â tâKù$âddýäuÞ&*Žw!w*éÐó"DœœBú^¡®dÿ8¡yˆ]“ˆp·9ÑS ðC¢§>å¢1—µ‰žû'“öü=£$Ÿ–ìã‚dÄÉÚˆ–ÿ!=\ ©ÉÖ^!®/[¨ftÖ¢ÃáQâDt!éjrªÂp.†Ï%†#Î$ªÃÛWÁýZ¢"’ò"ê ˆ¥QÄïs.qàx¢£`q¢º)14ñƤM‹ˆð»­¯ËÞø=q}yòšáù:âDóâßFê}ÌHÚ󥤭ç$ïaÑÁRGTà/#>Ç:âdoC¿ÝZñoµ£Ë$-›ŸÇ¢£ˆcöÃYÖHü¬!ŽùçdYç5¢2<ŒÎÝ2ñ"àþ„8&lC76#FÑH„ì}ˆcÕ¸d½³“í×!ŽC›&¯ÕÖ›DïûD¸Ï ÐÃ‰ŽƒŽÜGÏŽ$ŽuÓ:ñž–ä0¢Òÿ8q<œžæÒò÷.÷"ª»ß˲N ž‡ÿ‡Ûóqüi;ûu6µDè.'íñıýȤ-G#ˆRúÖd߯%ÛÇôdïÀ\”¼v-‹OÔXÞÎ6™FÇß#ˆcbWô"Káý‰ÐœG|=Këë“kˆãõ~Ä0õ£2Úu,q\M+S¿£uhÿw4šxïmï~ÑÞgøg"?@|#u11,~gâûA’¤^«3'5íù&q²ÑÓ½Zòz…ݾñÄuºË23i[GUÑcˆðº€kƒ‰úq"0¨Z¼š±ígÄÉIEò÷Z¢’°+q²² "*Ð_%]EÆ>*“÷³Q%Øš8Áû1)˳´¾žúödŸËkæÑ’÷¸-Ñi11iÛ@âóþÑYñ(QiΠП¿ƒO“¿·C2O#N”×Iž¯#N¸>"ô|¢£!5ûkjX`ºÏIžÛôuó‰êó9Ägp0­ô§Ägò׌ç>&~C“}ŸMTÒ'3Sˆ*GJ=qÍ Ä‰Z3’–·_#F!BtÛÎÀùDðšF„ÉmèxŽ‚:wwqDX~†è8»€8}´#Ð ˆïœñ¤;LçÇå)D¨lkÍdý-X¶ë–S#qÎ':£õwÍÒú21Lý@¢ú} éð» ­/¯Ét-ñó}¢órñ}|7ºSæ#¬¦¥Mt¶°“mn&†_M ûNU¡KHjº–Ž/ÿ’$©GëJo?"ðü˜¨ $BÝ<â$h.é‰Áºjs"¬Ž&*Ÿ%qDexÛdÿŸÐú/ˆ“¦Imž›CœhÍ&}ÏåÌ}\”e['Œ©}lHÙ‰J@[¯fi˲ڂ”×a§Ú–ºõÉñDgÆ',~â8Šößÿ,ÒïÿaÒö—ˆŽŠ/ˆ¼Hÿ[Iºsa­¯‘#Ù6uýä†m– &*ÖmÝC狉N¿%ûþ'q’™©¦Ÿz ¥åïC"Mëy)RˆÿËÛÇÔÚ>¦#FZˆjhªJÜ^˜N ÑGºr=.cÙVÄ< O…ã2¶@tŒþ›Ö“A ‰>˜8fîLë—ÖEÄðïo—ô<Èâ“f-ÕˆÏgb’ÄÌQ6GÓ~¨}Ÿèˆ,$}¹ÐºÄ{˼îûE¢³ó¢£w*ÙG tn‰|bÄI[Ÿ%¾w$¾ïR£°¶Èxû&m;ñú’$õËZ^‡¸vödâZ¨¯•Ý*âÄh*Q1.èr Ã@"´M"Bo6c‰ksÛ^sUÌâ·†j!*©?3÷1‘Å'IÙ8øqBVEѲ¬ûéÉÀºj`Ò¦zâD+›ÁÄpòÇÛ<ßÑûÏô!QŸ8!¾8BLLs*QMOÝçu(‹Ã'yn¢j_ÖfÙPâsiëEâDì~¢*~q‚8‚¨@GŒ pniåùé ßȲü"TžOüŸý)ªsjìKTH!Ž! D‡[5ÑQy éaÂoÁpB²í;ÉÏ;>¦#† ßFÎ'}¿hˆ*ëuD'\Ñ!wq¬þ=1Bg'b$ÌGKÿqÐL\žò"@ŸC }>ŽÖA¾³>$ê¿M|uÉëJÇo]›ì?59ç·h}·ˆ¡í©p=™8¾^BT»œ'²ÛUýŽäßO&û‹èŒ]/Ùþ>¢Ã6õ½°;Q©ž–<ç} %I½Â²è㉪ÄáÄãÚ¤‡H‘,_žæákC¢Â™­Š q¢µ¬÷’Níc#bò”öfW½‹¸ÎwQÝžA½¶Fý¤³+m+#BtG·{¯ƒeKòq²µqÒü›d¿'·Cù1${í¿ï‘Ä Ó0Ò3‚§´w_Uˆ—;‰‘ û'-DçÌÕDu¼½Ù€%-3ˆÉ»N'Úæm–ßB|œ•¬sjCxß$.=Éô8BO'‚[ QU¾Ž˜«1Ùfñók"\B\޳ˆèLü€è4|'ãµëˆëµÿItžLƒëˆcÇøäý´ÔŸDZ 1_ÈÅD‡ÁYÄå*'“ž¼«³#FÑÜ@TkŸ':_#¾ãÖï`Ûû‰IÃ~Gt䮞¼^['Õú_¿—ß$¯[Et”>Cܱ³š‰‘ ß"*ç«’¾»ÆöDe:sXûsÄgþ#$Iê%ºR~U§“ÏÁ+[•85qK=1 I[5Dwÿ,Ë&½Ùÿ!N0Ú›Ù³½ gg¼¾”ûx›89ù513wæ­Zú³Zß¾ûïèó™@Tn &4k¯me,û-ˆz¢ÂðdòüaĉíÅDe$u]^ qBÖvÒ²Cˆ†íi¿££­!DØ®!&§IM`v&Q™þ1ìòN"„¯›±í'X™–ºbS¢ªš­óí÷ÉóÛa7ó’‰bdÈ/‰JèËD'\ѹ¶/q\Ë<6þT·Ax>1‹t¦q¤ç¡˜JëA㈎¼oá¯íÿý;‰ïµÛ‰;q<KLB–ºu¦‹éør›¯ßM™3{ÿ˜8^]üý^b¯Žæü8"ioªcu.Ñép#q¬ü'qLÝŸ8¦#.¥É6;x#1„|Û¤í7ÐzxÊDâ»è:¢Sâ9¢#aQéÿ!Ü3¿³ÏLÚqe›×j!>Óß¿ë'ˆ ¾q ÎàPZÿÙ—¸üéÓ,m“$©GZÖý9ñåû_â„äMâãhàÄ—ë[m¶IMìòq"3ŽkµÄ»©Ä‰T51 õ{ÄIÂ"¢Òñ1ÜídÝ[’eÅDãÛĉÇÈe|O·'H‡'&S‰jke²­“}쓼—ˆ^ÿéÄ0îÓ‰ÃBℬœ˜X§³2?Ÿ#ˆÑ:â3z‚˜|&Q©¸œŠ7;ÙßúÄpÈÓˆªO—öÍ!y=â„ðqâ}ç%û«&N¨R·¤º+Ù×UÄÊc‰“Á]ˆ‰mö#f9ÿN'÷}1¼óÄõ‹µÉûNœ eî»”úø ¤ûã} ¥e5‰è8„Ö¡)ó‰ÿש[)Õ´YÞHTbÿ—¹²Nòü Dç×ä,¯wñÿv Òódd^»{#é°ÚvËÄq¢BžÍmD…vb¨xqLŽôq$åÇDdŸøêNâh}gˆ!Ó÷ÃÅ¡ããн¤ƒ{æ~Æ““íM+‰àú>ÑY Ù/…D%ýĤ [dY'e2qùѦÄöáÄ1ôâsμÖúšäyXüÒ¤&¢ctñobÑiû:ñ»nÛóñ]Ÿ¤L’¤noYôCÄ Á!DˆJ];õ.q’Qže›TÅú|â¤åìd½Ïˆ‰_^ Bà©DEw âÄæa¢Ò{%Ñ‹~2é ›HÏý(é™eñ!àþB\ö]¢§½1ÙLJĹÔ>šˆY ÿN„ÉˈP[Ht4Òñå¶^ f—þñùœLÇ/ˆ‚3ˆ@1ôqbÒ–~ĉdæíÄ–Õ â³½‰®eÄïô'D°þA²Þoˆ“Áï'SÕ‰ ¢“áâwòt'÷›—ìû—ÄIcñÞ_%ªW·•”jâdÓû@K]SMë;dÓ™ë…Ðñ¥%mÕ`ŸdY¶°ƒ6ͦýy02Uv²=/aù’ö×Þ¥>mÍeñ S‘½­Ù>ƒµˆãþ7ˆ½#ñÝ7½m˜ÄâJ¶5%ßžkq°$óYò¿-I’zœÌ½5Ñ£ü@–õŽ'ª­)ˆàü8n!*ah="Tf^|Q¸‡eïá«$Yþ{âÚª¿=Ù™·X‚mUDuá)¢÷¿¨¯OôÄ·½þùWdQ­Î'*É™ëW&ûx’týˆ–Ô>2¯ïº…¸þûŸD輟øœ'N¿JL¨ÕÃÝ$*‰†Ôçþ0žÿBœ´]AúÖS£ˆÙª§'íO9™¸N;› ˆÎŠTuå ¢òÿ ñ»€ø|×&>K’6@„݃ˆ¡ÕÕ§FbÁï’¶×f›$íi{Mdjß;ubVDT˜ï †f^O^D|æËk’:Iê ^ :ß$.JÍ!I’V’T…tubˆDxËìUß’˜X b†ÕÌÞøÍ‰*ô:Dâi¢2¹w²ü#¿Þlu"Œ®žì­+•kÃîRÁóSbR•”aÉ>·"*¤³’u¥õµr{e¼Æ=´¾>,5k(Äð³¶UU2öQÚÁ>R6'†¥L–ßOTXR·üx¾í²Y•˜,mu"àWC¸SЉ¡ì;¾{ 10sÝ6¤'¡y†ÖÕ¡DgDN…ÓÔu‹ëÃü*ˆ ÍÝd¿¶¼ˆ¸FzGÒ÷„}’ÖŸç^ÉÏ'm­›¬³n²ï9ɾhÓöBbˆ{ÊÝx ´¤¾a éãçNÀyÄ((I’´’,ÍcI’”;‡£Žª‰ŽåÎ g—$I’$I’$I’$I’$I’$I’$I’$I’$I’$I’$I’$I’$I’$I’$I’$I’$I’$I’$I’$I’$I’$I’$I’$I’$I’$I’$I’$I’$I’$I’$I’$I’$I’$I’$I’$I’$I’$I’$I’$I’$I’$I’$I’$I’$I’$I’$I’$I’$I’$I’$I’$I’$I’$I’$I’$I’$I’$I’$I’$I’$I’$I’$I’$I’$I’$I’$I’$I’$I’$I’$I’$I’$I’$I’$I’$I’$I’$I’$I’$I’ú¸‚\7 †k%?×ä²!’$I’¤¾«0× è„½€ß«ƒ€yms“?çdy.õh^é­–$I’$õ*y+zý‹‹/è_ZzÜòx­ÆÚÚùµÕÕ{#€‘À,¶ËVùÉc:0#ãïó³,› Ô/6K’$I’z‡^îWR´É~g|s£í;´K¯S_Sï÷?¤žÆýqòè¬Z‡ë¯œÑÒB-´´×ÒÒ’ÿÿ'yyy-@K^ü­%ãï-G^-ÍÍÍMMMÍ»ÿÅÐ-I’$I½ÖJÂ=|ÝuØ`§ºôµ••]Ù¼&yL&[žý­c¿ú“sOËowµu,¨¨Ì«¨X”7köN•º®;[ðeÙªD¥¯3³–§–Í%ªã’$I’ú8´z²Ìëº'tr›¥ Ý«Ãè:{»°éĽºëºúæ$I’$u/hõ5] ÝÙ‚÷è,ˆ3‘/Í}º§]}s’$I’V´´d™¡{b'·i{Û°ÌàÝö^Ý#€5ˆ{n/M螎3´J’$I+ZZ1–×½ºSÁ»mèB„î":îÔcÖ%I’$-´Ô},¯Ð ÞÙBwê‘-Xw¼gÃÒ%I’¤>Ë-õl˺‹¡´_íÞ,˲Õtþ>݆nI’$õ:h©ï©%ïòÝ©à=6Ëó«·ëì}ºç³ˆYÏ%I’¤nÇ-©3–%tCé¶· K=6ömóÜp Îß§{>0›¸¿·$I’´B %­H©À»4JÈ~ŸîÔ æm—­Jè¥ Ýsˆ .I’$ušZRwS|œ<:+5™Z¶à=:˲ÌÐÝÙà=—’.I’¤>Ê-©7ÈœLmB'·ÉœÁ¼mðeÙ*ÄõÙKsŸîi@]Wßœ$I’º´¤¾*3tOìä6Kº‡3‘·WÕîŸ<¾”±l*PÑÕ7'I’¤åÏ-I×ÕÐÝ6xú§g,[haéîÓZƈ6xlîgSƶטÃ~ôƒÛ¾zÑï´·ü';ùúgoOÜ¢½å‡Ÿûƒ[ùåÿmoùù;ŒùÆ”ÿNܼ½åGœÿ£[ŽúÅOÛýìÎß~×oL™8©ýírÞ-GýüÇínÞ¶;?uò»›µ·üÈŸŸóW~rþ¤¶?aêäw7Mý½¹©©©©¡ab²:I’ÔÇ %iÅêè^݇èL‰êõªÉŸ©Ç*À†m–­’üÙÌm¬k(ß`§Ê Ê€¡CØp—ÙáðôË—”<½£Æþü©Çh¬kÿRï’òßêhû_<½ÄíÏèpûgïÒö>ûä’¶ÿöÒlöèkjò;ÚF’$õhIê~%O—b›2`Ø7\sCsSó~‹æÎeѼ/2rWÖé)80âû2êuÛ%IR´$õU@Õûì½ × ‘$Iê­ì[—¤Þc“³ÖÝhÿ\7¢79éÊËDZô÷2—$I½”Z’z¼æ¦æ¼\7¢7ÙóÄã½™$IúhI’$I’:Á-I’$IR' %I’$Iê´$I’$I`€–$I’$© Ð’$I’$u‚Z’zIüxÒ¹nDoòË=÷ßœëvH’¤îÁ-I½HAa¿–\·¡7ùäÍ7FŹn‡$Iê Ð’$I’$uBa® I’ú„1ÀØäçZàʶE’¤ebZ’$­hC_Fä¶9’$-´$IZѮƫå¸-’$-3´$IÝ_?"|–tbÝÀêÉ6U¸¯¿´&†oÃWÀëK’´Ò %Iê¾þ ÌÞæSiêÊ“ IDAT«€ÑëßÞfo$ëÞlÙæ5÷>J¿nos€u“uó€ñɺ«diãðdÙGÀ³m–•î$B´$I=šZ’zMνñþ¹nDorÒ—#Âk.ü¸øðSââß“om ¤~×yÀ­À‘Éz—$ëþxx’Í)¥À§ÀÀùÀ@àRàj¢Züoài`мÿ–íGCÉç´ûn%IêA Ð’$u/kŸ“„M&†m·g à3`¢úÛÜfù$`=bH÷šYöóY›çšˆ!×MDe9åÀADàþ:1‚­QÕ~ØtxCç)Dp¾¥ƒöK’Ô£8„[’¤î¥h$†E×vrÝ"²_«]—,kdñïü"(wÆÄdd[¡{ÿdû€íLj™¼NîÎ!&,Ëì¨Iþšñ|‹I’º%´$IÝËL¢Zü11œº#³Ä0ìµ³,_—¼©aÞ]qqmöMÄíÂäço´Y·8)Ëk4•À1Éßï̲Ž$IÝ–Z’¤îå3 (!&ãÃâ·‡*"fÛþœ¨à6$ënLÈXï$àa`/à•.¶ëqbb°7‹“ç.#†‘?•±ÞëÄ ÜG·Ù¾€>ЏíÖýÀÝt ¸+ùùE œ¸…Õw€_³sÿ•¸Ÿó…ĵÊÿL%þìüø°MÛÔÜZŠõ%IêV¬@K’Ô=Õ÷P¾؉¸çóBà}¡s‰!Û#ˆY±K‰Šók@}›uVK~Î6Ë÷º@íÏŒ½'àSmì¬Z¢2^÷,Iê¡ Ð’$uoUÀÓ\wðàÖiæw°|I×{W'¥Õ²„ýJ’Ôí9„[’$I’¤N0@K’$I’Ô hI’$I’:Á-I½Ç&gÞx¿\7¢79éòKŸÆëv%IRÂ-I½G^Sc“ÇõåhÏSNœÊÒÍ4-I’z1O´$I’$Iê´$I’$Ià} %©gÊ6vvÖÎÉeƒ$I’z;´$õ Cˆ°œzìÌ^N¨®¨(ºç7—°ÓW¾Ì›lÜzïýL4¹ÝåKÚþ•{îcÚäwÛßþÈ#Xcã–yûú #7Ú°ýíÿu/ÓÞ}¯Ýå»}$#6Ü Ýå/ß}Óß{™·—$I}SÞŠÞAÙAÿøÆï/9vŸÓNîÒëÔVVròÐõM EË¡Y?=ÿN¹è׿8«ËCØ[[YU³0g9´KRß²1ð"0´Íóɲí€1ÀX`Màm`0x–ЙVÍÏÏÿ>ùùyÅC†üóŠÙ³ÿÛÞŽ¿SRrLccãæí-/2äÎËgÏž¸ÌÛzÇå³fMê`û¯666n¶¬ÛŸ]RrlScã¦í-4tè?.™5«Ý‚%n?lØí—Ìœùî hº0/¯¹½õ¤h °(jrÜIR ´$å^9°#”S¡y>ð˜o^–ð:sš››Bs3Õsæð­¼ûHoëhaUW·Ÿ={IÛßÚÅíoéháü®n?kÖ’¶—$I}Z’V®Ìêò!Dxž¼CT–¯Nææª’$IÊÎ-I+Ö `ÒÕå±ÀDuù# Š¸¾ÙaÂ’$IÝœZ’–ŸB`#Ò×-oŒ¢uuù$`^²þÆÀž%I’z´$-»Õ‰êrêºåωë–'Wo`@–$Iê Ð’Ô9ÙªËk¯ñ¯Ž!&ÿ’$IR/d€–¤ìF!9[uy<ð;`Ð’«J’$iå2@Kô¶¤õm¤†Ñºº|4° W ”$IRî %õE©êrj8öVDuy<ðV—%I’”…ZRo×¶º¼P ¼N Ǿx¨ÎQû$I’ÔC %õ6#i=Ñ×ÖÀg´®.OÌYëV¼ýˆûJ·ç :ŠÞÕí÷w°üq bnqïíö<,\Ší€{;X_’$õ!hI=Y° éáØ»·ŒJÝFêBâæšµo¥;þ¸C¯ž÷Å‚í-¿ìâÿ™½þzk5´·ü»?üÝðO?ŸÞ¯ýí8{ýõÖlwûs~pÉðϦÎhwû+.ùÑìÑ£Gµ»ýw¾ñðϧÍlwû?üþG³×]§ýíÏúþÅ«M6³Ýï¶«.=oÖÚklloù™ßûíjÓ¦Ï*hjhÎ÷ì«ý‹Û[_’$õ-hI=I¶êò»DH~8ø8g­ënüó/«[ò(ï`•Ž–qÕ¥ç-inõåçwiû?^ñã.mM·ÿó~òÿ?/ª¬føÚ{Õ-é%IRßa€–Ô] rªº¼'ÐHú6Rw×1׿¨}’$Iêc Ð’º‹Ñ¤+ËÛC³'“®.Ÿ |š«Æõkß}ÿ¸ò#¿¼O®ÛÑ+äçç1hЀsçz÷2I’ Ð’ra që¨Ôpì‰Éš2«Ë¯Ÿ]:[ýå¯w­b€^>ÊJK˜õñSÿ[P¾}®›"I’º ´¤•!³º<Øx›Ì7§³rÖ:I’$© Ð’–·râ¾Ë©êò®D%y<1û.àU >W ”$I’–…ZRW“®,Ö¤uuù`N®(I’$-/hIKc°­‡cÏ'*Ë€[€Wˆë™%I’¤^Å-©=٪ˣ€wˆáØ×'ssÕ@I’$ie2@KJY Ø‘ôm¤Æ_®._¼4窒$IR. ¥¾©؈tey;¯.ŸÌËQû´l>ÝoŸ]CíÕE---¼:a¢Ÿ¥$Iúh©olOz8öÎÀç¤ï»ü;`2V—{º·Ïýî s[b"7uQeU {pê¹À¹n‹$Iê ÐRï“­º¼ð1û*àbò/I’$Id€–z¾‘¤¯[n¯º< hÉU%I’¤ÞÀ-õ,ý€-IW–ÇCi]]>X«J’$I½•ZêÞRÕåÔpì­ÏˆÊòSX]–$I’V´Ô}´­.ï¯ñ/^ªsÔ>I’$©O3@K¹3’Ö}e«.OÌYë$I’$µb€–VŽ2`Òñ÷šˆÊrªºüP“£ö©wXû_<]þ•Ã÷Îu;z…üü<•—UÌW‘ë¦H’¤nÂ-­m«ËÛ÷Y~x8ø8g­SoµÕµ7üsôòQVZ¬OÆý¾ |û\7E’$uh©ëïSÕå=FÒ·‘º‹¸Ž¹6Gí“$I’´ ¥¥7štey °q­rªº|.ði®'I’$iÅ0@KlEz8öÎ@QY~¨.¿Ô媒$I’V´ÔZÛêò†ÀÛÄpì›Ó€Y9k$I’¤œ1@«/+'ª.ïJT’3«Ë¯õ¹j $I’¤îí¾¢Ø˜tey,°&­«Ë§srÕ@I’$IÝ›Z½Õ `ZÇžOT–'·¯×3K½Å§ûî½óBâß¿º¨¥¥…×'Lô³”$IÿÏ­Þ [uyð1û:àd`n®(­$oŸ÷½“æ¶Äè uQeU »pê¹À¹n‹$Iê Ðê‰Vv$óvD`þ‚tuù:à  9W ”$I’Ôû ÕÝ‘®,oÇâÕå‰-I’$I+ŒZÝÍ`{Òñw>'*Ëãß“±º,I’$i%3@+—²U—×^#†c_CLþ%I’$I9e€ÖÊ4’Ö}mÅâÕåI@K®(I’$Ií1@kEélIº²<(%ªËˆ°ü<° W ”$I’¤¥a€ÖòÒ¶º¼5ðQY~ «ËÒʰö½>3ðˇí•ëvô ùùy”——-œ7¯"×M‘$IÝ„ZË¢muyw ?QYž\¼Tç¨}R_µÕ5×ß¹ªzù(+-aö'ã~WP¾}®›"I’º ´:c$­'úÊV]ž˜³ÖI’$IÒJ`€V[eÀ6¤‡cï4ѺºüP“£öI’$IRN Õ¶º¼ qŸå€‡€ó€OrÖ:I’$Iê& Ð}Ëbøuªº¼'ÐHú6Rw¯µ9jŸ$I’$u[èÞm4éÊò`3âZåTuù\àÓ\5NÒò÷Ü ÿ)[u­½ªïºíÒG÷Ümûùí­·í˜cš2eæö–ßóËÙmÌvíÞfnÉÛ_ñÈnc¶iû]¿zД©³ÚÝþÞ;¯xdì.ío¿ÍÎÇ{«Ž>dúŒ9ƒÚ[þп®~x§¶¨hnn~»½u$IRßc€î=[‘޽ POT–_ ªË¯u¹j ¤î‰ÆÆ¦uæ/XȾ‡œ>hè`ÝU‰Ùó³Úë o.iûáÄŒüílê,b„Ë2m¿ç]Û~·}OîÒöcö9qIÛK’¤>ÈÝsµ­.o¼M Ǿ8˜³ÖIÊ…Z`Z'×ÓÅ}uõøÒÓ·—$I}ºg(v$˜w%*É™ÕåW‰Š³$I’$i0@w?ÀƤ+ËcQÀ;¤«Ë§Ðõê‘$I’$i) so°­‡cÏ'*Ë€ë€7€æ\5P’$I’d€^Ù:ª.'ÂòÉÀÜ\5P’$I’”zÅZ¨.§ó®ÀL¬.K’$IRc€^~ HW–·£uuù*à«À¹j $I’$iÙ —ÑŒ™s™ðÆ$êë »mωÊòxàwÀd¬.K’$IR¯`€î„ÆÆ&ÞÿàS^xù-^xéMþóæd¦MŸÍöÛm–Zåzàabò/I’$IR/d€ÎbúŒ9üçÍɼøò[Œé Þ~çÖZsu¶ÝzÆì²5ç~ÿD6Ùx4yyy 1¶±¾¡ñq Ï’$I’Ô«õùÝÐÐÈ;?`üKoòŸ7&óÂKoR]SÃöÛnÆvÛl¹ß?‰±»nÃàAsÝTI’$IRõÅ=ØøßϽ–·ûþ§ðÖÛï³öZ#³ËÖì³×Ž­ªË’$I’$¥ôö]JLîµ]òØè,,(,à‚óOg×·¦¤¤(—m”$I’$õ½-@¤õm¤¶>#fÅ~Š˜{"ðÓÝvÝö¢}öÚÉ2³¤\Ô纒$IZ² _¼ónZZZò€r`!PlCå1À@éÛHÝ•ü\““KÒ’}¬™ëFHêÖ<‘¤n¤Gè–æfÞxôqš›š ¹Ä½•S?ÿxøðNîZ)IK­˜šëFH’$©szF€niaê¤Éäååµ´´´ü¨Ú4›ûß'NF'ôS¾ÌÉIÃ%I’$I½FÐù\üêxN:¢±©¹ùªŒEµYu$¨7Kþ<ؒŃõzÕ5µ+¾á’$I’¤^£Gè¥0=y<Õæù¶Ázïko¸+ÿ–Ûb“×e³MÖc“G³ÙÆ£Ùr‹ Yu•!+¹Ù’$I’¤î®·èö´ Ö?ýÁwŽ¿èÌÓÉŸüîÇL|÷c&¿û1wßû$ïü÷ Ö’$I’¤VúJ€ÎjäˆU9bUöÙk§VÏOŸ1‡¶Áúíw> _¿Åƒu23¸$I’$©—ëÓº=K¬«kj‹€÷‰ë«S×XOÞ&n·%I’$Iê ÐK![°Í-©« Ö’$Iê Ð’V”lÁºX›Õ›cÓM0XK’$©›3@KZ™š€“ǃϬ%I’Ôí %u}9XŸ \ëFHê¶^ŽÍu#$IÁ-©;k/XkÑ;‚u9ÑFC´¤¶öÈu#z°AD'ìªÀàS`^.Ô y%EE÷ö/î߯¾¶~RM]Ý–õ…JJŠþØ¿ÿuëëªjjkYž”ú2´¤ž¨‘Þ¬¿^Ëu#$u;ëæº=QYYÉúõ+<§¶¦nÄÈ‘ÃkV6¤eAÅB¦N›U\XXøÙÂ…•§ÏåºíÈ«©«;ü§ç“˯¾yý®è¢þý¾|Þÿœ¼ÆÏ/úSC'7œ™üü!ð¯eÝ·Ô› %õ&½-XK’–RIqÑ!§tÄÚ£×ŇM)˜9kníjǸߘÂù ntꙿx¤¢¢êHàñ\·µ=••Ëç+hß½vâçý©³«*.êÿ«ƒÜ­ßsã'<;wÞ´”…ZR_`°–¤>¢¦¶¾îŠ?ÞV]Z\üïù _æäçç¯rí wŸyæéǬr×-—–yÜoXTYµf®ÛšEKYiéM½é¾¢ÚÚúÉ+{祥%õÇí~ÏŸ°²w-õhI}™ÁZ’ÚWTRT´wIYñ¨úÚº¹•Õµo÷3Û¬;8zР²] òòVV×½W__ðz›õÖöN~~è_RTtlIYñÚ5UµSjêêþAú’–Bà”äçzàÆ,m,NL~®n©ªª> ø¼®®¾)µRss3‹*«®ùßn›ñÓóN£¹¹y``nïÿH`ÐühNžßØ3ùù=àÙŒmVK~¾1iwÊØââþ‡–­×ÔÒ¼¨¢¢j¼ák•ùK{ÈËËË/(Èg⤪ïy`Üå55uG'ëTZZ|ÇþûìR°óŽ[–566QYYÝø·›ïû^]}ý£•ßê’uwZcäð? (+Íûð£Ï§ R¾úé§U2jáùsæ|Ñtõµwž^[Wwyeeõ@ã€egn²Ñ:}ðágÍ **ß&Âb¦CG\íòK ?›2ó¡êêš[€OÚyO ê,XTÜÔÔ”ŸÑ¦¬”•3zôš‡þùô¦•ot”––œ³ÑkŸÚÒÒ’÷ÉgÓ?¯¨X´a²Iaÿþýnß}ì¶¼øò[•ÕÕµ×%Ï\>àÁAƒnqÂq_*-//+ÈÏÏçɧ_9ú¹ñþ·ººæ`à•dÝ<àÚöSýò«oO©¨Xt_ª=Çõ¿þäã+X{­‘E3fÌaÜ¿_=nò{W—,+µÆêù“ßûèÊúúÆVº¹¹¥`@YécÇl;`Ÿ=w0p@>ùÂaO=ýòUU5;“«í½Þè5/üò¡{毽æŽ<|ß5š[Zþ`ü oôûôóéßÞ-++¹­°°p‡¦¦æ¦ÊʪS;ú ¥ÞÈ-I·´ÁzSbæWƒµ¤žd²Òâ篽úg'Mþ°á’ËþVŸ——W[WW_¶új«4 _ehÑgSf”'ënUVVr×ýwþ¡ìÏ7Ü]}Á¯®©/((¨2x`þM×ÿªìê?ß~ðøß¼~ᢪR/¾ãö›5®³ÖÈ’ëþ>kµF¨»ô75µÐÒ¸ûØíêÿýø öØÿÔTR}?0¡ººæÏÃWzéûŽ)þßn=½²²úŒÌ†<ðì_ýâ̲ß]vãÂêêšëh­”¨P /)*:s½u×,xvüŠ‹úX[W¿¨£¡²ªæá5G­vÐ.;mÙÿ¯7Þ³_ccóëýûòµc*^¸p—^yËZD•z°Ý¨5Vk<ü=¾6aâÉËô8°ì¹“O<|ƒ5G­^pÑoÿR_[×ÐÜÔÔÔÿˆÃöλþ?zúÙ=QU]»)0 // ò­²CŽ<;?£9Û••]ÿà¿®.½ð·©üë÷6Ô (+í7|Õ¡«®³öµí?¦è¢‹ï;hnnÎßpƒµW{õõwjÆ=ýrCqIQ㟮øqÉ®;nY|ñe»iÁ‚E{|ôñ”â[ïx¸aì®Ûpóí•eûLЋжþݯ¿»ÁÕ¾cÑ[ï¼7¨£ÏOê­ò—¼Š$i RÁúAàwÀ ÀöÄ-ªÆWÓ“ŸÿÌIþþ$p1¤q,õ„E’V¦Áƒ^ýãžZöÊkïÔýñÚ;þS]]»AUUÍÆÆ¦¢©Óf0sÖ¼ÇˆÛ 2xðÀ«/»ø¥wÜõXÍãO´¾¾aHMMmùôsŽ<ú?ª¾òÒóJóóóŽ6ÎÜGaaaaUUMÁä÷?úU}CÃÀ††Æ²^zó—]ysÍ÷Î:®¸´´äD€æææ;Æ=óJá—Þ­°©©é8 ÆË ¯­«ßyÃõ×fÊ´™ÀS™û(-îM¿~…³JJЦX}ÕW¿tèî§o´áZEgœóë V~£ÅÓÏ>?¡pÿ½w)*/øåÔ>ëêëGÌŸ_ÑôØ“/Uî¸ýæuÀ^É{ÚïàýÇ?ôÈó••ôë—ÆöÛnºÎèuFüâ××~¸ ¢r›ÚÚº ƒ~ä¹ûï{ð™ê3¾ytñ€¥?[ÂïäòK/þAÉåWßRõÊ«oÝR[W_^UU3dÖìyGÌœ5Aåe¥ím›ŸŸÏ‡}öÙ_TìÐÐØØÑ¢ªí¾ýÝ_Wvèžuu ;C«5šêV6øY¢žz\Ÿz½iÓgS[[[ЉÏOê• Ð’´ât&XW÷(m¬¯$ªØc‰*Š$­ eÕÕµû{Ì×ÿýžæ…‹ª¦&ËZ€—êêëîÖT×ítÀ¾còn¿ëÑæÊÊšoÕɺçåqÛ·>ØpÒñ‡÷+,,luâµ×É!å/ÕÔÔ_B ¥n¬­­ûõ}=Ӽ٦딖mž¬ZQ\TôÄ+¯½Ó²Ù&ëµ§^£°0ÿøÃÞ³ù®{Ÿ¬onlμF€¢¢â~_=ò€~—_òÃâ?^~~ù¾wRñSO¿Ò˜OÞGİå%™šŸ—7ÈàTVVoET³÷³óÖu>1¾ò·&—ì³Ç,; ¼¼ìËûî½Sÿç_z£ð4@YÙ€³~~Þ7Ë~ùÛëj-ª:‚¸f ¦ª¦ö´y6ï¨/ï×?¼¯tÐŽ’ªªš]ÆŽÙ6ï©q/7W×Ôýø~xr@YÉÝë®3ª%Û†ý 6tPÍÂEÕÇ# &÷ëWøÀ3Ͼƚ£V«e)n—V_W÷ð5×ýó©9ó<ÌèìvRob€–¤•/3X? ¼DÇ빬%­[¬¿ÞšÕŸ|2e%“ùí¬×lºÎ:#k>øð3JKŠ'µ]wÑ¢ê{Ÿ?¡jÇí6ï7¨¼l×ÌesæÎo®ªª~ºÍkN«¨¨,±úª4·4¯‘zrÁÂEºæº»*Ï8íèòÁƒËÏJ=_VVöí“O8¼ôÆ[ïo¬©«»¡mVV=~ïÏÜtîÏ®¸ùôïüê™=8µêgç^xÊI_ÞbPyÙSm×Ïú&›[{ý‰-®·V-°kyyÙ¡{î¶ÝÀIï~RRVVúAÿ¢þyÄ^%••Õ›(+¥_¿ÂÙÄ$k••U£×½&ó¾X0 ¼|Àsååæd<>oll,ê߯rÆŒ IDATªêšU€öªº¬1rxͧŸM§¤´déN *V>6ï‹ùY/ ÊÏÏcAÅ¢BÒ³Åg³°úƒiÓg·¬1rx0²3ŸÀ¢ªšsgÍž·ß_TDLX&õ9^-IÝÇòºÆú?´9Á’¤NtpyËô™shin™–eùŒiÓçä :òò†f.XP±¨©¾¾qA›õ›ZZZòòóóhii&ÇM™6³a“Ö¥¶¶n,1{öýû®^[[Gyï·ÝySSÓÍUÕÕ7ÇߪÖøÅoþüö3^?ôÁGžÝ baÕnÀó½ÁEUÕ?øÈóGrÐîe~2倖ö+ì×/o`YéÄEU5Μ5ïÇÄ äÇn²Ñºµ¯¾þß~M Í&›êß¿_ccSSái'AÒîÅÜÿð¿ÉËËkJÈ~ì0p@ióÜy hinš•eù왳æ5n¾é‹-¨«o ¥¥ÚL˜ÖÜÜÜØÔÔÜRXXæi©øF’º¿Ž‚õúÀæÄLàûg'ÏMÃÛŽHZ:U V±Úð¡äåå/©2Y]YUͰ¡ƒ!?ox–åÆ ܲhQ@‡v-ASssóßîº÷És9p÷æ{÷õÒ⢠O;é+E×ÿýžÊŠ…UìäëLî|þÅ7¾½Ï;~üÉ=[²„ üûµ×ÿ[üãžRxÕŸÿqR~~^ù´i³êUUÝW_ß8î‘ÇÇo¯Ý·Ïð‘ç.<äÀÝ<øès‹*««I¶­ª¯o(,-)æo7ßרÔÔ|ÙöUßÎó +V毶êPòò³þNV5rx¿%¼¶¤åÄ-I=W#Û†äB`ೕÞ"I=ÝÄ÷?ü¼dýõÖ¢¶¦f3bÒ®ö‚Ý{}<µdà ֦¶¶nÓ¶ë÷ßcûm7-~gâ‡M••ÕºÒ¨ššºn¼õþ3oûÛÅ¥O=ýÒwVýÒÁ»^qõ-…ÍÍÍwd¬ZH\ Ýœíuúö[}ÈàÔ76´L„¶_—VŸ¿AcCã°÷Ûµö‘Ç_h¨¯o|˜ðùçÓûŸôÊxøÙ»Ù–Ë®º¥„ô}¡ëJJŠçΞýÅê”Ö/¨¨¼ŽèíH¶Ë+?˜1snñZk ªºv`1ƒ<¢¼|Àò¸¤§±©éÿØ»ï8'Š÷àŸÝMvÓ¯Ò;RTz‘f”"¨ EDA°¡blˆŠõgýbTQŠô*Ò«t¤HoW“l²Ùþûcs’;.ÇQäàxÞ¯W^—ËìÌNvƒÞ“™yFc8ކbBâ 5ЄRòhþ wG!—,§ÀoZ±j“yÓM9·Ûõ5€ØÑÍ$Ã`­ûͰóö};þÞ‹–Íp?4æ¸êÃ>;pÀ=ŽQc¦I²¬L?Ï~íbÀìWU 6»­\­«ª`ý_ÛM‡ ÌGL0  ¢ÝÎíð8òîl`Ð Úµ¹¹æÎ_iX]”˲»ª Ø?¶Û¹Ï ë‚Ëå\8sÎR£G×[Ç9@iNŽãú¡Û÷í?Ê彜ÁÉP8—JM‚ªª•7ã9Àív,x{Èn·ÜzÎIÈe‡hB!„ò¯lðÉgŸ{_zîé¾îVÍëßãr9ÓSRV%''ìtü1Ÿ×=ÖÖGðûƒƒ<õvèÍW÷V,_æùÄï¾””„5N§°mÄϹFŽžª‚¡MVœo¿üÐ?Œž*>Ô·‹ðø£=¼_}79˜~™ÿ8»/ßæ–æïÛl\ŽÛåð{½î6nÕ¢Ágs§éþ¿FÊY^"&Á’$yËÄö·µr0 àr9× š;'Gœ¶çŸC‘>½;3K—ÿ¥…Ñßcë†$éÿ~™² P*5™{¸ßÝõápr²oWJJâ:Ÿ×}Üírþ]¯N­'½nO¹Bß»?8xøÛ_K÷öìèêÖåÖŽ >÷~ž·çÔ«Sãó²eRô`PŒ&+pཨ ·Ûu(ÇDÛ[š'Û8.ìpðaAàC°v‘€Cp”š:écW“F×êÈûÅ !W šžA!%LRù²«UI.0Y úm›u[ß/³.ž¨\ã5Y %Å+$É÷wîþôÏÜw‡ý®Î­ÝÙ9 Ã@’"æw£~“ ån›47(†Þ¸½ëÀׇ<ó€Søj²¬TKðy0vÂ,qÓÖ݇‚ÁP·ØÆwî>ÈŸLÏŽ;ˆ3fÜÌ_7 câÂ?V\¾\)nÛö½¹{?/Êœ,+L¥ el£¾yÃ&ðvŸÇãÂŽ{m÷ôyAÌÌlÄ.§Ÿ!®åÛÿÞë¸áxC¬ûk‡â÷§ÅôiÑ´™¼Ý»GŒ›8K‘ee^¾ºY¡PøÆ†}¼ QÃÚɾ3Ècšf-@ÏÛqâd¦6qòA v{eÝÔPHú§rL0ÿ.o㪪ê’,)  ;€{““{2ŒY†9Kk%Ižk÷`Áþ¡`l²*ï“e5ÿÔîD]xž¯­(ŠÀž·uzv`Ÿ—¶ÿý4kî²ÇŒöùyÁn¯ hЉ(CóµÓÚçñÜe˜º)†¤`íâ«<€ÛX–­êq¹’ ˜¦(†&X+ö'»P#z¾Å©}­ ¹bP}ž(€&„œ§ @ÿbFÂÚöŠœ§ôƒ‡ð\ÝÆ@“âRÜ4¹„0 3Í4Í‘fáÔ—M=nçâ3¿õÞÚy€ I5ae'„üGh 7!„BÈ僕à+1æ‘”ïù XÁ¹ ‚ýÖ2¥So=q"ƒq8'4MK°Û9ç7Ÿ½êøâÛ‰ÇÍÏ„üç(€&„’¥ûONìÿÙˆâîG‰àMIF«Þ÷L]ôÝÈâî ¹2ä~›( k¦JAAqìà @Nôû<÷7÷¹ôºi4nx × ^-—®kÕ’“‘dãå៉é9›ñáâî#!W   !¤dñ22¸âîDIáðxðØ·_¬¤š‘V€›ûpðZ¼G)Xk…³cNXÁqÕèïÇ`í#œ]Àãж¯1¹L)ªzíÔßµ_´dõ v»­"À@’äá°4ÀÂâî!W   !„BN)jÀ›ÿ‘ ÀÄ©€V‚•L* /N?û]îègþ‹7J.;GŒ Bô!ňhB!„”$ç;¢? z‹g/Âû#„RŒ(€&„BÈ¥äLpaÓ¢KÃÅ=›8v¤ø8¬QdB!¤@@B!äBŠ nÏf p€TXëx㿹Áîñ8å´˜BÈŠhB!„äw!ÖÇ[|¶ë€É%Žçù—œNáFUÕ´pXzÖtvòßkc³Ùnò¸uLÀ[ (Š*Iò}BÅÔ·ËŠÃÁ¿*B UQ´°$÷e¬'… šB)yÎ%Î-. k-/­&EâóºÚõ»ÿÎÖ_ÿ0Y†õºUp_ôùüÇY±¼žo<½{õèàr¹œ,ÏŸú“¾\ÙT xêms Ÿ†u/¾ÎW挖À“Îñ— ·ÛÕá‘~][}úåx€PÜý!—6   !¤d™Üï“ÿ½ kOXržÄ¬,|Òóþ®~¼È§¦uÀ„\^ª–JM|£~½ÚÂÚõ[¿Ãÿe]ÇÎÛîûéû·Ü]{ ’4Ý!ºt!Q’gOùÜÎqœq>“9á{ºµóü6}Q–(†óÐ.»Ýöv×;ÛØ/Y».#3ç² àú–ðå·“h 9#   !¤dJ—2Š»%…±gÍÚVçP•Ö“+F žÿýè©’iBƒõù¼"•/WJºãö›„µë·þ×§jtóM1ãgJ`x˜a礦$®ÐäBœäÉÇzá·é‹ ,ãívíÁ¾]l‹—¬½§"ä²B4!„G(;ºaØ´óÈ v x$ÁúÉ)à‘óüH¾×cËèKR\„õ÷¡ `$Nÿ,2Ñc8X_ÔŒRå/EQ²¢å‘Ú¬Ãó¶.N§«ØZ ZgÆDXkÞsÛ| ëóÿKLÝæDŸ¯öƒ5MY0¾ˆï¯­ Ø;º]®ÊЬf‰áðSqúÒƒÜë`!˲÷û|îë ÃÐÐ"qjˆ·€;s+*Šz €GcÚš ëß;`Mîêq¹ná{r(>$Ëêl‹‹Ð÷Twh_­JyçŽû†a\s®9…Ôe4ÐÆëqÕ´ÛíIbHÚ¯(ÊlÆWÀº®Û@U5!ß{Ñør Kr©|å+l‹ù½!Ïów¹ŽkLӌ䂫aÝß,äu6×;¿‚Î1 ÖS r›Ëå¼Kì©¡Pd‡¢(ãâW˜¾°¾,´ÙØû=Wc]‡ Š L å«Ãh  õîA®Øk²˜eÙ{}w°`sr‚_Xëÿ9yÞVÏív]¥ëz8­0§ç"hëß,PÍåîBJ0(nÒ4cdL‚Àws»•E1´[Q´, Uôðz=µm,ë G"‡eYÙ`N¿Ç%ЄBH»V®‚‰¸ ÆéAð~$ç€Ö“Ë”Çãì]½Z¥ÒÒ2´“éYûqúZÞSR?«T¡ ·wßáuA1<29Ñ÷Bݺ5[­^»Å¦(êlœZwË'ú<£XŽër¯ÛíU«Và`ý†íݦÎXü®¢hèºþÓçu?ߨÁ5•V®ÙĪª6V`‚¤$ß'U+—odš&ö<þ»ßèm»šËéøºÎµWa÷üAñLt²ÏçžS:5éšÞ÷tr Ï2 0{Þ²Þ7ï IíøÙlÜ×·µm©.\¼Úäív­sÇ›øÍë»8–ůÓtÛ¸y×°`0Ô@ŽÓ)Ü{u­jzÞ}[÷šèqwû†€YæÎ_aÏÈÌ9+€®ïv;ç5it­»Ãm­¼¦ ȲbŒ›8ëÑôÌœm€Ø ñƒ>¨äq»>írgk¥eó\õj]ÉÉ ½ôš·`¥==#ûHœz‚Ã!*S:Ùyçí7 ©©I¼×ëFNNPÿyÂŒÇ33›A±€ €šI‰ÞOîêÜÚLIID¯í9]7>€»÷óë7ì`ªV.otîx[¡|itïzkiðÊW¯Ýbÿgïá—¢×Ñ™àÇÛííúÜÛ™¯P¡´a¬X¹©ÇìùË>$¹¬ ˺Þ÷Ím·¶T.^mðv»Þ¹ãM|Ëõ],súõŽy_®DŸg¼]àoíÛ»3_¾\©üçè`~Ìñ|‚Ï;-9Éwã#vu˲Æ>’¦Nž:ÿ…@@<«ÿf ÿE›[š± ­² ‚]îÜá&¾fÊŸÏ‹ÉSæß³s÷WƒÁÐ-8:á`ì=ðù<ÈÊòëc'Î|<+;°Ñï;!ú¹ÏsM­/ص;:Þl¿¾eC×”é‹Ô?–®Û`·Û[Úlì»7ßÐDiÖ´®×á—Ë+7õœ9géGŠªõÑu}jL·;\]«Úë`ÈLÏÈóDoç¶íÿ„²”SÉ‹¼žI­Z6h×ûžÛ]/½ú™x2=Ë„ ¦y³ºÆ¤1xîèå1@è€uªfÌi}S“'Ã’$®Û°ý&X£¶B($5êÞõ6e¼ýþ÷mcºÒ¦c»ëu_‚—ݰñï™gx[¬Ïçž×ï¾;ë7i\ÇöÌsïÉŠª©†aO?~ÿøÃ=Ë>úä[KCa©€ `À0o¾ò¸{μåhÒèZcî‘ߦ/TS’•ŸxÛ3yêüª¿ü:ÿþ`è!M3Œ›w v;qºö±fz èCi—Ëùç_ OX¿a‡òæ»ßÊ,ËÊ~ÿ9ÏŒ9^7kβoý±7dç£ÇþŽîÁOcg8`´æ’:æüyÂL­óí7a̸®ÎÇ$ø<3ÚµmÙêöö7:^zõÓpvN@7M“½å¦ëŒñ?¾ë½ÿ¡a¿…BRsÛ­@Q¯÷¿çðzf¶owC‹ö·¶t }í³pNN@7L“m}s3ë› KÍì¯ÇõE«–õo~â‘{œý¼&E"Š¢¨ªóº&uík×o=«äw,c}>æÎ_Æ ®±MŸµD³ÙlY0M׈÷ŸsíÚ} Ö÷£§Î ÄV°fspªª¥Ô¯“÷¤$'¨ð¼gúÌ?šÍž»ü[@¼ïß“D¯ÉÜù+ÌNmn4ÿ\¾>4é·yË2ØX¶rã†×ïÚ¯.ücn·Û$UÕœ]ïhƒß'êîÒkÐÏ¡ÔÀ?¹MvêxƒíŸ½G”«6VAzçÑ*ÇqæKCú±_|<4áá'^_åt:ØÔ”DåÃOFk,Ë=ÜÃüuüGî÷¿09 —‡5²~kR¢ï±ï¾xÕõè“o‰'Nfjv›M‰È²çêÚÕL†aë”Llqw€B!„\2fnÞº‡mÙ¼#G”Û3]€[–•»ZßÔ”]·~`Z!í´ñúÜ·ÐËõØSïd9zâvEQŠªºÖmØþ¿—‡.Žxï9WR‚÷S$iîŒ9KÅÎoöºœBÇh-kV¯Y¾r£¸ÿÀ±ˆÃ!j@R¢÷®í®wÏ¿B7 ãL »î¬\±\íÞ÷tä>û¿Ø<Ž$D"J寿ÿegf–ßìÓ»³Ûív¾’¿"˲رsï&¿_¼VÓtþÄÉÌÝz‘†<ó€QÔ^ ªê 7ʲ¯×õ=¬à!÷1ßãr¾öPß»\i'2ŒïGÿ¶=Q*…Ñ„œœ`«O½èwÿB…re®Щ÷±1ÚÞ0†ªª2€ž1ç™]HÝ£³æ.{-,E**ŠêTÕ‘v"£Í#O¾™Óÿþ»Šªu…5E|)ÆáDðx\YùÞ‹@ª¦é¤¦$®ËWþ€»Ê–MiÞ«{çSCÞ;yâdf[EQªªy–/ÿëÛ÷Gü(¾3üIgR‚÷ß{7Æ^ïî÷?޽ÞQ]Ë•/u]÷.mO?÷þ‰'3[ËÑs,[±á‡>#¾õÚ@gb¢÷ƒèñU Ó¼ÿÃw»z=𢔑™ÓA …“E-µeëîåN§ãœ‚=Ÿ×M[wŒD”j¢NCRƒÁ/ý/§Ë­ùÒ¥’ëhwêhóè¬yË^ K‘ ¹÷àxZÆ­?ñFÎC}»:U»@Jþs0 Ã,Z²öŸãi-MÓ´éºÑÀ&YUåÍ›wÍ8xèx{MÓ’$û4MOœ1géØ?#>óÄ}‚Ç㔿=A°»²sÌž½‡SU͉ȕÿ÷éØŒjUÊ3•*”åO¦gÙwí98DU5·,+eüyúAEQQµRY@+p8ø[z «ë¹¡#‡ ËŠ[ …“4MwnÛþϰFªKl2J   !„BH.Ùnã&Κ»\»ùƦ€î1e][4o -X¸Jçyûo($aXb‚÷ñ—†ôs¿÷Ñ(¿ °,Z¤G"Ê뇞H¯Q½BR¤ €e[·ÿãlÕ¼>Ëó|'p8øö;ÜàþsùzûìyËÔÛZ·`´ÀÈŠrs­U“0‘w]ôi’}ýž~â^ï;ïÿ ÊJ䕘ãOÅP¿·ÞûN8àža˜ûbë•)›ÓÐÝ8µþs9ÏÛ·îÝw6Ç¢€€§@ Óëчºóo¿÷C$õéõß›dEþŽŸ}ò>oR¢÷Á"µwv$]7ª†1ÖšñV°ÖRW‘$iéK×k ë×–\w!N–œœ0ðåçö¼ùî·9¢î k­.¨’,¿°ýï}âuMê°!Iº€=·^™Ò)°qœæ½Þv›mû¾ýGò\襤„'‡½ð°çw¿ ˆb¸€uÿžC’ŸÛ²uO¸E³zl8i ÀƲl×w߯Œ8Keæ'œú<ƒbè!]ÓåêÕ*žÕûôx\ðzÝR0+©#ì‡#ÃÞûèGñ©Çîñø|î>Ñ×únT&|pêT–$iéâ?×ê êÕ:í$%ùÀóv5 u‡5ZoXàOÃ0^ÃÒ]6Áúb©€Û#ùÏE¬v¶¾©©·ÛÚäïw™Ò)p¹„qº®ƒ5š|RŠH?,X¼ÚxäÁnLb¢w¾ªªß"šË#?Ÿ9{©T¿~mÀU`³Ù|>7˱,X–-ƒS³4Ót]o‹:} )Ü„B!$FP ûݨßz}ùñPÏÚõÛžÊÎ Œ€ÄDßS=ÔÝûÜË#Ä@0ôMá­˜ÍohÙ˜yåͯ\ë;–eól…K¾cÇÓQ¶LJäÐá´ÊvxÜ®Y©/+Jy¥\NÇ©)I6;ÇÈÈÌIhØ ¶kþâU]²²üË|^/ûϾÃp8…¥RD.t¤Ë„Ù°i£k1ìõ/ ªÆ¬|Å›ÂRDMðy ªšÖˆ{ÂRv»MT5Oò$Ó4;žÞ¬L©y_èHœž¬)¿DMÓ¼· ²¢ÈÈð«ª:cåêÍo {þaLÃ3´u.LÍ|>ÏhÓ0+U­ZN®P®4k³Ù8¨X¡ [¹RnÕ”¹'Sdµq‹fõ±{ÏA¯×ëÏ0Lžû#…#‰YÙxÜ.=Kñ—A4ÁZXŠ€çí¢¢ª‡òtÞÄcÇÓ¯+]*YÞ:Z@¦¢( ›_W{þ9äñzÝ :GŽ?—Ëi(ŠZ:ÁëiѲYÇøI³sD1œÊÿ»Ë4 £ÂÙ¼OŸ×ƒ´vX ¹þeÆüµmÇÐçdl—›ÝÐÜçóüXð=(ËT®T†[½6ï=x¦iª(øK"Öãq}®ªÚCeˤ¨•*–5¼và8NKJôqª¦ŸöOŽ? ¥¥±¯išqôÈÑ‘R¥’x¿_\’¯ÊñÃGÓÔÆ ¯ñ(¢ž÷íÈ_ïýí¾!CG¼±nÃöw=×Ö@ 8Yӌɰr„”X@BHÉÒýÇg†$öÿôÅÝÁ›’ŒV½zL]ôÃÅÞšbµ^’¤L¯ÇåÑ4½6€êTUQë—.•@ôÃʶ—ªj ¾zt½Í+3ýi¶nßI’yX#ÐCÒô?þ\wÍõ-Ê ÿXÓ%’jJ’lè¦9Ë媘¦Ù>’®gY¶]‡Û®çæÌ[ÊÎL?Ó›Ñ4Ý“˜äCvvÀ‰S#…ÿ{úñ´ôDǥʲ’ˆh †`ç¸pþã ÓT4M˱@Ñþ–ö¹=.5íDÏó¶ŒÊgeûIÉ>hšæ-B{g«žÇãœÿÉÏ{vìܧþ>ëOeÝ_;Øp8Â&ªT.¯ ‚ÀÂ>o²¢x\Nî¿·‡8#ô«×n¦i6Dï=`]o› å?Ö4LUÓt°, XÙß!ËŠÇéзwç¸çX±jtMãxX—”˜àÁ±´ @Zþcm6Û‰´´Œ³  3³r`·Ù"š¦çÏ~<;ÛïHJJ€¦¹K ê¹ÝÎùŸ|ð¼» {PµJy]xùîÁÉ“™p |Ž,+§?!Á3ñú Ú÷ìÖÞ9á—9ê–mÿpA1ÄêºÎpǾòâÃ0 Óž¿^vvP‡•0.–®iºéÏUÃ0ò뚦›6›Á©Ïû´ãié:w{ºwÿ¾w9žö»ªjMç.XYwÒ¯ó†ƒÁû¢~³ˆ—ò²C>ñ1 IDAT4!„”,Þ@z:WÜ()ûþ«•@“+M(,ùÓ¸¯÷é݉5fÚƒ†¹WøyâlI–Õ3Œ>ÇETUóÿeN8’Fãô?ØcEQæÏš»ìéÇéîûcéºW6¸ZZ°xD1<@¹Í[wßP¦LŠ‘v"spû[[:ŸxöÿÂ(ÂöO6Žˆb¯[ÎÉ $#_­ªzbJJ"$)ÂáTñ )‘d.99šj$Pžâóºå¶q{Á÷ÑNLð õ¥®I“ç—¯Þø{(ùÀ1"˲ÏyÜ΂â…{Û6'3 Ãû»ªªÚ—(|W‚3ÞÇ9‡MfYÖþãÏÓ5MÓ?Cü-® ËÔ 1Ž 9)Áœÿ]7’S’ º5ñ%&x¡jšÖ’ØØÄo)^[…Â6޵îgô8Çÿ2'¸jÕ¦é!)ò9¬Ï¡È²ìón—óàô"†iLk‰«hÿ þ®;{<“†ž„5µ;€a³qi ÿÅw1§øý⣾úüë ½FŽžÚ%ŽT½³ÓÍúŠE£Ýº=õ¼(†W ßè|IA4!„BÉCÓ´Ÿ§ü¾è͹ӾÆŒŸùÃ0jïžwöx&¢(Êè3Õ·ó¶¿7nÚYºÎ55”µë·ÎêtAÖî?xThXÿjF×JíÚ¶4>øx´+!Qé‹V£g·Ûøo~øµ\¹²©P5-`ï™å8n×ö{+Ô®YE[³nk Xû>çªd膗a†©á:š¦éàX,Ëäÿû:S7 Ífã iZ¬½–cƒøV×^}•¾mÇ^p·ëÏðnhÕúÚgEUBL@›às·ªZ¥¼íø‰Œÿ9ôü ~^¯×5º€s”±ÙØ×ívûXÐ4cƸI³•Çîîà8n¬/1N§ð¦Ûåà·íøg#+ËÃ4Ü^¯ûCœ VÝ>ŸçÝ!O÷õúij03;0 °îß/Âåvhjæ¶Áq\HD¹¾ {p™™™ÙfjJ"ëpØļîöùÜߨlœ;;Û·òù²Û¹Ñ6›íu ÏšílYVÿ8q"Sãyž±ÙØ¢l±vY¢šB!„œ&;'øÅ7?L x¨‡û±‡º;¿ùk0;;ðEQêêº>~מ{W­Ù¢¾=ü‰²n·s[R’ooJJÒÊÄDßAAà6kZg¸Ïçº6¶^Ž_œ>ÑêH÷®·rYY~-ŽÌÈ-ãlìB]7p{ûì³æ,ýñLû?çöeìê5[þ€höéݹ¢Óé8’šš´ÜëuiÒèÚwÞ~3ÿ·##þ€øÚÙ]¡<Ž…Ã’Y­JyÔªY¥>Çq²ÃÁ‡yÞ.hí÷‹¯½õÞw‘nwÝ*Ô«[ë¯×}$55i¹Ó!~ôÁneNœÌ2×­ß–ÍŒ|AE$eÞÈ1ÓÂ_ò²Óír®*•š´<)Ñ·§LéäÑe˦2YþÓØš†¹q銿Œ÷×m6î¤ÃÁ‡>ì„OÀãvþsôØItêpƒÛÆqa‡ƒ ð¨ª߯۰ãèþÇô¡C¬ìr9v'%ùö”JIZ™˜è9äøC^ûr‚Ï]ë´Î‘ªªß­^»åøñ´tã¥AVÉsŽÏa‡ÀlÜðÚ¡ >wn°ºYŽ(kÇOž«¾6ôQ·Ó)ìIMIü#!Á»·tjòÃbH:§m¬23sP¶tÊõ^ëHjjâb·Ûy¸g×Û*‡B’¹iëî¿Ö=õóïá¯>&¸\ŽÕ¹÷ l™”Ë–Me2³ü…MA/È–öæ®k\WU«tcB‚wJJÒJ§CH»ªZ¥ÇÓÒÏÜÂyðù¼5Ö¯=Ôá$%úö§¦&-INNØäñ¸~zqpÿ„/¾™ ¡©gnéòDS¸ !„BHAflÞº‡mÚ¨kÂĺ Û8äþü¯©¿/†‰Ä&,Ò‚ÁÐm?ü4evÅòej¿õÚ@/o·W÷Äê Ȳjü2e~HUµœØv ÃX8mÆâ×{uo‰¿ÎUdY™›[æ÷‹3&Nž{ç-76q,[¹‘GÖ?GIb(|Û“ƒß[rGÇ›=ï¿õŒ×¯w»8vü¤ÖþÎ'²¢ögúôOcgÄi˜¿hrrüBÌKºi϶¾ý‘Ï»tnͶ½¥¹MU5ÛØ‰³"ÇŽ§Ûü‰(};tyâ§'Ü+tïzk¹p8R.1Á‹¥+6H_ÿ09=’Úˆå ­^»…9ž–Q`Ò¯I¿Íƒf%ψáðÿÍ™¿¼—¢hå>ñ’ûÈÑ׫ªŠ?–®¯\½YÞ´y§ ùb‚ðå·Þû¾íM­Ùžö^× ç_›þƺõÛ¼’,#;'8ð¾_žÑ±ÝõxqHFU5çüE«´M[v9ÈÁ`¨õÇ_ŒW³z¥*ÿ÷ÆS^g«‘ãÖà8ápĘøëÜ"«yî}a×{Þ•ù¯w$ ßòá'?ͯQ½Råwß|ÚÃ2l @¬Áq,B!ɘøë¼<çðÅ{¾ý~òšÛÚ¶(ûň¡îƒ‡Žß’™™ƒÙó–‡TUS›¶WTí,c#FÏÌök½ï¹½LjJb™*•ËaËÖÝÊÀAïæ„ÂRGD§j‹áðÿÍž»ô^UUË~1b¨ûÈÑ×+Š‚?–n¯Z³YÞ¸y§Ý4OOøUÈ5 *ŠúT»;ÿò­×w«šîÉÈÈ® JÆc¦F†3næiïeͺmlzF¶PPƒÛvìµó¼­À/<&˜&þ-ÓMµÙ8møË\ÇU …¤ªš¦Ax£ÿcÃCIþÀü]®ÎéÛ–³áNJ˜pÿïõjûpÿój'"ŠèŸ\NÑUµÀ›~–†½4äÁ7ß>ð¼GàËÝCReœÚÏBÎÆ MÜw¦‹¨ÿõ÷öüü™ñcܨ½+óÁŒ“²ˆ‘âÐÀn)®8ö¾¼Mh Š&oŽDÔÓþ-Øí\?§àl¨ªª.Éò›bçŽ2îHLðöá8¶®n˜;Ç“dy«(†µ¾Y9žþ]ÁÎ Ñö†áTPYÚít¾Äq«hJf$¢¼u–oÇk³ÙžHHpw5 ³ Ã0AYR‡$écœÚw8ú¾ùwyïŒ(Ê1EQ>ˆ-ã8®›Ûé¼Q×u#$Iÿp4¦¸&€Ö-Z^@›­ær¸ ˜¦(†&ãT†vÀÝI‰ÞûX–½F7LÞfãŽE‘ÍbXškݲ{½eU=*Ëò‡…\ï`%@CÌ9º%%&ôfY\c¦³qÇ#áÈ&1,MŠ=G”‹çùg=WOÓ0|,ËìËÌòa·ÛSœ‚P/z݆Ÿé^8Bpé‚QžÖÉÅð‰‰Þç0õX–•#’Þ  YôùdX#Í©´|Ç͆•u¹?€¹š€hB!— šÂM!„\ºÜ~ð5¬ y€ù°¶­é `i̱e¬ÐÖ62s£Ç:aÑ=óµ=€ ÀËÑzÎh/aíÒ±@è±!OHðZýdŒ€ÜµÍŒŒÓƒç\áè±É(é!„Ë@B!—®aíã:Öˆ°@ÖHt6¬ °Þ_`îðþPÀw˜ àX ½r𬀷?¬½p+x À«Ñs¶5âœàgӢljiçYѶçÃJ–‹P/ú\ÐÖºèG| ûY^B!¤ØPM!„\šnÐÖá³t°*ZƸ @§èïíxaVφ5-úÀ·°¶}Ü•ï<¬à·2¬éàel„µÝÔG°’ùü ¬éÙ}¼ÓÆÑò|—¯ýr°FÄ·Â ø÷À ¿ð¬éâ„BÈe¦pBHÉÒíÇg†$w'J OrZõê1µ˜NßÖÚåÇa««bÊ X#ÊG¿Öèð3þ+x¬µÆ/¸ÖÚå6È›õ: Ö(tîZê°öVö¨}}L´‰°å\žèùWÀ]þ½€÷•8,w úaŽhÿÈ¥§ ¬ÏÍ‹ªs_!ä’B4!„”,¾@z:WÜ()œ^/ûþ«•Åtúz°Ö!×CÁI»b]`KôØ¥ùÊ2aMÝ®kÚuõ˜2Öó®|uÒ`íßœû°¦woP*ú{‹èÏî–ÁJ4ö NM+Ï• kJy6Ö(öã°FÔûÃJ>F.!.§³K뛯{¯l™Ô×\UÜý!„K Má&„B.M^XësÙÂxamu²€òtXS³Ñvs9a¼F¾ã XÁuîÏ\£‘wºöêèÏϼ wçDËb 𠬵ÐCae'—Žín@0ޤÈ(î®BÈ%…hB!äÒ䇕õú(NÇ€5’œ+PοeUYX‰½£íž«)>ð&€9Ñçu`MÿVPôõ̼k„½öyô‡\x½TU­ó{'5¢Ï5£bÊ\îr¹œ78>)–˲2 §Ï‚¨ eôùRÁÞÍír•CÒ~EQÆÁJv—Ÿ@/§ \ët9JKáÈII–·ÃZp0ß±€NN§ÐÆít” I‘4I’ÀÊ,û‘ ÀýÑç‡lcYö^ŸÏ]W×u9 ¿`o¡WˆrE£šBJ–„@z»bÂ$4ìØîDZ}Û+èØkMêšBŽÝ q´Nä d˨ kmsyûΣO!Xk¯oŽžk,€I°FžGç;¶°‘óê°¾ðÁÊ2N.·ë“¶­›{ê×­ Ó0=W×®ú0èšÎLžº€×4=7€¾ÅírþÖìºzöŽí®÷êº9"ë#ÇL{"­öÄ.°>/жfÊïF$ÙL;‘y$%%±Ü#ýïv•)Â>rBûæ‡IϪšö|8,•ÛŽãzð¼}TÇÛ®gêÖ©á6M<ÏãïûÂS~_ÌF"ò°ÖÔ@U¯×µ zÕJeºÝ̡ͮ,£ëºñË”>’v8 Ý+Ó<$Úí¶/nhÑP]¾zSˆ·Û]÷öìÈ5jPÛñÉ—ã¤`ðÐtPM)ЄryI†•Ô©jœŸêžÕk„HPD•úõ  ×L™9Ž[Þ¼[.W±Õoѽ+x§3~ýߦBǽη~ËwÃîpÄ-¿Æ˜+kö\XY¬gFËX™°;èkdøXI¾æÃJ¶ V¢®OaM¹î+C·zžýú Ö^ÑïÃJ\6VP]7ßqÂúLŽ€•í8¬}­[øÀ'Ѿ/9Ïþ HÓ4múÌ?Ü×·lˆ³ÿÔ–¯ÚèË-ã86}ÚØívÎùÕëîi3þ¿òÆ*Ë0ªà°3¾3ĵxÉšfÏ_>!Ý™[·]ÛLFF޹`ñšjeJ'ËïÿïG ´»:ߢ.ÿ£ûú¶|kVÃ~)øøÇ¥Á`¸¢ëóÝn—:èé>®¥+ÿr6»®®6}æò£§˜Ë  ü@„3 šB.-X£„Õ x\-?k1÷ñgôç X›mÐñö°{Öox«|ksN?…eäÀg‡iªœ¯\7ô·n~ Oaõ_ÑT9)^¹ÉÛß¼ñžq§ øì«š*ÇðÏXÿÉA¯iªœ¯Üéõ¼Þ¤ËÁøõŸ®©ª/^yn}'­)¾6 (ÞÐVví`M×®kÔ97Â_ ë30À‹a%í*mc¬iÓ7_€~-ƒµvú¬À¸2¬µÐÇ 8v?€¾ kš÷6oÃZ³ý6€/@ŸÈ‘•Š.§ó3OEd%k ÷bÐuk&t¢Ï3æ“^t}ôÉOâŽ{VõbDV®üÒG‹'Œ~¯Ì¢%kÛ¡F°>LJCpfçÌ ~^UÕQØÙóVLªU£J‡ûïílûnÔo= Ãø@³¦®QgÎ]*¯ß¸ãgEUŸQTUÀ9z¢¹ÝÎ=+³;l6Û·¶n‘T¾l)î¡'^? K·ÀšÞ]ó¥×>[:yì‡e¯kR§ì’¥ú†ñMì{5 “Y·aûQ p@7ŒÛ`ÍÔ „¸(€&„‹‹P§‚âΰFéD/ÓäÉ1ϳÏÐþ²pŽ|Ýï|Ýï‘ÂŽ}°°Â"Ôï_Xá—½úàË^} ;¤ßyÖ °Â»ö,¬°‚Òó©1< +A×°F~³a¯¬¬×±Û@Ýkè–°FxXAF}XÁs_;óµ?¬sßk=u~f´/Dûó €W 8.íãX#äéÑ׫x Ö—wÃúâ‡\>jÛ춪•+–aöì;|,,Éa}&`‡(†Ÿýüëñßô½ï×ç_Oì¢(Ê¿t•Êåàó¹§ùýâ×¹¯…Bá·&ý:ï¦!ÏôMðùÜõrr‚àñù<Œiš`.P½8•Å}µªê«sëû¼®þO?~¯kà wÁ`ø1œZ½GÃO û«‘¯¼ø¨oó–Ýefùÿ  Ë•MÏÛeQ ߇SŸÍùÿÁõ"„”0@BÈ…e‡5êW"çUX¼½ý}?Ný1Jˆ +ØlkºsSXñ1X켘cýÚÁ Z;Àú¢&+Q×`YùÚk òŒÎ;ÖeÀš:žßwÈ;RWÐÞϸ@{XÛlµ•„ê ¬iÝspþÓÉÉÅwÝ ­·ì‚ŽTñùì1!--³ËôYKº¹]Žýa)2=Q&Ø[9(†¯ªW·&þÙwÈ…Sk¢sÍÞ´e·³qÃkG®Ž-`ÀÀår‘e%„r(€&„³—„‚ƒãê°¦³‘wyN"DÞQÃA°‚¢…©ïäò´9ú8V`:§ÇN,¤l}ôÏ XAô™ìÄé£Þäò–\®l*_®L*¸ÿÖzü5n&†¡Ù>„³F4!äJäDü)Öµ`À¹ÁñqXÓe—Gß@¼ø]&„‹C74EÓ4pXû+ÇÚ±fÝ6½O¯NlB‚ÍÎö¿ôvå¦dfù?àX¹zSïî÷=÷Ù䱺ïìñL7xÕëqÝàhåÄDŸšžžUy—4«\©\xç®ý>·Ëq06€&„sE©ú !%‘+¾À£Þð ¬)©Ù°Ö‚.ð"€&Ñ×&ÃÊ`\ÖVQMôð ¬õɹëî(x&„”h²¬:|$M®T±´ VöÿXk§¥Ë°L–³íg†CáoÈ~òÕ¸ˆ¦é¿@($}4rôÔ‡§Lá½éÆ&Íþ\¶þ¨ƒçÿ–d¹^ç7 åË•a~²0‰(Ÿ]ÀëC¹‚QM¹Ù”FÑ2YçıëÀÚæ‡BÈÙ[’ž‘³²ÿ€á­îíÑAHMMâ ÃÄ;|Ï€®ë¿efùKu¹gЈGì&<öpO (6“e6‡mÛÿ Ož2ˆîÕ Ûvìå_ÐÉ4MçæÎ_‘ç5EQ•ÁÏô\.GYV+„Ã|>ÆŒŸÜwàÈ~Q ¿=ôXHŠÜÕ¥×àé?ÐEh×öÉRÁ`¸T‚σ­ÛwË÷ô}!Gn™Û¶,+¶y V^àKF¹RPM).2“5!„ ÇôÄŽþ€ØfÏׇê9B –á<Ê=@UÕoTUýíÈÉÜng;]7Ks,Ì#Ù9ÁY†aü†S³}¶®Û°}lôùî|犘¦ùó¨1¿sŠªnоöéþG7¾?btG·ÓÑTÕ´rÇ…`û2³£LGÞ/Iÿ¤H­ïGOyÆåru4 #™ã˜ŒPHš‰(ŸÈˆ96¬ëúØÑcgpŠªþuá.!äJA4!ä¿RX&ë«((8@>ý]ºø]&„eX`‘$ÉñŽ9‰(Ã"eØÚZGÅ)E}HQòl .˜K³Ãá"ÿ¯ -Q†F"ÊÐ3—SÀù!¤È(€&„œ«Â2Yׄ5B;Åz(“õÅÀhVH¹`Ýe\_Gáû³®»Àõý ½Œ !„   !ñ * þ4k'â'êúVÐA.²×_ïaŸ8a}Ü}Yí6ÎØ¸jÒšx媪1Zõj¯œ·Û¿VNˆ[?‘Ù¦7Þ×<^¹Àóú†ãׯ+—¤{ÝM÷Ÿsý$±Íoê·¾Ã!èë—‹[_Ã\‹Ö}ÿ àC!Éæˆ[±e¼:„B¹rPMÈ•ë\3YÇŽ(“KÌðá/š¯ fÎpX‡xv» ÛÖýz¦ÓÄ­ïpçUßétœW}·Óy^õ=Wžú‹þXƒÞ¾lw’B!W‚K>€N©X7õé„Ò¥ñF›öŠ®ª‰ÅÝ'B!„B!WžK>€.W«&ÊÕª‰ˆ(wW!„B!„\ÁhZ!„B!„R@B!„B!E@4!„B!„R@BH R¾|û{÷)înB!„”H@BH ’žîï;é×yÅÝ£mëæ8ð÷¬ÁÅÝB!„\(€&„B ápFq÷B!—   !„B!„" šB!„B)   !„B!„"°w!„\8†a˜_|31òÛôEÒ†ã×Å;.‘Ùæ7õ¹.^¹Ýn7Ö¯wÎõyÞ®¯[>n}¼r),³-n‰_ß!ðúšecãÖ…$¶UëâÖw:}õÒŸãÖBÜ ·öoZ”úlÙñŽ#„BÈ•…hB)A ÃøúdzÖŒ“éY†ÍÛdM!‡2ZÖÔ곚R®Û¼MÖ^Æõ5›·IÜ/!„re¢šBJ–ÃÑÇ™˜VÇyŒ+¼>!„B®@´šB!„B)   !„B!„" šB!„B)   !„B!„" šB!„B)   !„B!„" šB!„B)   !„B!„" ú<éºÁ¸€«¸ûB!„B!ä¿Côùbð€ÆÅÙB!„B!ÿ  ÏDz€>ê8`2€í^\Œ]#„B!„rQ}áðÿìÝwtTU×ðçNï“Bz ˆ""]¤‰" JU?ñµ¢‚b¬ ¢¢€…¦¢ 6ŠXAŠ""½%2½Ï|œÂLõ¦<¿µferËÜ=C€ì»ÏÙg€‹ ÐÀ.stA¬VMDDDDDDåès/ `9€!êGŸO° ¢*&_hDDDDDDt¦TrPÁå˜}´0 Àvˆ¤z€"²EGDeE7È•9)Éb}álp/€' ºv¿  €Ï ší—/4"’ÑBˆéDDñ—;""*Äú³áĪôˆäzctÛW‚²EGDڞ胈ˆˆˆÊ8Ζ׈†cµ ’ça¼Ç¨'c\DDDDDDT è²Á ±üUWˆŽÝ°À2ý¨eŠ‹ˆˆˆˆˆˆ¢˜@—=Û<  6 «ÒûL‚XkšˆˆˆˆˆˆdÀºìò¡°*Ý€¢{÷zˆ¤Ú _hDDDDDD•èòa'DUºFôkˆªôTÍdŒ‹ˆˆˆˆˆ¨Ò`]¾„ ªÐý4°¢kw¬*m’/4"""""¢Š tùuÀ8õQX•Þ` ‘Ñ9ºü £°*Ý@€)ѯ£¤ÊQÅÁºb9 Q•n`€LˆùÓs!ªÒ’|¡•oL +® î…H¢—xÀ?Uétã""""""*—˜@W|ëI7pDB½ Àbý(å ˆˆˆˆˆ¨ü`]¹ÄªÒõ èQö  Ž|a•}L +';DUº€ë£ÛÖXQ•VËQ™Åš² –Áª ‘TCaU:S¾°ˆˆˆˆˆˆÊ&Ðã0@W¢Û~‡¨J —)."""""¢2 4ų¢*]¢*=ÀAS4‘1.""""""Ù0¦’øPX•n`7€%ÖC õ6ÊÑ…ÅšJë€qó¢ŸÐÀ>ˆªtsã""""""º ˜@Óé X ?€Ë!ªÒó!ªÒÃ$ËÑùÃšÎÆaˆªtˆªôÕ¼çBT¨‰ˆˆˆˆˆ* &Ðt.„QX•®}>À6£T‘-2"""""¢s„ 4kù»›¸bÎôV¥%ùB#""""":sL é|Úà^õ ªÒo@,‘5 @†Œq6&Ðt!Ø ªÒÍÜ Q•Þ`€~Tò…FDDDDDT:L éB‹U¥k˜ ±žô^c!æO•IL I.³tp]tÛZV¥Õ2ÅEDDDDDh* ¶B,ƒU b¨÷0û ªÒ dŒ‹ˆˆˆˆˆè?L ©,ñ˜Q•¾6ºí7ë!’jƒŸ`DU:M¾Ðˆˆˆˆˆ¨"`MQ>ÄzÒ—1gz;X•&""""¢³Àš*º îP¢*=¢ñØXµeŒ‹ˆˆˆˆˆÊ&ÐTYØ ªÒ-Ü @‘\/ЀJ¾Ðˆˆˆˆˆ¨<`M•ш†cµ ’êa(¬Jד1."""""*Ø@Seæ0@W£ÛÖ °*­‘)."""""*ƒ˜@ ÿxb^t¬*}ÀTˆµ¦‰ˆˆˆˆ¨’ã¼O¢ù ªÒó Ö–¾¢ùØAˆÄúnÙ¢£ŠîY·Ê•YóŒ–;"¢ÊŒ 4Qb;!ªÒÏèQ•~À|ïØ(_hTAU°ÀL¹!¢2g€rADTÙ1&:µDz9Ä//·ø @.DUú3NÙ¢£Šf/€å‚ˆÊœ¶êÊQeÇ9ÐD§çÄZÒõ!ªÓ] :xÏŠ>'""""¢ Š 4Ñ™ CT¤ûh bX÷V£¤ÊL ‰ÎÞQˆªôEÈ„˜?=¢*-É+L ‰Î­ î…H¢—xb‰¬QÒeŒ‹ˆˆˆˆˆÎh¢ó£¢ÁX3·A$ÔÛ,ЀR¾ÐˆˆˆˆˆèL0&:ÿbUéz ôpˆNËcÔ‘/,""""":L ‰.;DUú×G·­° ¢*­–)."""""*&ÐDòÈ‚X«6DR= …UéLùÂ"""""¢D˜@ÉË `€®:E·ýQ•@/S\DDDDDT h¢²c;N¬JpÀTMdŒ‹ˆˆˆˆˆÀš¨,ò£°*ÝÀnK¬‡êm”/4""""¢Ê‹ 4QÙvÀ8ˆyÑOè`DUº…ŒqU:L ‰Ê‡€åú¸¢*ý%DUz8€dùB#""""ª˜@•?‡!ªÒ ªÒWCtðž Q¡&""""¢ó@%wDtÆÂUéåè~&Bü½žà#Çå ŽÊ¬vÒKØÿ3€cçñüöÒJØÿJþ¹=Ûó;¨RÂþUrOóü"%œCDDDh¢Š!¢s÷4-!ší€H®§Xþ‚O:ÞuÇ[ùGŽ4H´àË£s2[¶ð&Ú?{ä“é²¶êí¿õ•1ÙõZ4÷%<Ĩô[·%<ÿ¶W_̮ۼYÂóg=öxúÁmÛŸÿÚKÙu›5MxþÌGÏ8ôÏvm¢ýƒÆ¾œ]§éå ÏŸñÈÈŒÃÛwüwþÆï~0Ð$:‡ˆˆˆ*&ÐDÏ÷xÀo@tîþ ¢*}@¾ÐHn÷}<µ€¥„CJÚ‡ÁoŽ=Õ%J>ü¸³:È„7Îêü;&žÝùw¾õæ ßP‘pøT¯IDDDç@U\6ˆêss·¨`3€eýyˆˆˆˆè40&ªbUéZfC ñÞ `,€º²EEZÕŸfZÒü_:MÆ$«œADDTi0&ª\fè}ÀZV¥Õ2ÅEÆEKÇOª-wÉôÜÓ厃ˆˆˆ. &ÐD•×6ˆe°jA õ`DU:a“)""""¢ÊŠ 4ù̃¨H_Ýö€õIµAž°ˆˆˆˆˆÊ&ÐDTÔV¥Çè`?€©šÊ‘ì˜@Q<~‹ô‡HœwX„ª´I¾ÐˆˆˆˆˆäÁšˆNå€q2!ªÓ] æJOpŒq]PL ‰¨´Â–CT¥/ƒ¨JÏ`€Ù"#""""º˜@Ñ™8Q•n±¾t&€]æBT¨%ùB£iÚ­k®ÜAT$ûþÞd–;"""ºp˜@ÑÙø"‰®Q¡±DÖ(iò…Fqì4î•}rQ‘<ÞâªÀõÓ‰ˆˆ* &ÐDt®äC¬'ÝÀ ˆªôv°*MDDDDh":6@T¥ëBT¥ÇA,‡5@mùÂ""""":sL ‰è|²CT¥[è @‘\/ЀJ¾ÐˆˆˆˆˆNh"ºP6 DR= b9¬±êÉQ©0&¢ Í `€®:G·­AaUZ#S\DDDDD%bMDrúÀ“ó¢cUé#¦B¬5MDDDDTf0&¢²À‡Âªtˆ$úë!’jƒ|¡U(?Íþ´ŠÜAT$F«Õ "wDDDta0&¢²f'€Ñ󢟄Xk?DUº™|aU —ŽŸÄ.èçÐô¼Ã“厃ˆˆˆ. &ÐDTV… –Àê±¶ôn_¡°*m’/4""""ªŒ˜@Qypb-éú(¬Jï0+úœˆˆˆˆè¼cMDåI…U鯲¼`+€QRå ˆˆˆˆ*:&ÐDT^…¨J_`0€LˆùÓs!ªÒ’|¡QEÄšˆ*‚ î…H¢—xb‰¬QÒeŒ‹ˆˆˆˆ*&ÐDT‘@¬'Ý Àm õ6‹ô ”/4¢J¡>€ë Ð @²¼á[L ‰¨¢ŠU¥ëA$ÐÃì0@ùÂ’ÕѦݺæÊDE²S»ÁU¼`€ŒpSôë¿>`‘-:""¢sˆ 4Utvˆªô51X`DUZ-S\rØ9hÜ+ûä¢"ÙüŠQ¹~†âi ;€ ¦OäÐø#º/à‡è6""¢r 4U&[!–Áª ‘TƒXk,ÄÐS":35!ø5ƒH–? ° À«rÜ%WpDDDçŠJdà0/ú¸âûßì‚X[z6lÑQeVÀ­Z°BTsÿð%€#ÅŽm=¶aôûíæØX츮ZDŸÏТS}2ÄÏüÇþŽî¯Ñ?S¾ˆãEn‰>ÿ€ ÀL.rÜy7­f`jü·MDDT>°MD•ÝvV¥'A ë>ñ‹þå2ÆE•Ï0› Ô?ü ` €&s‰kD“¼àkˆäõ·èà ` ÄˆŠ¢Ë¸Ý 3€‡¢¯ykô:³!’òï¢ÛàÄ߇KLoŽ÷#IøÃÒ ¦CŒÄ‰És̈?â†Q¹Æ 4‘àGaUº&€AÍÇŽA ÷þ"Y!:x@oÏè1½ DòFáÿÙôžóÄÜb bdEoA$ËoyýEŒîÆI¹" ïà{ßBt²ÿ"zí$} ªÇ1Úè5ºXQÑ.I'ˆd½)D“1""¢rh"¢“0¢ƒ÷“Ã]÷AT¥[”pÑ™ÐB4ߺÀ;Õätˆ!ÚUÜ `%Dmð4€Á>ð€søßðatß³ôÅ®`†~]@FôqDeúºèq3Ü1áŽb¯Ñ"!¾¢Úm/á}µð7 Ɖ‰8Q¹Äšˆ(±0€å·Ë솨P¯‡¨¦ÈU íìXªÀ‹‚Eöÿ €Ñc·hà(Ä0ì˜éͺ.=¶¨}^°6ú½¢‚}ÄT†zÑík :gp€ºE^ãˆDøN”œW…¨d?àˆÆb”p<Q¹Àšˆ¨tCT¥/‚¨J_ ‘ôÌ…¨P—¿|2'Uî *ƒÕâ„H6ÏFSˆäòr?âØK!š„5‡Xs¹¸£$6B Õ.*À_Ŷ†Hv¨VdûLˆfb_@T´Q¿ÀNˆÊøÊ1¦AÜxú0z|ˆNDDDåh"¢ÓS´*]7ú|"€mFA$eUÃÅoN¬#wÉŒ¼#ïâÄjñ™°°A4 ‹×ˆ«(3İé Ùqög£°’m)¶Ïˆ“çñ‡!~ˆ}™  /Ä ¢!s¬AÌ™îÝŽsýdˆjóˆd †}»Oñ¾ˆˆˆÊ&ÐDDg.b~gˆù«™’bUi)ñ©Dÿq@t¨>Œ«Àñ8!ãlˆJoqÕd+JžŸ|*‡¬ƒh¨ç‡qqD3½Ûø¶¢Ùrˆ› 7A /8‹8ˆˆˆÊ&ÐDDçÆ÷BÌ#]±ÌÐv£!:)%²À•͹ÚâØ­C¾7ATw‹»bMçfÑcÏÆLÎyѕ۱vôÎbÇZ –Ãúbö@ˆ›HÇÏ2""¢2… 4ѹeƒ¨J7‡X[·€Íkåö—¤“ý qãåÄðëQ”Eö·†h^W bŽôåÄêA §ŽñóöĨˆŸÏ2®…Ñk¯‚HðgA ç.^}6øÀŸΞ„X’«&D'îØ£øœl""¢r‡¿È?±ªô#ó@‡AÌ—þÀ{e‹ŒÊ€Ç!Ô¡]¸ƒHF«A ‡®`$Ä\â±KM …XÊê%ˆéÄ’W3¼Š³Ÿwìð%ÄZÎ?@$ɸ«Øqƒ †¡±¬Ö.ˆ‘Eé n 4:˘ˆˆˆdÅšˆèüó@TçA$w@t]ÞQ­^ p!Ù¿%Ë|wju×°©“Wµé{K¼&T€ç;tîxpËÖôDû‡M{ïÇ6}nÎI´ÿ¹ö;ÊJ|þÿ>šòã½oJ|~»NmÝ–øü§­¼â¦žÇíöêk;þg{¼9€ûg|°²UÏg|þ3?\ѲÇÇ#Ö':æ4ÍhÀõÄ<㯠*»ˆfuCPجl"DuwÄÏO zœÀg?g“нþMݰ㩠±LÖ¶8ûføbé¶Q–âä¹Õ ˆ¹×] º€Ç“ Ñ‘›ˆˆ¨\cMDtamƒâúDÒ2 "ٙф)aRyü…ê9òò0¾ß­9•ÏDÒ ª†qï;ð¬Îãæþgw~ï¾guþ¸^}²!šc%’‘Æ5¶ç-§:ÿL¼` DCºŽ]³³!æH7@a‡î0€G!’å[4Œnßàˆd·¨EK[­€X º¨ýÞŽ>ß'¦ÕÞ ‰~¿4Î1kprÇïâòÁu ‰ˆ¨`MD$ «Ò !†ãÞ Ñ±ø0Ä0ïs½ôbXpi$¬ÎV’óÏ猒ì‡~]ë¢SY}Ä[ß¼$O±ÿ/œ¼¾4Q…Ä&bDDòÛQ•žѰ© D"5¢ã2•L ‰ˆÊŽ0D2Ý"qÞ 1üv=ÄPo“|¡h"¢²éÄÐÚLˆêtˆù«SÁfLDDDD²`MDT¶…,‡¨J_Q•ž ¢+rªl‘U2L ‰ˆÊ#Ué†ëKgØ `.D…Z’/4"""¢Š 4Qùð+ “èåÆC,‘5 b '"""":ǘ@•o¦A4‘PÿV¥‰ˆˆˆÎ9&ÐDDLjªt=ˆªô8ˆå°Æ¨-c\DDDDh"¢ŠÇQ•n àfÉþ°À`UšˆˆˆèŒ¨ä€ˆˆÎ«õÑÇýµZ͇f“áp¢ƒgL{iL·®móíÏlÔýy×—’hÿ¬^ݵS›‚Dûë6ê>Úçõ%%Ú?÷ÓqÏ·kÛÊ^Âùc|^ŸõŒÏ¿äú1>_ áùóçL|®m›Ë Ï¿øú}þ€%ö½×ãÛët{ú$:žˆˆˆ*&ÐDD•ƒÀÇß,x÷ÕP(Ô"ÑAW_ÕlQIåéO§¿¯×—pÿÕW5ûº¤óçœâü+[^¾älÎoÓªi‰ç6},|>Âý­[4ZZâù3 ÏÏ>–‡û‡¿R§„Ɉˆ¨‚aMDT‰thß҇șŸß¶MÓ³º¾Üç_}U³svþÞý ùDDDTAq4Q)0&"ªO¡P„´µ'9Ùú'€ bPjµÚG­VÓ~…BÔé´Žd«ùŸÆû¸+­JÊúÔÔ¤µ®.²½^rô3´XŒKŠž`4jMOKÝ`µšWhZd—Å`нlµšöEß[ ÉjþW«U .ú‹ahzZê8³É0'O3한lݤR)ýjµÊ—œlݨT*{Ç>C³Ùh\zÃä$óNëP(!«ÕtP«ÕŽ@a”iµš'‘q4 IDATW{½¾dCšô´Ô ±‡Á {.z\ €Ìè#åäËPeÂ9ÐDDDDtF ÝsznÔóOÝc$…äpº!I0)ŠÆÍ\øòÎ]ûø€d±?­^5½ç¨wšrólðûÈHOMÿ{Óö¡Í\Øßåö\ àŸèKW»¤aÝËÒª$«-Y5íª6ÍBí®n¡®^- ukWKžùÉâ;,^y•Ãáj ¨Q«=Ý»]Ýü¯¿ÿqý½yGó‹Æ©R©†´kÛ¼™ÏçWþòûŸß°˜žàms8\šÓü(’ÍfÃú[nêR½wÏŽºýŽ";'7ysÖ®Û³êŽNí¯ˆìÚ}À“›g‹•9U^ŸÿŠžùŸjäSš_~ÙEžý®7$YÍøxÖ"Ïú?³Ì‹ñ+Z]vs›ÖM4: …«Å¤K²š›yuÊGsòÚÙíÎŠÄ ™Í¦//iX·ëS#ï2îÙw‡瘎=~ýÜË:p—ò½ä˜LúK;¶o­3ïÛ¾ï·èöëZ¶h|yÝ:Õôó®ph`¨ÕÚûtHƒ§ž{;àßèñõŒFý¯½{tLîЮ¥Þéò@’$˜M†Ì™Ÿ.ó÷¦7ÛÎŽ Vi®yâ±;šŒzvREŠ|F£v¤Ålýæ«#ˆ`׿qìX^Ó¹ ~ø47Ϧ{ñù/ý@ïí©Õªzõ診¤a]EZÕP5#µÆϼ5fÇ¿{3ív÷ÌáP¨Å·÷R¥¦&áî;z+´€ÿîÇæÍ;¸Ý^¨TªQ:­æðúüoƒÁQ¥ü,©bMDDtöh àx‘G®¬gJ¥²w’Õ<êËOß42Êårºÿñø|?ëuÚ@°Ëíý¯ª¬V«ï©S«zÏ÷ÞzÊÔ£ïÃ…$}ïõù(•ÊþC‡ô¶¾õÆÈäÇž¿Äáp7€Œô”`íšÕ4f³Qú}ÍFߺ?³–ðƒ¡nKç¿múgÇžÌ?ÖoàÓ›ã½ÕlêôäÈ»,zóÁüÇ ´Ñ ½ÿ‘iûÜú˜Çëõ\ÒûÒjU÷´¿º•oÅkÕF½n³ÏwêÑÄV‹iò€¾×Õhtq}åíw?“¯PH‹”’Rëú{˜ŒS½ºÕ¥›ý„@ …"ܲY#(’tà`¶òÍI³¶ØîñøÚ”’RñËo)Ö­ß²_©P­÷øüt:MS rÅÂÏ'šúÝþøv`6€5â3VÞU§VÕ.¯Ž~Ðxó­¹ é«€/˜«T+oËHOIÕé´¦RýÁ?>œ£Ðç:Å‚¯Wöðx|@J²¥w—NWê?™³$Ò¥Ó•‘y")ß ÕëõÕjtq=X,¦­yù6'•Ùlüþ…§î­º9k§wÄ“ã)UÊï  õûâpƒ^§iþûêM£n÷3± ·j~)$ ‘"±4Q)Uc¾ú|‚á–[Gº½>ÿzÇ·Q§Uu ‡#TJ…¢Uóø=¿ô)%Ù¢˜¿pyžF­Z”n2èZ/[:ÕØêšÛîð€‚p8òýŒO¾îvïоšg. ›ÌÆïb¯áõzW€R©P<õøÝxñµ©Š ÇrUjL ‰ˆˆÎ^&€»¤¨ €'&ÓÇäàä$;À±èóÒVˆˆdg2ê&|Úç ŽÇˆ b/‡@§ÕŒžúγ¦û†¿âp:=„B¡ÙÑ—yöãY w®X:5½níi›³vÞ`iìƒNéõúü~ €ÑÍýzâw¾É²}×Þ œŸXqðpvà¢úµáõùÛ@ ÏŽßJ¯×§ØìN(”ŠˆVMhªÑhƼùê£Æ}væØÇ”â£Hõû7~‡¶ùUÜn··)€Ñ}—©Uªf³)ac,•Jq8ÝσÁ7b›$åÛìzS|>ÿÊØ±J¥ràC#ÆM{ôÁÛ¯¼ñá]N§{ ôºçß?ÊtïC/;œN÷`‹>¼ …þ­]«jih‡ÑhØ/óz}µ þ]Ëw{|×@Ö¶¥Ût7®øñÞyùö©:^Ùº‰oÕ/N—gQô5n¹¤aªf³ ¿^¹Óát_1Dj?ñìÄ­K¾|ÛØý–‡ð<€¸m·-ã㣻Kûáô¯<ùy¶÷=>ßHñ9@²šM+’“­½ £Q¯òxý»œNwsNÓf¶äÎë:_\°hE;³]nO/³Ù˜ M¥Rúm6ÇÅ_+ GfÌ^ä‰=/åçHh""¢³÷CôQ\2€êѯEÕ´,¶­ÄÜÍübÃŽ$Øv ÑáDX-HRFõjiسçÛç N(¶? `aôy•Ji5ôؽ÷; }Zä8»Ïç;yê/xƒùå×Þèt{þK kTO‡Á ç÷v9gÙ¦¬šzuk@¥T]»^8þè‹/xä¦Ã_~õÃíÁ`x<˜M†{‡ í£›úÑ|g~ãíÞSm£QÿÃûo=cóÚÍîøÀ7¥ø,®nÝ¢±oÅèÔjÍRÀ{ È¾-f³auÚU¯‰wbýÌZ$É &Ù„¸Áö €;ôzm £^× ŽT‰DªmÛwš7»D¡ÓjZ9nÈÃf“ÙÙ¹v_y½@ñqZ•”QÊþGN—çëŸ~Ýpñ•­›ø~úe}GÿVIMŠlÞ²Ó HjI’ÔÑ„Za6oìÙ½ùà í~¿$'™o½ç®>æOæ|“gs¸æãĹԤMG³s¯J«’>p0ûR›ãA—7´W¶n»Òçómè±9œ/eT­Ò âfåIRS¬»Ýù"¢É38œî%«×nêߦõåf•J‘ †KóqÀïÎÞùïþuÑoÿ)ñ`ªð˜@?±„·´ô89ÑŽ%à™q¶¥Aü²}ªD»è¶#XA¡³Õ Afmÿ®÷´Zu–ÃYâÏTݺujøwí>`ÐjÔ[Ñ!Ú1@øÏ-[wû{÷ìhÐ鵜nÏûvï=,(pO®òÝn¯69ÉŒP8ü_C'Ï÷á¬9‹úbÖë†oøí~›Í1€& ìÞíjÕ릫ÌKcu£Ñ°úÅgÿ—ºbÕ¾å+ÿØlw¸†”ò³¨Ùð¢:š={ç_Åwz¼ ‡›@;–ƒ^wÄçóÇ'~Ñ _Üþš–ª&˜</”J%\ÑÏ'úþ-ÑcëÕ­SÍ»gß!J£Ú†bÇ=ÏŸ»÷p_zIƒRU¡ý~ÿK¾ùå»ï¼ÉòçÆm7º\ž¬®»F½pñÊP$™¶%k×]UR“"e7•€n-š6’vïyW‹èprI!5ºìÒHOKÖ·nÙø}}I’ T*P½ZzøÀÁì $H Ýo‹ÅIBâ†aQÛ²³%¬ìïÞs°è|옼ÜÜ‚HjªU¡Óé2¢7Jcs¢©òaMDDTvx¢Ã§qN,é.šXÇ-ãl«  ¥K¶8–”¡2O«×k`³;‰D Nu¬N«†ÓåF$¶ÇÙïp8]’V«A’¾èŽ`0†¸IT;’´Ëãñ6ÑjÔšȼ¬qƒðïk6…µ:ÍR¯Ïïˆs^ºÉhXýäÈ¡é»÷ ~ùÕŠ§«3D§îÒP*U*É„ÃáðIWÂá?ðǽÁ`w¸ T(œqvýâO§¿šôÁÇ œo¿?Çe4è÷ABR©ð;–ßñž»n‘ù¯¢¬Qk¢Ÿq(÷3¶Ùœ¥+· kþÝs@ײ٥€nIVÓE™õjèÜo>€É?¬X}gïžÔÍüê®HI¹y6˜LÆ?óò üâ=CgÐë°uûEnnA¼®èxxä뮼|›@†m‘HD ‡¡T*ãý øƒÁpŠzÀâþìðþ!&ÐDD•G¯§_x×úêè厣BHN²à†®W;÷«er‡R4éÞPŠãu˰ītgÆÙ– Q1,ÍòØ÷ÙH0§‘*Œc‡WÔ«S¤ú§8öxα|©fõ H’¢NœýµëÔªŠìœ<„Ãá#g”Ýá~gêÇó'Ü}ÇͺwÞûl˜Z£ºäÿ×Ï2vüt‡Íæ|?Î)UÌ&ÃêáÜV57¯ <ë³¥»NW{ö[ Ù{÷òwëÚÖb69\'V5}ãZ5«I§ùV:7¿übi÷Þƒ‘Ÿß°ÊëõÝâõúbÓ5jWIMÊRHŠ¢ÕäÜcÇò•5ª¥CRJñ>ãZ™õjÆMdð™L†¹y¶+$Ù®+B¡0Ô*åJÛܯ¿~fÍäH$roÇ­üËVþáµÛíÿ W*¥ÜìœÜ: IreçäpRe¾ˆ£‰vèõº‚`0”êóù 8±ODfµªU|ÿ¦]0\šˆ¨òHÝà0oœž#V‹ ŸÍ»Bî8΀"áÍð+€Å¦ `8€!zh‘@k!îVú`9ĺ¹€Hºû `.€õkÄðÉØ5f˜`T‘k\ѽ<é¼½[:_6:”­ÉÈH…Ûë½@Ý8ÇHL²:ª«W¯<>_CˆùþÿIJ2½ñúöæU¿¬óÚlŽŸÏ&¨P(ôŪŸÖ©zvo¯ †Cƒ=^ÿUÕ¯#GŽùüXìð³ÙøûýÃú× CøpÆWû×5#4NÇšß×lTwíÔa„ûA¼ç˜t—ÛÓùxîé¾$2êeÖPmÛ¶Çëp¸¿E‘^f`zZŠ&9¡ ¼ýøñ|uÍš𸽗¢ØºÚII–;­Óé$аÛ —ý¸Æ×©CëPýÌZžßÿØè(°9¿µJõc(†$Aݽ[;Ó7ßÿÃÿÝMt¹<˾_¾:pmûVƒ^ßâß‹xâIñ Ô*ÕšU?¯tëÒÖ«V+†Ýg1ò‚–Dçž•Ré…C…Éþl KôÑà\\“Ê/&ÐDDDt*± wDòK†GC$ÝýQ˜ W Œ~íàIˆ}yô5ªCü: …I÷¾b×ø5º½è5bIwlX:oÉ˯Ѩg½9i–ïåT›L†Ÿtƒ±ÐÀPN»@>ƒ^»tú¬Eáܦ²˜ \ C£Q=¡Q«;wëz•âËË#ápøó³ŒË®Ói¿[»~sä’†™‘^7v1ÿ{_0ü'ν6›MÆßþïΛëh´iìøé*‡ÃµÀ=7yŠ>NUáܯT)×}÷ï¡ÛúwW›ÍÆ5îð€Ålø€&''ïtßÇ®¬­»×¶o¥7›¸@†R©¼G¥RŒ9t8G‰œ09¨Ói¿údÎÒÀ=CûHf“ñ õ¤êtš].÷åYÛvÇ»NBÁ`xÙ·ßýêïÞ­éÆníŒ?ÿ²A `Ø_¯^³ÑÙ¼i#4º¸Žçæ+lŒëõú§LùèËàmýoЙLú»õZíCê«hà.³Ù¸U«Õ|[R ùöñc^æzvÔ=&­V7N£ÑŒp»Ñ`˜îõùÍ>~º•ý¸” Å#G£jF¯B¡xâ¦`?W€F£V»fÕ%µkV]¢Ñ¨†‹kRùÅÿ|ˆˆˆè|`µ Îát?ñù¼ïº?ø¿“'>Usü¤Y_ü»û Öl6š6¹ûÑü³} Àæ>áíÙ'½ù¸eÄð!Mßÿ`î.—GyÕ•ÍBOޏÓÐç¶.H ñgtV lŽ÷ÞÿàËN=<ØR«fn2*ÞÚÏõ““Ì5îÖ_3õ£ùáǼÝà¤ù-oO™£ CÓpŠùÐŽ»F¿:uÃ+/e‹¦—ÕµzùÊ5'`³;Ÿ4ùÓ?|o´E£Q·ùpÆ‚M^¯OÙªEãО½‡‚v»Ë‡«ø+çXžòÒKê!7¯@©T)8Ý·bÕ/ëUã^~DÚ»ÿ0 zÝo^¯¿è н¡PpTßA#_›öîsÆÅßþòટÖÝs4ç¸6­J²ÿÒF™R‹¦—˜'½7çØ)ÖÙþÑér/xä‰7úÌûä ão«7ŽÜ¶};=-ÅôýòßýE(Vâ,§ŒØöyã&Ìh>cꋦÙs–ŽÎ9–ë=x(G³ÿà‘ïm6gIRH÷þ_?-¼øÚÔs’´SùÅšˆˆˆÊ‚3m ¯yZ5ˆŠxñåÃ’QºeÂØ@­tl.—§Å”ç}&m;wl£ìÚ¹âð‘cŠ?ÿú'xðp¶btt¹=m5aQjª%ã†níT&£^µíŸÝû<äV(¤WÜnïkE_ü»e¿«U*UÂÆW}´Áx˸­Øð¨ïåqÓì‘ð/â¬ý|äèqÝ 7=PâMžP(l=Õ‡µÛåò\ùÂ+Sfùý¦iU’‚Çh5õµRá¬Q=½MnnAEn*ùýÕíw?ãðñÞƒÛíö\ǰç6º8ÓØ÷æ.:Çú~ùjÉér¯“$éʾƒF:'ž{Èåövºç—^Ú(S7xàúÜ<[péw?Ãåön:~<¿É欞8×J$¬Õi~0dT[Ÿ?  ‡ÂßÙw0Á±q¦[í—º À±°øÉ>_à으œACŸž\·V5Uûv-5f“AyðÐQisÖ¿‘U?¯·kTª9ÿï÷ }Ú …Oèn·»îÚœµsÏÍ‘d5G"‘ìv§+ŽÌKMµöÍË·™% ÿ•øþPè…—ßw؆xojÛö½†×ÞøØ „þûÙ “³¶ýÛ¨û-Þe4êéÉV8œn„CbÍçP(žðölOìùi|†T1&""¢òʃ¹”¥qº Ôª@T¶N§ÚQ[¦©‚;f³9»h0áòk æÞæØ àwœøYlµ;œÛÎ+öì]ØâÏc?İàâcœ¿q»½±¥Ÿƹnë³øóg÷̓Þäè÷ñšTíƒWíÚ} ή“Äëj]œÀq›ÍÑ@ÊþG«Èq{¼ùf³qOãFõ±cç>=€­ÑãÝ‘HäŠC‡s€Ä ËÖ9îÌu¶tZ·aËÅUðuÍ[8˜-áä÷¿Áér×Y»~Ëuk×o¹€À*9 WT{K]å·ÙœwÛlΪÑo÷Ýçv{:îw{bý vÄ;? }árydý³»MÖ?»›@Üôʆè°Ö]¤rìtºos:ݱä¹è«jn·w4€—z}™çìW(C›7kÔwÃ_ÛB§{mì`—Ûý‚Ëí~7úmñ5›7úý¶Çsóñsú_¨v»ó>øýªùùöªsøó  ¾›W07zl¦gT90&""¢Ê"Ö@í\-– àêbÛ3ظª]|ûÁèñåÝ.Ä©òƆX+øä1È'ÊÃÉIuQ§ê8ª›*îR¼Æé¨¦T(6kuš™n·wÄŸs ‹É8²u«ÆÉ{öŽhµšÍ¯/7z|¨”×÷ø6ú(êÏSœ³8Îö3y¿‡P8l»¸âk,'ðKôQ’íñ6êõÚ©*¥ª–Ãézb-fZ­è¥Ñh_zjÄPcŸÛF¸|>ÿENÙbÉ~N”ü9„ÿ߈’>ªd˜@%vºË„"‘Ž7¬¼:D£µ¢Ûj@ÌË>U¢]€%ú9(ý\Zº@ŒF½tÏÐ[†þôËŸ³sŽ+jת¾±[;SÝ:ÕU÷<ø¢ËåòÜ+wŒå‘Ñ ×÷ìÞáò#ÙÇ'ïØ¹/¢V«Ð¢Ù%ª!·õ4ŽyeŠÛï,ʽBT"&ÐDD•Ç¢1ÏÞÿ2£ÜT6î¾oôõfÈ •9gÓ@­x¥;6´¼-D‡ëõÒ!ªz%Íߎ7ÔœÎgØ?åÃ/k_Ò°.kÜ>_@šøî'^Ÿ?ãry£äª1%àóþ˜3ï»65«§Gjת1tŠ-Y»‚½<êÑhÔS×(¹c¤Ê… 4Qå‘W?³f=ˆÏ›+W­í"wT!­rg%8戵–ïX&¬Jô‘ýšQäyƒè×´è£Jô5ŽG9ѯ¹q¶‡ªzÚ WrÙ‡ëbþÚz Äçwh2•ŽÃázÀó»vhºk÷j7œŽøÓçó'\Cšè|aMDDDT¾„ 1eŸÆ9œœTÇð¦UíX>Àëç0ÞÊätÿ\¨t‚à0m*#˜@U|n”Ü\‰ˆˆJA!wDDDDDDDåh""""""¢Ràî³ †”–8Û±h= Ö›ôDŸ»P¸(¼ b¹0 ×~ôGÄ0+_ô¹b®S… =ëØ¿Q™d0è¾u»½×G¿­ ®«{!TµZM“"a´w¹Ýi¡PXç˜d°i\©èõº·SôÛtþþ_^06ú¼€/£Ïáä;œóû×¢0ש”˜@Ÿ%¥R0²È&sô¹¢S ˜¨£Ï“H]4D·i!| úU}n‰'EÏCôuLÑçúèuñƒˆ>/€HºCI8 ’òX·ÂÓIè=‰: þÂÄÖžŒ-Ñ‘è¦A¼xˆˆˆ¨2èuºO>zwß7Æ•_`?õ Sk½^·P©T(ýþàT¿ßÿÂy¼–Êl4¬¾ç®>5ªWKSÛí.h4…¿úèÛ —µêãóx|%¼DÉt:í•JY% ïw{¼WÛ¬Õj6«Õ*U$Yåryžñ…ʃA¯Ÿ÷ÉëxÇ“§³b41|ppë¶Ýîoøí¿mƒ~Òõ]Ûj ]8¶ÍétKûömÛ¾W«R©¦9®'P˜KT*L Ï’$I£ìÜ*šPÇ{~ªýñž'Ÿæy‰ö›Qø3W4ÑŽ=·íB œÞÚDåIϧ_x×úêè厣BHN² [×¶ß}ùÕr¹C!*‚ÁpèÉçßöØ.í©®°tukW3õ½¹‹å­w?­ê÷Ÿ×ü£CffÍ䙵”O<ûÖn·Û=? ‡@§ÓÞÙºEãŒspºŸ|ôŠqðÝÏÄË)”J…¢Ê;ãGizb=—‹&Ë …$)&Œazð±×<Ù9y°˜Ê›{v2Îû´»ú¿|Ϻ YÕl6ç¹c•èŠ'¶–$P¶Á³Ièã—|ÇžêyìµÊJBï¼¢Õ}¢Òª²ÿÀaþ»ŽX-&|>sÜrÕW-å…¨\(°ÙGØìiÑoËŒŒ4Zu8%%éÔž½‹Z4¿TóÊÕ.»Ýù€Ob;LF}WˆµÃÏZêé ÷I )R5£JÂýT¶ýøózÉåò ƒ¡jX¿aëày_-¿þ×ÓM™—ö¸Àe¶Èå…Ç_¤H.±D¿<$ù¥y~¾ªù‰®QtJÀùJÒÏű±éDDTôÚ&“©Ž×çóÙíÎP8,Æœd1}§ÑjuN§ó Ûãëm4ê †ë¼^ŸÏîpöBa¿H5õO©Š.7]’¤ˆÉdø×nw…BÓ!þ/‘ŒÝ·F£1Íëó´Û7ýw1£þ ½Á0ró &†B¡X²¨²šM+´:­Éåtmuy¼ƒKñöZ­¦CÁðunתѨÝz½n}~¾m4€ŸŠh2Wôº$¯Ç»Ýåñ~mµŸ³;Ü  )b4ê×ççÛƒ˜3 µZ}¿Ñ ®RªT ‡oIOKmÁ@ ˜W`¿ÀŸÑ—l}Þãñ¶ôû½^kS©”ßÙlÎçü{Šø/²Zͳ`­Œ´mα¼°Åb£Ój^'Ñ0$ @“ÉÐW¥Ru÷z}é~@g0èòU Å÷" ]ûò¤$ˇS¯ßšž–úß:ÍÇŽçå$'YªƒA8]žÆ±ý‘H$rìxÞËFÏ0™ Ï*$©ÛãM“$)d2wØíÎ×C¡Ð§(2Ðd2®4èuÖ8ŸwØhÔo(úySÕb2<‘¤[<…ר½Æg8yša­$«i¢Ï¸ÎïêM&ýQŸÏ?‘¸sÈO¥–Õj ø»y}~£Á Ï‰„"ÓC‘°Âl2^ý;ÔÀa““-©UjuÍ6W¥RYTJå.·7]©<þ@°N§ég0èûú|þZn·×¬×k:z}^c4€_âÄ`0õ£’t§ÛãMÑëtv¥BZhs¸Js#ë'DoxÙί:ºù÷5_Ö»gGåG3¿êÀ©R)ú$Y-=^_}ÇgÕhÔƒ^·9/ßö€¯‹¾˜^¯yÂl2ðùý›Í169Éü~ Ûã3 ú•N—»;€®Ió­PD:¸Ý¾´p8¬2èuÇ‘È|§Óý€œ"/YÅb6}­Óiµ.·{e8ÊÕh4÷»\žjZ­Æ!IÒçN§{§Z­¸Ïh0ŽpºÜµT*¥_«Õ,µÙœ{=¸1%ÅúœÏç¿Øãñ™µZµ[¯Õõù‹\Ï{L ‰+oÕü¢ÏÏW5ÿt¯›ï_VúxÇmÚGDD¥ P*]}U³^¹y¾_ÿk`8žZì~7hV½Zšî»ïû@D¯Ó¶¹ïž~-ÆOšåEa¯hl4ê4 »±eóKµø+ IDATuN—*•z¶Ñä©s'íÙ{¨§Ýá¼@D«Õ˜†éÕbò´¹ÔFt]k¥JuÿM=:Ô‰D"Xðõ÷ååÄè+¬Iæ]:]iúò«eÛJÑvµ³Ñ _ôøð;t))Veͽ^gÒjÔ×>ÿÒûK]n÷Ç÷Fì`¯×Ûnì‹«1¶Yêé7ÝÚïzCéhY ÇsmmzôÕ•—§€µjµªÑ%×kØ»gG\Ö¨> è^@X´øG?€T0tϘŒ†§Æ<{ŸÑëóÃãñ"ÉjN>ž[Ðoìø{ºÝÞžV•ðÌ‘p¸ù 7hZ·lŒÚµª«W­’ ‹¿Yå]3ƒB!­¸ïÿúÁ`Ð+Àj5!%ÙReßþ#^?½—Ëãíà/É …ÔlèÞŠÔÔ$Ü5¸— @ ÈÚö/ŽÏõ§¤X=oè ªQ=ƒo½ÑÛÿËï…ŽÏ«½fK£A¿|è›ô.ÎÔºÜhÔj•V«i2áYSŽ9~ÝáRôó÷Òê;õç]ä}µ2ôËﺣ·þ’†õ4E®qùø·gN=šÛÕnwÝYäø‹ýšáÜnjP¿–j÷žƒÈÉÉ«¹fݦg7üµít§ˆ×ºÿVc“Æ Ô{÷F^ž­ÚªŸ×X½v“æÑIï8׃žIIISãº]czoÚÜæ®ií»®KÅlÂ3£ßUÏÍ×ZÌÆ=ºwȬW§ºJ£QC¯×Áb6Z” ©ã“Ï¿s¥Ýáz8|\$£Ùl\Ý­óU níƒ~Ç®}ÈÎÎMÞ½÷ÐàÅ߬RBôK*µ"ïÛä²êÕÒ´R¬VÓÔkÚ6¿¶Y“‹5:jµ f“Áh2Ú<;úÝÏl6Ç[v§ûÙØù:®Ù 7´øbþ.¯ÇûùÛzjêÔ©.9n¼5ù“ÚpáR£A?ÿÞÿë«3tˆD€äd3ª¤$Uû}ÍÆa3>Y<Àåö4GaB]8n~ÿ°þºÑ¯¼ßüòËúz÷¼VW½Z:dÖJž1{ÑЯ¿ýé I’öd¤¥ÞxËMô5ªgà²Kë«óóÍ|<¿µÃå¾Ñ~Of³ñ*)Öÿ~‡)/߆H$I’Ì*•Ò¼pñª‡×®ß¼‡ 4QùWýs5T¿¤DÿL_×@}.÷Pý4ˆ»à™qöÇ:òÉÎétOý}ÍÆASßyÖ¸iËŽ '$ÐII–‡{h°á¡c—{Jl{Ó&A­Vý·Ìh2–½ýæ) —¬r|zÂ¥¤X¦P*ô@à†÷&=c˜øÎ'7gíº?L.°9åæÙ[vêÐ:´hɪΦÈðûUSS’Â&“AátºZ@ü»î×hT]oîÕI»uÛ¿v»Ýµäo+ÕhÐ-X4÷-ãØ »Ö­Ï: …¾U«U-¬SóïM6víuß ïW«c']Ùú2D"…ÏçS~8sá&„#YÁp¨ýà[oLž<éÃÃ#^·Àf¿Âçó¯ß²eç¿ß©V«±Ìž³t¿V«Ùá`( ÑḽA¯{ú›ïz|Ôåt¹7Á*¥òÆ«Û6¯ºð󉦛o}ì+—ËS‰;gç‡Âáïg}¶äâ”dkƒÍ[wºVý´n—Z£9‡ÂŽ$ú"Hï¼?Ço0êÿ …Â[#‘°"A×kÛµJšòîs¦}mŽÝî¼À1Ÿ/ðýdzv6´rÆì¯£~Yìu$Ia;š[åà Ú_×å*í¬Ï–Øt:­èR%j½;$úï?x÷ù¤g-tÍüä뜰B­RYÀu¾7ÚðÜK“ov¹½·Q€+[5‰ûy¹­Ç Ÿwôð£Qÿ݇“_°~0}¾kÆìEG!a…J©J ×}<åEÃÓ£ßîëryˆV¢%‹Ù´ðõW†[W¯Ýâøîì#žÉ¨oˆH¤‹Nwzù³ÅlœÿÚ‹Ã-ëÿÌòM|÷“c‘Hd‰F£©á÷ù:kÔ*©q£úШ5Á¢ç˜ÍÆ`Ëê@¯×bÍÚ¿#þ½m€ƒ6›ãZñÑ*¤ù —GŒÝÖH›¡`¾Z¥l›œdm°hîDc×ÿ{'À׈V-&Ãë×u¹ªA÷ní´CîyÆ.EŸKÔ¡H¸•*É…¤8e%)"µÌ¬[«×nö8¦T*+Vþ¡øõ·{” ÅŸ~¿ÿ¨F«n®R©š-˜3ÞØ£ÏCø ÀÖØ‹\rq=T©’¤5™ôŠf.´kuÚ5‘pÈìr{ àóûÕoMþÔc2Öú}þTJ•% v»gè-úÇ$½=ù³)vGÏØëiÔêPÓ&A¡¤ýGÞ›:÷çp8t, uûzÞÛ¦¿6ýsÉöûZä«íÞiÓ¬ŽD"‚àõŸNͼeë®ôå?þqg8žÀðšùÁËÚ^ývC’~p»}» MµHDjc·;3á&¢ £<$ùVŠèÃݦAá2‰âÅùxøuHÜßÝV´,q¾ñ;ð'Z®¤ü«¼{“‡S.ýît¾öJèt±û'[¹j-<ÞÄ…y¹ÏïÒñJhµ‰Ï_ñãðúþŸ½ûŽo¢þÿþÊÝe\F…BK){({(ÈP@TT¨àD7î=qãÑ/""ˆ{ (2D@öR½Ê¦+ã’Ü%¹üþ¸BiÚ@åWÆëùxôAÍgÜû®©ðÎg%Þœ§²íÏëÙ ‹9a9Ñ)`E0¨í“mÖúÑh´!€Æ0’"h ‡›¦¦8¡(þ"”=¥`6 ƒÏîÚ>e×îýá9ó–-õz• ppgßVwÞ÷Ò¯>yÕyåµ? …ÞÓu}æÔéóžzêÑ¡®9ó–_V\ìý@Ï®gµÑ¦NŸÌÉ©)4¨Ÿ£¯]·¥€¹.‡ã²žçœa3î;À¬ònÈb‘†ô½ô\óö¼ÝÑ%ËV­ñx”³ûàRUµ·ßóõÐW†ßmø©‘Ë‹=ç—´3Á›Õõúü¯ƒÚÓ±—í>›¼ëö!WÚ}ŠÒ€‰D&øüÍ]ŸfIüÕíöÞCzšë÷W_¼ÏþÖ¨OýùE£‚AíÑXÑóü¹tà€Þ­ûô>ÛòÝO¿Ý‡ßHp+[%p)€Ç<Õ£Q@} õÛõKD¢Ñè+AUTµ]q¯‹sç¯XÔ¿o¯V‹¹6€fÖ(ŠÿR›Íêà°Ù,·Û{q|g>Ÿ¿ºÃ!ç€Ëi_—_P|H¹Ífyò²‹{ØW¬\«.Y¾j–Ç£\ƒ'½tºmØ‹3?úß3Îo}æi·Û{ 6™kÏ{ü§“vÝvË€Ï@Äf³ÜÕ÷’síËV¬.[ñïLW釃Fw¾õî¦øÞSŽ›o{öé"·÷sçÔ¨‘Vûôf M=þv‘×§4à/*A’¤«g¤¾,B²ùSçôô”ܶ­› >õŽÛëSðÇĹÚ.Û>5›¥2§„[Ìf¨j]í ŸZìe€¨ÛíàWUÕþŠo£©á×?úä§;.<¿KôûI³.0€S ‡¿øìÝrû.ýŠ<ÀºX“÷u=º ##­¢¿ÌαD##5Åu}ÆurÎ<£®ºá‘(€Y……n€çƒª6÷@ f³ùö'ž}oÄЛúÉo¿÷ŵš¦=ß©Ã.K[¶ìÜéSü­}Š¿ ör9Ž<Gƨªÿ!‘sìøÖÿùY¯¼1î|ÿÎ:0§DèzÅnß ¾‰½|å“ÃßûðÁ{oH¹ùöáÑ‚B÷ý±Dz>ôø[?<ýØÐ”®¹4¿Ð=@‹† rsþXfñ´÷4M{â6û; €ÎšˆÈ¿~¯ a­cë}ëpžMPžè»òú-qíóV­Ù´äæÛžÆŒzö¹>ðÃŒÁ·=ûŒTîr3öÏ ¿è‚® Ï ­¨ý'ã_~¦×Ùžc3ø¶§ŸUƒ¡ÔD嵿é¶g†«j(%Qù—ŸŒxúì®g$<ÇòÆÛžy.¤†\‰ÊKÚ›…ЖDuˆNvŠ_yÿãO' ¿~à%ÒØñ?Ü›Í2øš«/&|69ªÿ+¯—kÐÁ}==²Èíöýàìør]×wH¢Ø$ÕÓÔ°2¿ ØÔ¬I=hZ¸;SJŠãâ³»¶syLxÓæ¼ÈЛû‹›·ì<_Ó´e^ź]¶Áj1ï ‚¥×9Âåt\~e¿óåÇŸéöx”Ç7ë'PŸûì«_nþäí¦»Ñ Æ‡­:Ô­›…ˆ®‡C¡ð qÝùm6벵붜›šê ×Flºy9DÅìÔ«GGÜ~Ï‹¢ªj/Ç•…Ýßão½;ñ‹§š:ó÷ÅW'J VFÒ}:€ëÒR]MEIh‰Då` ˜µtùêP»6Íôi3¶°¶²³Ë¶«o¾árù†¡Oº=e2€îñ媦eÖ¨æ‚uaüÝ瀺u³¡Wü¼³ä׸Lxãc×7@CnXU‹³jÕp(þ`v›ÍÒûêþ½í£Ç~ãWüWpðøW„Ãá÷Š‹½ÏµlÞ8©üI’¤sû]ÞË6nâOAÅx=¾/_ ¢0ªY“zeµ­W7i©Îu…Ežiq/—üõ Œß…Ûv¹¥U¶5ŒD"iáP(eñ’¿#7Ýp¹súÌ…í|þt:½YmÁ¢¿d‹Yú“gXf·ÛVÔËÍîxÈÂþ8=Ï9Ó”_P<ªg¤šºŸ}†ýâÞÝÄKúßãF¢ßÃx¬…ñAÿM²lmíp؆ÑÑHÄúçÊ-wÞz¥ärÙ;ú¡tfj~Åx‡þ›«dvÄ«: ‚p^JŠ£‰ ˜êê:¬AÀºvýVdgÕnݶ« Œ“uëd!ÅåØíñ*ßÄõ÷Ǫ7Iôê «Å¬‚jüL™y›¶äÙëæfAêÇ^+*(tKÏhi²X¤!º.‡õ©06JÓ›yšˆèÄÂÁü£ÉŸYTäž W º·¢º—”WxùUÃ*Õþ¢Ko¯¨}ŸJ¶¿¸¼Â^}n-¯.ªd{¢“^8¬OüiÊïÏOŸô?ËǺFò•$iÈÀZ/¼üΠ¦…'”ׇ 7:ý´†¨“SÓêr9;Ùd„ˆ®#33CõmÙQÀ»l¿eÛÎ \N»è÷šGõèù¢$™\.ÇÊH(’U£zzm§C¾¬PÓæ6?­ApÑÒÌáPø—Šî' ×mÜ([¶ï²"îæ1…V‹¹ØÖ”ÌT-”ئ;wîƒl³†BáC2=¬ï+,ò -Õ)((Î@Å t ÙfÑÝd›%_UµÒ³ýµyËsãFu ‡ëUt?GÁ”’b% Ò×\}‘Y×u³l³BAÒ3;´@Q‘GÃÁYZ•âë5mR êÕ1gÕªñJérAÄHDGZªKÛ·¿°b t…Ï;åÀóÎSüÁºÕEãF¹Rœš¯–¾†(ˆb$AJŠSÍ/(ªám§5mROœ:}¦ëú?¥ªd»mçî=û%sN»Ü¸Qƒ:毾¦èºþo©bÝjµlÞµ'¿Ìzï¾ÀdZ]V™Ù,^g–Ì£/íÓÃT+³š àÀŒ¨ÌÌjHOKÅ"Õˆ¥ëõ[œÞȼyËNÝãõ-.ÝW0 -Ù¾cOÇD÷––"D£Q‚ªþ`ì·¾'ž}×,šÄ‘J P2úžÝnûöÜîŦë:4-„’©î‹„ô´˜Τ; oÇ^­Œç֔Ƿ»Ü}ЕÉ`PŒ¶8½!ÒÒ\:¶ú>ܱk/ÌËV@‰¹ÈçS,ÛóvC¶[w‚jüfqšÉdŠX­)Ž”ôµ>P×Ož:·å¤¯ßNûì«©Ïþ:cþ……nX,æ)nïI›™@ÑÑØkµZnØ”×#+«†uÃÆmÝ„3«§Û·åí†ÕfYæw•׉X%IÄú Û¥ ª•¹Àô†!O)ùÅö«(,òüøË´ùÝ.èÕYüäóÉC$IräíØ£z<ʲÕR_ ª7)Š¿‰Íjíqï³S¦Îõúü h=5[­¨ª&áàhߢ(*^«ÅQ”ÀXCá0Á.]ƆÓ]6žÕl6ëŠâ‡ Jå^@5[­fD£Ñÿ| ‰(Š×åÔ®uÃ/?`¿aÈSJ0¨ZÌæ½a]ƒj­ë^TSM€1ú^i‘°nÑu›·îC¡p™?û×>¤äË8¸W B¡äŸw$±èºŽ-[w&¼F¿A*…Enã‚h³ZÌðúÊz˜ÅçóÞIL¢IEA5”qô¨) UÓÊ>‘Ôíñ! –QÔÄjµŽžôõÛöûyÃ;ù—Ùn›Õº#ªëJ(qÔ̬V÷ñ‡oqBL±úV«Õ*x¼¾p8¬6k+¨ªE>Ÿ?ái)ßÿ43¢(a0žEÆNá+Ûp @5Y¶}÷Ýço¸^{k‚÷½¾Rd»-€7‰ˆ!-ܲÇÙgš=ü=ãñúÊ|ÆY~ö¬Ž­{^?°|Ç=/M‚)_’¤üpDƒjýÌÌj5“”z†Ba˜-sí•Q&$sükÔíñõžøÙ”±~üÝ]Ïj«=xÏu®Óš54-]¶êÊ—MüÎcMDDDDG¥¸Ø;ê~Ýþö[8‡¿<úvD¾õ–ŽÑc¿õyFUÔÞl±¹‹½)AU îÝWp)€¼rª—ìº;ë·ßGß}ãûÄ/¦Üvn÷3CS§ÏSÃáð o8\{æì%Z·j]¶bÍ];·_{k¼ `n9ý±H’{ÿþÂŒêi={ rP긨@PÍÌʪ¯O±(+¹©¬W±dÕªU •u¸rš™ÕûöšÍ¢øŸï'’–ê¼ýÅgîrÜrÇpß¾ý…ý˜>,[­o4¨Ÿsßšµ›ËJ\ŠÍfñ¨š–áq{#Ÿ¿;ʦå½/ʹ†Õ ‡«{tE œÄ¯@^(¤íÙ·¿¹95±aã¶Ëã+¨¡PVíÚÉŸ­(Ám;vî4¬_Û¼xéßõJ—‡#áz¹9µŽàn‹E8dp_iì„”u¶¼ jO(J $îÓ¾ÝiK5)صg_¨ÇÙg¸ìv¹¾ßè6ô©©Î¦9µ3…¥ËQž’•áâs»Ÿ‰‹þ/^ò÷ä@P½!TKÞ#-ëÕÍž‡ƒûÀ$E„Á/>}—½ÛyƒÕ@P퀸ÍÇ22ÒfÔ­“ÕëHú; û‹=ÞˤÏü}ñùK–­º(¢ë—^7ðbË'¾àrçð1ÿÉ'HDDDDtJš²jõFᬎ­„`P룪Úeçtm'¬øë_ÀO¶Öõy¿Í^¢wíÜV°X¤N6'ø’qðÈÁõªª©9µkˆZÚ¶9ͱkw¾#Ù™½tùjÛ½:»Ìf º®Ãá7ÂØT±‚PôEóý=¯ÇY¢ÍfTªøÜœìÑíy»a·ÛvãÐõ¬G§ø&Ùf…(‰öÒe6«%ï¾d¤§ŠºÆÚm¶k{÷êb^°h¥ŽDåõÒõhÍÚٙس·@03®H’ÌÒU).§©t³$#‘"º^V’¤hZH´Y-@ôÀžqJ û}QôÌ3[EA耲î[`üì“=<ŒY”ý6kQôÌ-â(¶Op­0ö y<ÊüÙs—*ô:Ë™ššrM©îÚ Mõ+Ÿ…š¦Í›2u®Ò¿o/GZškŒMAKœ¥ª¡Zy;÷ÑýX­–Úus³-kþÝ µ_[‡©©ÎëkÕ¬^zïŽå‹ÿ#téÔ¢`êcsµÝiZèY>ìGs$26¨c[µfC@ ÆÁMààåkjffÈå´-S0¨¦ ‚ f³TŒ¸ä@µ€?ØI–ô$±#R—(øÊãUnP”@öøO'ë­[5O 4aMDDDDGK%ñóŸîÖ¥]¨SÇÖáé3FÌféœæ™P±Ç÷æK¯¼ÿîk²l{Æb‘ž„±‰U€V‚ ÜærØ7ÛeëgñíÌ’ôÛß«6 eó&Qp8ä…06ý*’eÛV‡CºŸÝ^œóÇŠ°?œ”̸=¾1o¼3Q¹صvQÐÆÆŒNû'/?wëå×?òZé3¯DÞî=ùÖæ§5@$¢÷0À€ØWM-úðÕ7Ç^zn˜Óé´àLÕ ÍÂ=wß1P~cä'WS‰Ê$ˆâ†M›w u‹Æ~I’…qïMNÇç‚hªõÏê ‡µ1[,{üþ lV«$Âq÷Ò@@E5=-Á ÚÀ q勊=¯=óÂþ§ê²ÛmoH’ð€¦0Ωn#Â]‡¼Í.ÛFvá$¹=¯=ýÂhÿ³ßê’eëÛ’$Ü_êw;ò6‡ÃVrZÅ÷¿L›'\Ы‹(¸XÅ[`l`ÖÜår|®ëQëÎÝåîEoÚúÛ‚»ŒF rë§8SÜ ƒ‡ü³®ë’Çã«°“x^¯õ¿k7«çvïhs8ìÈPÛi·¿ i¡¾›6ç•ÞÕ{}8ÎÛ±s/Z·jê°ÛmïÃ823Ëé'D£Ñ”Vþs=›þùg}àÜî.—ã> dŠ¢xK$ªß—·cÏ/5p:ì»T-‹Õâp ŒSIÚ¦¤8fÚí6ûê7W&ÞŠt—$q·Ýn  3€Lë·/”$QT|X-h"""":j>Ÿÿƒ?þN:ø ×­7õs}0׫$›ô¬Ð‚¡‘ƒo{F™8öEùŠËz=š[§ÖB‡]ÞQ¿^í¹}.ìöÚ›®¨/˶C†ÉŠÜžÉ¿LÿÃ{ëÍýLkþÝä/.öþXR¦ÔÉ……îÈ—ö~ž:G µéIÆ2ǧøg>1|”ÿË #m[7'Ë¶Ý êåLùúÃYý½.ôûì¥û4M{+ÙgS†|Q·-ÿsMtÄó÷Öº´Oÿõ>¿Ë©.Ç­‚AíÕ©3æçoÚ´=üÚ‹÷çäæÔši·ÛvžÑþôÑ_O|ÍñÐãoúõó+C™Š‹=ï?úô;¾ÿ|ÂÕ­s›GeÙ¶;';sIÏs:\f2™"Á`è°¡×`0øý«oŽ|1þeûÕ.Ñûü.œÖ´þx§Ý~;X­–c>þ.ôñ˜çœý.ïõnïó»|S»æ˜«øŸÜuÿ+Êã_±_Þ§çðœìÌ%‡¼½aý:³û^Ò㕯¹´ŽÝn«ÌélEñ6ìÁW•Ï?~Ù~ÙÅ=ž‹¿Æ—ö|ùúA}rdÛaØ|“`zéÚ[žP¾ûìuûíNÓb1fÖ¨¶¨[ç6Mƒªz$‹ÚÊ4ງüÝ{½ãÅáw_pe¿ Þ2øŠÏéÚ.UÕB‘ˆnBÜÈm~üì«_B}/íi»ªßù½\.ÇÆjé©ëºum{_“Fuõü‚âÃÖλ=¾!Cî|Nyæ±[}.<çZ»lËs:äÍÏj{¹(Ša]×+3-Ö’å«Cõêf ·ÝÒ¿UFµÔ•.§}k׳ھyz³úba‘çˆûªÁÑ=þ¦òÝg¯ÛÛµiö¾ÍfÝ× ^Îï—]Ü£•¢"÷P9Ú5ÇC¯ºéôÓüìrڷʲuOû¶§ûpÔÓòÍw Wô¨>ò°©ÿ5Gzê×¾úÊÕçÞ2¸Rý}> ®–¥EB¡ÿbÜþ‰G¸é¹ž¹³Ò ¤eu ú”@.b;1UBEÇXÑ©ë õ ©â8ÊärÙ7UKK­ …îŸâ¯[ºNjªs†Ãnï²go¾E×õº8¸¦V«ùNQ_jÖ¤~ôŒöÍ­²Í"mß±'°òŸ Ñ={óuQGz<¾ø]º³%IÜZ77KÝž·Ç …[ãàÑJ½ì²mJVVõжí{¤p8œ†ƒÓ¿+bIMuŒŽ„£W÷êÙ1Ò°AŽmßÞBmÚo £šZYìñ^àÀ¼[QԜ욡üÂâ|E Ô;ô™ÈŸØíö……n1 wðg¬¨IjªóÛ@@mV³zµ€Ý!c[Þ.[0¨õ0@­ÔÇ6›­ù½ÎjÔH·lÜ”üí÷Å¢(ˆŸ¹½¾;Ü”æÇÓÓRžV5 ~ðZÎNIq,Nu9[ìØµÏF3[œêr¼5aX¯ôºu²l6mþ6{±¤iÚ ‡ÝÞ!¼>ånƺ²¦¦8Çjÿ”§V­ZŠ^\ìµøÿ'~ðVÕÓRS¾ôûgW«–LMqE÷ìÍ·º=¾‡Œ`’eëžiqzãHû¶§Y-IÚž·×ÿçÊM…nÍd2½æõ*#bÏ[ËÉ®©%ñ¼ÏPrN²I–-¦§Z6oiצ©Íb1‹Æ5Ö˜ =¢¦W¼ŠòzI}—C5™î¼ä¢³£53«[þ\¹6°tùêh8öÔ¨žž±{Ï~›®Gk!¹ÿŸ“’âgŠF³ÒÓSµ=ûòm6›uaH 7žúã{µÏ¿ä6-¨j™0ŽÓìb±˜g¥¥ºtŸâŸà÷o+Ý™Å"^a1[?îÜ©5N?­¼o¡6uÚ|S ¨.‡#ªg¤…ýÀdG¹ª¤(Šý,óÇgwn‡-Ù¶lÝ©þ:}¾ªÿ¦¥ºš—~Ȳuv­ê¶-ÛvÙu=Z‰×@@W§ÃþC›ÖM-íZ7³y}þ*ñ%É IDATðÔéóuEñÿãSr²3¯Ûã=\y¢Ýiïû9u°¢Tbjªs¢Y’.=¿×YÑÕÓ­ÿü³!°pÉß‚ ¯«–îjáñúMªª]`6€Q¶Ö̬®)~ÿ·Û¿FÚf2™ü9µkŠÝÞ^¯Ò:þB’$jgeFò Š‹ €î»ü½Ói7ŸÑ¡¹^¯N–-Ñõ×nÑ–,_% ‚0RQüO2®$&ÐDôbMD‰× 4€\SCãÛÛʨÓ³ù‡'2Œu¿Í`캼ƹµË·Ö3N\Ó¿ ’@ËØ÷AeT:0Î%Ά‘\.ŒÅ\Z[»—uº0¦ À¿8|Ý´ÆssÄþ{]«ÝÀY0Ödî‚‘,ÉfZµ`¬éŒµ¾ñ5P²^ö/Äy  AìºÙ0ÎåýÆúÝÜXù6žPI±ú%ï}¥bµÈÁÁŸ^¬N Œ3ÀÇúÚ ã™ý ~Ô·2Ï»¬k¬‰ÝY#Ëõœc ñVSdáàÙ•¨xä8Æñ[*Œç“ãÞEÙfÍ›5õC¹WŸ[‹%P-Vß cŠ9pø3ŒW Æ™Öõa$Þ³쀱ü0ÎVÞZªMŒ‘ÿ\÷> Æ}—õi‰ƒ;Ÿ'sŸçÂøâàïKÛX¹ÀúØ÷ýœJ´€±„!Æ{nŒg_²‹ÛúX¿ñ¿ïÅ8tó?!.=Hü~j+« ãÿ=[alDX ðh""""ª¼í¨øœãM”`ŒÀÎHòš%x]C©Ý“B€Ò;—åÏrʶ¡ìJøqpÔ¼,+qøyÔGbOì«,ë¼Ü\«´ò‹Â(ÿ= ¢üŸ¿#AZN rÏ;Ùk”Ø  ôZóI¶-q¶Ål SôM Ï„±Óx—ËñÂÐÁý„¯¾›¦™L¦¯âêûÜ{·Àwe¼^^Ûb_”ñzYï‘Òg`WD±[w2ñTôs*±*öÏ ãƒ‚xåý¾ë唉ßOkQÎï&h"""""¢c aƒù¬Ž­]º|Õ}Ån¯Ð¨anôêþç§øýZô‰á£ŠýþÀ3÷BÇ&ÐDDDDDDÿ½]y;özöçÏv6iT¹¹Y&¯GÑ|ìí  ÿøýA8t*;˜@ý÷û-Ÿâo_PÜÆzj?Œ©ù¥§"Ó ‚ 4ѱ“h]9€˜@_®Эªƒ ¢ãN=³ª:"¢Sh"¢ãÇ8TuDtÜ:Ò€‰ˆè?Æšˆèø±,öEDDDDÇ!¡ª """""":0&""""""Jh""""""¢$0&""""""Jh""""""¢$0&""""""Jh""""""¢$0&""""""Jh""""""¢$0&""""""Jh""""""¢$0&""""""Jh""""""¢$0&""""""Jh""""""¢$0&""""""Jh""""""¢$0&""""""Jh""""""¢$0&""""""Jh""""""¢$HUÑ)®€U·ö˜QÕA‘ 4QÕºÀÃþ©ê@ˆè¸S@˜@7˜@U½Y®©ê ˆè¸s%€;ª:"":ˆk ‰ˆˆˆˆˆˆ’Àšˆˆˆˆˆˆ( L ‰ˆˆˆˆˆˆ’Àšˆˆˆˆˆˆ( L ‰ˆˆˆˆˆˆ’Àšˆˆˆˆˆˆ( L ‰ˆˆˆˆˆˆ’Àšˆˆˆˆˆˆ( L ‰ˆˆˆˆˆˆ’Àšˆˆˆˆˆˆ( L ‰ˆˆˆˆˆˆ’Àšˆˆˆˆˆˆ( L ‰ˆˆˆˆˆˆ’ UuDDTeÎ —S>@°í –SÞ€­ Û÷`-§|íÚÌ)§>à˜@¢Úö>¢ßçMITþÀ×_nL˪NTþêeýz ÌGÛ~Ä¥ýúŠ·ð»¯6¦fÖ,§ý|E… ÿ{ðûo6¦Ö¨‘°ý+—\ÞH).NØþá¾ÛઞIؾÏe·[€PPv®YPýþš‰êщ 4Ñ)걩“ µœ*íh‡ú¶¢K”Ûþ‘I•mÿ]¥Ú?:ù‡ŠÚw(·ý”|¿ë6<ت}y£ÕDDDtàh""""""¢$0&":55X;o¥ªƒ8Y¢³Åê¯ê8ˆˆˆèØbMDtjê>ýcœUÄÉ"£NÆæïxºªã ""¢c‹ 4Q˜@% 4Q˜@% 4Q˜@% 4Ñ©iS“NghUÄÉ"ªëسy‹\ÕqѱÅšˆèÔ4§÷Ýwúª:ˆ“Eþö<<ÒæÌç«:""":¶˜@% 4Q˜@% 4Q˜@% 4Q˜@š¬›¿ÀRÕAœ,L‚Ñb TuDDDtl1&":5uŸöþgUq²¨ž[ãòw>UÕqѱÅšˆˆˆˆˆˆ( L ‰ˆˆˆˆˆˆ’Àšˆˆˆˆˆˆ( L ‰ˆˆˆˆˆˆ’Àšˆˆˆˆˆˆ( L ‰ˆˆˆˆˆˆ’ÀšˆèÔ´©QÇZUq²ˆê:ölÞ"WuDDDtl1&":5͹hØ]¾ªâd‘¿=´9óùªŽƒˆˆˆŽ-&ÐDDDDDDDI`MDDDDDD”©ª ""¢SB€ÚÇþ¬{ý Óª*(""¢#Áh""":Örl0@ÀÿÜ @µ*Œ‹ˆˆèˆ0&""¢ÿ €Î0@K…UÑân""¢‹@Gõ`Œæn°@YÇ’¥è F²ºÀÞ2ê5ˆý©Ø  €æB±6Ûãêf(9²k€`ýÕàˆ}¿'ÛB}¾®¼$"":^1&":5Õ_7¥i—ÎUÇIÁ$-–ÀÿÃ¥†x@€uLh`€×cõ$/Æê/†‘gÂùýÀ0# ˜^½F½@€%lÞ𠀇a$Àw¸Fâü"€7KÅ(ÄÚ j¨ëóâ¸:}*ñ ˆˆˆª §pšzL{Œ³ªƒ8YTÏ­ƒqù;Ÿ:Æ—àN7X  €V0F†1Ò\b,€Âý=€À`I÷$úo€€¾0F¢U«4à‰õÛ ÀÐXÝ Ü®pCqö€±¶ùq›ƒí9Ú&"":Þ0&"":þupŒäy,Œu€k|cºDO< #Ùý À…±v£Œƒñ÷ÿe\' cjø·î°À—î…±é`Œ|o…1:í‚‘ÈÇ»!vÝŒ?â;%"":Žq 7ÑñïvS¥ïð!ŒiÜ%þð9€ìØßcÚõ½±?ÇÅ^ßcýô30¦{?WI¹ c$zeìµeúÁ¡ncºwFb|€‰±?ÿŠÕw¸ÀHO˜\‰{&"":îpšˆˆèø×ÆtèžH<ª»+öç™æè #Á÷u¬¯%0Îc6Å•EìÃÁä¹Ä:µìÇÁ$ý+½L1MÜ{½?€9±k#!'"":i0&"":þÕP :€Ô­«›ƒIu‰0ŒÍÂÒa¬N-u²vèÀØu;cÚ6`¬ž #Y_cŠ8pèôí ÄIDDtÂán"¢SÔ’~4ß–ÓÀûììé¿×jÔ0áÒµ>³‡· @NTþ윙³j5¬_ÖQF±ögôôÚ•?7oÖ¬Ìzu¶ Õ=•ÂÄí_˜?ç·êusŽt>вCO¥¨(qû…s~«^'qûû[´;×_ì¶&*iÑ3«ådk¶$ªóÁ-ŽÂí-od·¤®ž ®€€¥‚~*2ÀóÆÀH˜ÿ†qô•Fr¾´}—˜@š¾ÓÁ…;waXãaŒL&Ò§èfX£Ó+Õþ®úÍ*ÕþŽz+jßåü}wGnã 0¦/UûÛê4¬¨ýa3€Æ06ï:ÀŸåÔÝc7íí0vÒŽŸ’c²ÀctY<ʘfÂØ˜l5€×Üà SºÇeŸDDDÇ5&ÐDD§&wì+›*y­ªn¿±ŠÛÿ~‘˜~ c±¾8ôCƒ,;oÿàwyð€kãê=c]ô%±z•‰õÕÆ1ZwÁ8.ë'#ÑDDD'&ÐDDDÇ¿÷aL‘  #ŒÝ±„1Mût—øF=Àb¸ÆNØó´†±f¹ŒÍ¿üqM€‘ˆßë¿.€…0Ž¿*m*€&±ïkààï·¼×ßs "":N1&"":þåÃþ À»0Î~.9Vj%ŒµÌ%‚m…1Òü€ga¬u®#©ž ãŒç÷,Šëßcºw"õqp±x%gBׇ1 =À¨}äx@^ì¿÷ÃØí‡Ø_cŠ9Ñq‹ 4щa€Îžp+Œµá%;bˆ«û)ŒuÓOècÓ0Œã«îƒ1]" cMõ=Ö”qÝ-®€qÄUY›½‚±þ±òI â_`P9÷_VPNDDT¥˜@86¸)ö½ÆŽÛ‰vÒ^€ƒÇK¥ÃØ»¬ÍÎtʹ汯D>}Uäª$êט@˜|GP·è˜EADDt ª:""""""¢h""""""¢$0&""""""Jh""""""¢$p1"¢SPûöíÍÛ¶lš™¨\„ðŽÓJT^PP,¶<£ÿëå´íØ8ýáDå;wî5ŸÑíšWËi¯íØ8ý‘£n/ ÚŽõ‰ÛoܶËrvëG$*%1˜·~Úc‰Ê×®ÛníyáM¯Ä¿¦‚ `Â6DDDtâcMDt úòËç…UËמ¨\E‚iy¢òŒŒT|øþÓ û¯¨}íڙ嶗$©ÜöÙÙ•kß07+™öç'*oÚ¤Î!íWþ³ïŽþÂΚˆˆèäÆšˆèÔ¨QÝhýš5º½ ¸ä¢sª¬½(_íeÙ†wGqÔýщk ‰ˆˆˆˆˆˆ’Àšˆèäp´2ñ‹)UÆI£^Ýl´kÓtFUÇADDDÇh"¢SP8Éݱs_U‡qÒhÔ ~ùaÔÏU[L ‰ˆˆˆˆˆˆ’Àšˆˆˆˆˆˆ( L ‰ˆˆˆˆˆˆ’Àšˆˆˆˆˆˆ( L ‰ˆˆˆˆˆˆ’Àšˆˆˆˆˆˆ( L ‰ˆNA¹¹Yc®Ô§ªÃ8ilݾ }¯| WUÇADDDÇh"¢SІ ¿æÕÎάê0N7åaáÒ¿ù‰ÑIŽ 4Q˜@% 4Q˜@% ô«-€Uý÷˜@ÿ·Ú˜`€7t Ve@DDDDDDôß`ýß  €ólð€½¾p=€”ª ˆè ‡£ÝO¿ü¹ªÃ8iÔ«›v­šÎ¨ê8ˆˆˆèØb}llð€®N0ÀÛÌp€ÚUòÂáHnÞŽ½UÆI£Qƒ:øå§QüD‚ˆˆè$ÇúØÛà—È0ÀéVX àYS¿‰ˆˆˆˆˆè8Æúÿ—Àd·ÂH¦o`ð€->€‘h›«*@""""""*èª0À£šècê÷#vƒë¦ÿKôpnUBDDDDD'.©ª VǾFÈÐƺ鑖ÂXGý-€Uà‰ÊåtLÌ©]³æÚõ[Ñh´ä=ß(-ÍõŒY’ùªšßëUþ1S`Óÿ{°DDDDDtÜb}|ÚcÝô'ì0FNûÀX7à Þòª ðD"I¢4~Ìð”³zÜ G£Ñ’—³v¹ß“ ‘ãë†Ãüõ÷ºà×ßM{) Œõùü÷ˆÖ)r˜@ÿJÖMOp€³`$ÓŸÃX+]R6@¨Šb++‘  y,ÖúÉô“  €8ôÙHêÄúk ã&Ãã™  zå `<³Òϳ´4-cu‚ª2rs³Æ\7ðâª㤱uû.ô½ú^U[üÇò‰íxY7-9òˆp8rGn,5ªëرkŸÅ"‰ã<>ÿ ËÖ¿µ5X­æ÷U5t;‚ð®,[¹œ‹ÓiÇžÝû÷ùü¶‡üŒY¯Ò´pš5«©²lÓóòöXAØåöø†˜U:Q¯µZ¥w«g¤ YÖ·æí²YÍ–™¡PX.]·Û|þÀõßü8£àã1Ãaµš%¿?k·Ûn¶Z,`nÍÌjA§Óݽ'_ …B@½'‰|߉ ~]×e‹EÚm·ÛfƒZ¿œìšja‘ÇRXä~À‚Œô”'”€ÚÓa·¡VÍŒP ¨™vìÜ+Ûeë”b·o(€‚¸.ðZìûœNûÅ»ìLOO‰lß¾Ûj¶H߻ݾÁ:¤¤8'š%©f­Ìjám;öXDQ˜ïvûúðÄõ×2-Í5*Ô:Öª™¡ÚmV=¿È-y<>A¶Zç¹½ýaÌ~ “Ô† ¿æE¼Áª㤱qS.þ»€áU ;L Oe­›ctzŽáºéÔçgmZ7ëóÄC7Û~žö‡°zÍÆ@÷nÌ,øsˆwãV,üý\tÅ]r  ,³4â…{1nÂÅ»vï¿eà€Þ²Š ‹…™ÅføY‚ Ü5ìŽAÖâb¯¶~ã6ȲU:¸Ÿ5;«FÃ[î>ÙãQ.0»$³Ù|sêiï|W¢Ñ(A6«E jO<|ß`Áíö„7lÊÓ «.´µiÕÔqóíÃ?ÞŸ_dD"Ÿ–t Š‚°xÎDœÑ횬í^yN×öÒŽ{#¯Ú`.,r›¬VKÿí[\Ò¾íiص{¿?oÇSn,Ëå—ô°ü>wiŸÆÿ°Øëó·(éóž;¯ mÛ¾38mæ¢k/ïÓÃF•ôt—íúA—XŸåÃËgÌZTG…vžßÅaµ˜ýV«Õ:öúËlcÇßíÛf~ëöøÎu•#˶ùÏ>~«3 EŸ»T ƒ¦í› §ŸÖÐþôóï÷‚q¼h""""¢8L ONñë¦EÛuÓçº\Ž‹^~·ý¼KnSTU})ÖWY­–nQ=zŸÉ”x•€ÃaOõzLü|ÊübïKA‚ ô¯W±¾=êó=^ßG¶°Íš½ìšº¹YÝ>õ´sè]Ïq{|Mb]U7Kâ;?~õ–£ïÕ÷û‹Š=ŸøýÁŸAha³Yž³Y-Gú>ïQ«fuMDKa‘Ç`—®ëÂëoOØî?Ðu}Ì¿¼Óá¸âÓ^t\vÕ½#%ðÊxžþµVÿkåÚ÷ýõ/›ÍÚ @(Ñõ™¿//\²ò{G™`€:ßü0ã‰çŸº³zç³ÚÖš5{áPHß—Ífs„ÃaÓ¤_f/ñx”1‚ dNü|Ê“ÌoŸþÛÂ.ˆÂôë´ùÿ¸½¾w8¾üvê ógŽwü0é÷.šX ï +/4/ÿó_ÿ“g/ðù”1üs±¢vªË9PÓBçáó""""":%0>ù•¬›.Y;ÝF2ý,Œó§gÁ˜êýï‘vžžæºçÉGnv<÷ÊŸ¦©„Ãúû ªÚ$§]¶fd¤Þ‰kíS\“M¶®,vûºˆêº]×_P @7×7/¾¾Ûãýl{ži±Éd:3¢ë9²ìášKût7Í·<¢øü3üþàí ëú¯Á æ­]ã]³$™݃O äxE’Áårž …{~À[²çX|þIO<ûîúÏ>~ɱlùªA…îChÙfì²m½Ûã;˸EáH´áô™ n|Ý¥Âg_NÝíöú:Ð  gNüò—»viž4å÷¶Ö»\ÎV­Z6¶½9r¢ÇçSð×gìõ}cm·/Ñó""""":U1>õ$³núÓ¾+ŽèÏîÚÁt÷¯ZC!}B|™Ïø°ZFê H°©YjªÓçvûÞÆ¡ÇDEa¬ý]!IÒC©)Ž=’hÕL&ÀëSÌë7nGÃú9êÊÖ7°+-ÕyÁŽ»Ùßxç“âbïøkèº>a÷žüQå–ÆuðôcCkxrj×D“F¹øqòìðÈÿ}áóû·˜)ÂÐji)×…#áÜ ªD…`0(­Y»%Üü´†Û".ÎÍÍ‚ é‘Hä“R—X  ¹ËåxÉb6wTU-+ Û T­éi)…ÂõJÇ›–ê y}þè%¯)ŠźõÛ5lc ‡Â_ –<@0¨­\»nK q£\@ÝXý—.[¼ï®kå'žyw®(‰?z¼Ê/fÄžý–2Ñ)Ž ô©-Ѻé§a$QSPÁºé`PM5›%H¢¨†Ba¥Tñ–={ nàµeëÎ0€íee:öeç{VFçN­ì[¶î„$Šðøüš ÑH«¥_gÌ&¡vNv&vìÜ'Ø\:DY¶íܵ¯FY1lß¾/½:6¤G£:D"ºIÅ€$ ?ùýÇ`|`OIqÌoÛºYãK/îîØºu'L&¼J@CT×»unkù}îR±$ž»÷äC¶YÝ^Ÿÿ°iÝ¢(mÖñ÷ÞyˆŠn·AUÓC¡PH0 ጌ4)‰öì¶nßÔu½ô¦p~ÏÙ–·[ ¨jéçé÷)þ¨Ëé0 ‚àŒòôÃäß®^½ZÚ_¿íZµfõS§Í¿|î‚?-6›eiq±÷fS½‰ˆˆˆˆ(h*¿nÚ à—ø€ à'»@ï‹o$‚.‰"º^Öi›ÅbÇú;Œªjˆõ}ˆ”LjÁ×]^Ëf³êÃ_ü @M“‹=Ê6I/oÚ¤~'“q²”©tÛ# …a±XV¹{Æ^ £ÔTv›Ír³;4í}^Wóƒ¾áµX,SÜ^ß&]×}º‰’t®Étx<ªªÁ$g·X¤~úúmû­Ãž÷z6øƒÁ9€º@D…†Ý1¨Ìx£Ñ(pèˆ}\¢‰ÊJq+J ùG~|e̸拉:… Îë"ýðå›Ö ·w~ìé‘Kàt$9 ˆˆˆˆèTÁs ©,!3Ü cÚïU0ÖÄvæ,ÛöìÛ_‹Ù…qžq¼æ53«EŽôâQ=ÚçÆk.1¿=êÓ¨Oñ7(ö(ƒa¬Ù‘šæò7¬èÑÆ:¢;òvîENíÌ0ŒóãÙ`zíìÌ„×S@Qìë°uàv»ÜÿΡWË=󮦂mŠÜžAº®?`„ÓnËkÖ¤žío±cÓÆõôõ·aï¾¢_ ŠÜíõ>/c6›#iGØå+ðz}Cüþ@µ]»÷wðé¤'¯¼öá]ª¦En|…Ýb‘†ë¨j9ínùôËŸ«:Œ“F½ºÙhݲéÌªŽƒˆˆˆŽ-&ДŒ?aœmê)]‡§þ8yvø–ÁW˜vÛ3qEBªËù\Q‘Çy¤Ó£Qs4… ˜B84¡mè÷:û”COW*.öþúóÔ?ü×^}‘+-ÅyO|™ 7dÕªݸ±¬™âI³Ùí6øý ÀÞ¸×Ó£& …ÂGÚŸÕ锣EÅîhX åÅØí¶û³³ª‹{÷æW&ÞŠôP²(\ð·®ëoz}Ê Ï¿úUiÕ¢±Ùi—›˨ê…Ѻy;öV\‘’Ò¨AL›4jJUÇADDDÇhªŸÏÿÖÈ÷?×ôíe­yuzzê?ii®OÒR]Ì©sQñoì ›Õ²nóÖhÓ²‰Éé”?p €»û§Ãnݶý«¡ëú“~™íÖ¥èt9zÙí¶ÑzK’ð°Ífykï¾Bs(|ÄIîÑHô¯?Wþ½â²sC)NÇO.0Ôé´ÿ]-=Õ¹aãv½¢>JY½jõFËçv6Iqˆ Ã\n·Û>°šÍîÙS …#G%Pá ¹=o=ùÜ{}>ýèeGÛVMÏ™1kQ‡ì¬fY¶ÙÇ:Iõz•ˆ(I‡Ý‹×[zOµò¢ÀÔoŽïóã—o;Ç}òãËûö†7Êuüõ÷ºð‚E+ËŒWU5h F»U5dRUµÌç …Mªzp©¹$Jâƒ÷^/Ô¨Qíµk·t߸9OKMu Ý:·uæ¸#ß|7£HÓ´ÿUø`ˆˆˆˆˆN1L ©ÒB¡Ð¸¢¢Ð†Gžù¼¦imÀb1¯**ò|žUãå={óSL¦ƒSŸ5-äþÒ耮G%›v•6«°Ð=ä²+ï}Ï᥌ôÔèâe« Iâߺ]ùÖ¨OÄÚØÝ: Û·¿(ØoЃ£ÒÓ\’ÃaDz?ט¬V˯6›µAŸþw×EAÕõƒÅáu¶I×ÜôX@¥‚ nq±Û­ôxã£ã­KJéX¶b5ô(6«ª6uÒ/sÃØ¼ë@–*&÷EWÜå¡°¬Ýnßài3æ¿óӔ߯ɩ]+Ñ#¦?¬Ð,i¼Íf½¨Oÿ»3S|ÛàÇ #wLUŒ:uú|Œ3¿K¯S-Y¶J\¶bu ¤ÌçWÆð£ÃëUZ¤¥¹"é©X»~ ~>_³Ú,ß(Æîã=""""¢Shú/œ àÏ¢"w÷’%›ÍòrÏsΔæÎ[®y½¾9%eªzÀåu‰D¾Pü¯ Þ¾ý…0Ž»Ú Á vC‚6Ÿûý¯üþ@SÇrmÔ2X 5-[Ÿ]ÖFÙ‡™áóùkûàÏ-(,® `€<ã~´»JWVÕPÍ úóº½ÊMîÚ´%¯ Œ6ƒÚáCφQªªJPö…ªj_$(ûõà}‚ÁЄ`°xë¾}…µ÷í+¬ @žª…ÛN^[¶îÄÜyËqv×ö ë躎9$<É¢(Ti{IÑ­K»„å‘ˆŽ¹óª®=\˜@S¥¹\ÎaÁ`ð›ÅüW , ¥§ºÎ³É¶³‡Ý1ÐÞó¡~M r]ë0Îu.}¶sy"Öŵ’µeŸ]}´üþúû;*ŽüùÒI"‰n˜ôóì?§ü27´sË̇ÕÛWPdx㣯%*D!´sSâö»÷–ß^EuǦ$*ÏÛµ×2ðÆG_=ÚöÛvì²¼ñÑ ÛKb`ÇÆ%*ß¼m‡mྒL{I‹ü“¨˜@S¥YÍ¢¹ßeYÔϹv×îýý-fIhÒ¸ž%-͉¾W߯D}ÀÖªŽ“ˆŠD"có ŠÇ€ÙUáj¹N€ö3*Ù~z%ÛÑI‚ 4UšÇçûhòÔ9é·Ò^Á&ÛŠâ‡Ó!¯+*ö>`rUÇHDDDDDTYL ©Ò4-ò]Aû;…‘T5'€‚¢b/×ÓÑIƒ 4ý×<±/"""""¢“ŠPÕ˜@% 4Q¸š*KàŠ}¯Â8טˆˆˆˆˆè¤Ãhª¬3Á”o±˜÷ÙlÖ7«:"""""¢c… 4UZóÓz^{é>Él6‹U ѱÂ)Üôÿ­€ZÖ%Ѧ:€z±6ÿÐÔdȆ1•|/€ürúÍP@À†ØŸ±h@°@qmˆˆˆˆˆè$Àh:j’$½`¾Åb¶€×ë»@4îë‚’º¢(^ír9òÒRk›5©?#·N­ùV«¥X–m/ãÐrrKÚ[,æ…©©®Ÿeٖפq½™ÙY™ vy¿(Š}K…b²ZÍ÷:öýéé)ë›6©7£nZ v9/=-e‹Íf»¾Tý.ii®U‡¼­i“z3êÕÍžgµ˜‹].Ç8©ñeÙº¼$»Ýö’l³äÖ©µ «Võ9N‡ü~åŸ"(8MGÍ,Šb›VMÂý.;×ܼYCÜxÝeš Ñ(L™úGt~Àá°¿T½Zê°/ÜëXùÏúÈ߫և²³2-çõìh=ö›aËþ\ÓÒãQ.‘¨"##Í7æÝ§œý=ЩK§6‘ÓOkÝŸ_>§k;G›VÍLõ½óS·Gé `18ìö›4Îvÿ°ëÌÿ3¸nä¸hÒ¸®´k×þz¿Î\pa0ü$vï”Ç·ï¾ñ¨c×îýúÌY‹´ŒŒ4q@ßó¬S¦Îôí¿uñz•v°Ë6yÆäÑèÞû–HÃú9÷^Ü»›¼?¿È¿uë.ÛŸ+ÿ5ÿ??r"""""ªBL é¨TõËe+Öhªª µ;ä´/¾þe‰ª†&ÆUY  ‡Ãnöá{O;ú_û ? Ôùj}ñÍÔg?x÷©´Ý{ Îñx6ðu|ÿ¢(`éòÕ¾9󖿦ëúŽ_§/rù%ÝÛ¾þÒýò#O¾ó|a±ç|0 úæ+8.¿ê^Eñ«Ï…ÃáÕœ‹ÔR’¤[£úiâ²Ý.1éëw=ó®²zõÆŸò€ÌÉ¿ÌyñÃQϤ‚Z)¿üñ¢OQî=4Qܶ}·ôþ˜o~òx}Ó­VK}]ØÙÃ%""""¢ãhªŒÅDCàÿÚ»óð¨ªóàß»ï³d! DB@@AÜÀµŠZkݨK©Öjµ¸ïiëÖj¥"Ö}·*îÔ]TÜQÁÔ‚V7P ,H2™¹³Ï½¿?f¢C ²&ê÷ó<ó0sî™sÞ{’?89ç¾GUµOS©ÌÝÅÂáÀ£S&]`?ñº¨ë&Ççr¹w^‹ÅâsνhòÛ·ßðgûŒó®>¿µ­ã« t(è@„\Ìï àCèˆÆžzüéW[Î=ã8!“ËíX¨j¤Ré O@’å²Y÷ÚÎ6Òéì¿Óéì_ÔŠŽÜmÔvR{$Š?ù²¾#æŒÂóÔ®›˜þÅ×Îü¿™Síg§Ïà"ÙζÛôS©ôÔhÌ=R©4ÀG hó©0¦§ƒ ¢^gDO@DDkãš¶$Ùu»î7züþ´+LÏó˜X\!‰JÛ ©E<‘Zë? ŽcÂq¬¥mmÇ CoÌd³ƒ‰dùÉ{BQ·¬4,- ÷=oa4æNËf½7ÌC~¼¤Ðæ‡ÿr´ýà£/Ä"Ñ)X;Ù¼l6ÛÐÔ´zheEi¶®¾i;t^´,#ºzMû-]îo]É̈6Æ*åx ug^O@DD_ãš¶¤RMU¼l.‡SNÀétºnEC³?°¶Z^°pñ ï7àCôï‹úåM"€Æ-'ý@}/èÖ X¶ðÃõWüéDr3EC›Ùš¶¶ÑqL(’îr-cYÆÿ^›9w··’yÿƒOËd¼ÛºicÌØ„þ+ìàiä'çí¦wÄÜéeª2ûãO¾Ü«¢OIª~yó€h4þÆôg{öéãœ7ßžwQ{{ôA|½=R’¤­*+Ëмr `Ñ&ÄBDDDDD?b[|I¤>ŸqÓ­ËfÜtëwnKR”ö\&³þŠà³ÅuÂ3Óg~çv²9ï§ž‰yùªÕmúȆ!•N X÷{žÉù9Ïuw¶µuüå‰ÿœþä#×9cÇ]xm:“Ù=ußÐ`@(àü*íiÚ½±xrS&ÐaÓ,ÓhÍd3w§ÓÙEÚUUÞ1“ËìTÝ·ZVµª–Xúßù‹n++ að šÚÏ/ÑuïPi[æÕ7\;Á¸üªÛ²¬ÜƒTzK­”ÑÔŸ@§“ÉËÒÉäe[ºŸôé¬9ïÍœ5çý®[Ž7š$I)ü´Ÿ¦þêß®¾sÌ7_b.ù|ÙI©TO›‘rÝÄ+^‰'’ÿwâÄ?^?ùVóÊÕÇÿoÁ§G¶µE½¡ƒkôŠŠ2õý>ñ_}cîW? ßó7ÞíãÒ€h,=Ï\RLÞ0ù¢ÒÏ×]üñ§_Æ[Û"Þ¶Û ÔGö»ñ—º’$Ý nlP[퀾MU’Çš Ø¥¿YEýi›i¼ˆˆˆˆˆèè;¯Àm¤RäŸwö4X‰Íwžr•tä·l7­§~%€Z.ògE¯{Ù›ˆˆˆˆˆˆˆˆˆˆˆˆˆ~xôž€ˆˆˆˆˆˆ¨·à_=QoW @ §!""""""êJê銸F°ÌïáXˆˆˆˆˆˆˆzµ,èé ˆˆˆˆˆˆˆz;ùã„véé@ˆˆˆˆˆˆˆŠõ¦-Ülc<ßÓõfL&FDDDDDD½No\f21""""""¢ t€z:""""""¢ÞŽÉĈˆˆˆˆˆ¨Wé[¸;Ù“‰}+&#"""""¢^£7¯@»Èoá6¼×ñõjL&FDDDDDD´:“‰êé@ˆˆˆˆˆˆè§­7oáîä€ÉĈˆˆˆˆˆˆÖ«L&FDDDDDD=쇰“‰mŸƒÉĈˆˆˆˆˆˆÖ‹ÉĈˆˆˆˆˆ¨Gý¶pwrìà…ž„ˆˆˆˆˆˆ¨7c21""""""ê1?¤è€]ÁdbDDDDDDDëÅdbDDDDDDD@ð9€‘=ý´ü¶pw²&#""""""úVL&FDDDDDDß»â tg21L&FDDDDDDß“âZT˜×ÓÑw%õt´Y„ зð9Öƒ±õZc CO•†ƒI—÷t0DDDDDD?FbO@›Ç^{î˜8ãÔcÔžŽƒˆˆˆˆˆèÇJîáþ%5…÷ ÍFÊbÞÁº·#kF ¿mYPà²]êÉúÞ»VØÀoˆ®o`ke…xæbꪀSx¿@Àî…¾>ðEQÝ €Ý ÿ~Z¸ÞÀöªVîg}Û±û¨(ú0°ès€TÑg³k)òãñ.€5]ÚÔô+¼ï(\ßùqt‘ÿ¹Dѽ>¶)Ää"?>‹xÝÔUì   @ùñnê¦ÞV”BuÈÿìFÊÞ°l±m6==.aI0`%ã‰T£¦)RI8X6|ÛAþšÖˆ¿àÃŲï{R©ÌEß©* îÇ“ûnU]™î_])hºŠÏ/CsËšl2™:5—Ë=UT+A–l3•H¥?×4Å 8vùˆá[ûsÞ]¨vtÄ5MsˆªÊ}ß+<¨&]Ù§DŽtIJïð©®ÈòëíÑßhëlвŒ›A82Oʲ,>+IÒ/Gí4,­ëš0ïýeÀ{¦½=v¢a¨á²í·š.+ JóÞûHL¥Òs#±Ã‘Ÿ t]9Y–”k«*Ëä5}A°²eµ÷Ù’z]ÓÔ7#‘è!ë@Ë2nEñð­úU%áÊËÂ'8ZÛ"f.çíŠüD\q,cr:›;cø¶SUUåb$ÍÍÿ]QäG¢Q÷,|=Ñ!Iâ\C׳©tú}]Wû••†Âö$¬^Óž[¸h±œÍfÏÊdr…â„ö™\nìÐÁÒU•eR,Ï-«oW­j’éÌÙ¹Ü×õ5M9CÅÉkúyôcnÜ›ÿÞÇš,ËoFòã½úëñÑæºêˆÆ$Û²Þô|oß]v–^ÑØ¢×-k¸9Î^¼¿sDDDDDD›¤Ç·p[–‘ztê5f&“ÙzŸ½F (+ y -ÕV+/?{›U^V2EQ¤“‹¾R-IÒ¾œó[m`m?ayÃJ¯©y•wÔ‘c´'¾¶$´p`qeeáø=·_ad2™°gí>{"‘˜'Š‚@0MíøÃ]sä¡û ‚|²¸.gY†øð}WëãŽ=ø @ÀzEc¥iªróuõ5U‰>奇zðhÉ'}DZķ^ºÇÜ~»¡ceYþ $ºâÐ_ì­är9‚€žºÙ³ßî{9ŽuKQx‡…CÁ›§Þ}e騑Ãä/–®ð—|¾ ápgŸ>NËes{|ÛøÉ²$õ)/AUe9 [êΗ,Ë«¾bб_ÞsÏO{ä¾Izu¿ iÉ’úœ®iÂýwþMßoô¨ã‚ëyäW¾ƒn›2é=—óvßoô®ý·2Ðo^¹&7fÿÝÌ9o<`[–y;ò»Á 3í°Cö9úæ) ]W……‹ûkÚ"5r¸¸ß¾»:’$ ë¬kêÄ~USžvƒ³óŽÃ”O?«óR© î¹ýr픓Ž8À±Ìy¬ÎúŠ"«¯=§•ËyúÐ!5Ž;ú 1•ÎøQ„ÿ&"""""ú>”Û¶ŸñÌ­¾c›¾m™M0L×ÕkªûU¸óg?êºÅ×[¦w!ãØæÓ~…ü$n´c™÷\ý÷ƒ“ý`Ðù´¨Úòò’èã]ë˲äÛ¶¹À)EñF{[–þºe ¢(^`;8Þ¶Í•Ü7ɶÍÀ¿ìl°¤$øä}wþÍßnøÖ¾$I9ÃЮ°¢ˆç—–†âóf?âðeYÎÙ¶y€}%IïØV|ñÂé¾®© &ˆ¥¥Á™Þÿ¿ueL–Å?Øù­ÜG:Žù¬,ËË×3†Ã\qà»·_:ñ€©Æ½EÏÚeäv±‡ï½Ú³-s$I§ÆíXÛ6[¹ÿÞÁ5QGÚ5dpMÛ7]âK’èögްoÀ±^:é·‡»7M™à…‚Î…úªª*É™3îöÛjp(òÛ¸÷pºc[‹EQœT¨Ûß4ø¢ùOù•e®®«“ ã}„m™+›z÷룎†~Mç :ŽÕ2ö£>_×µDaœEñQ/XÏøý(”Û¶Ÿ7û? $ì]|1 ¼~×-—xô³'ŠK‘N¸X@8´<÷ø¾®kI%…kµåå%ÑWž»ÝW9‹üÄ®«X{5^CþYâöZÛ~ݤ <Û6ïê¼Ø9Þ}×í³ŽmÞYÜPiIð?Ï=~£Ð{xÁ ]¼•áp`ú}wþÍX[ÝŽü$¥%¡…¯¿p—¯(rºpo]•tSÖÕØ¢ ô7²pkùì×îóƒŽïì·Èýúöé¸÷Ž¿ú%áÀK…²QC×´=3íz_×5·K !UURsf>à‡Ã%…²šò²ptêÝWúÁ ý*ŠV²»Þ‡ªÊ—1þ˜ä”«Ïφ‚ÎÓ]cé[U]4ÿ)ß4öÎBDZZÞ{çQ?°³Š"žµãADDDDD´ÙõŠí¯%%Ad2YÀìâòööŽ»ž™þfôçcötÇÚ·P¼€p¬©Çj’e)­ëêJÃÐ3éìÐÆ¦UèWÕ'‰¯‡JKB°m³ùD^]-’$éøp8ø?ËÒ#²$¹†¡5†öx,×ÖV º¦éú%ß÷£ÑXüÉâ²l&ûQýòfhšDbO_‹Fc êëýšþUèŒ/›ËÌû÷2—MïºV_¼ àLµ…¯µnÐ ®[ŸlÎ+ ‡ƒpI!r&”—…ë|••…Ïmj^mí´ýPdsÞZ“kA`[Ƽ.1´kª•e ‰Dª²P¶"uÅáÛÂÀÕ{8¶ÕXøƒÃX|½»ÇÞÿ}vÕúµh{$z{—XçºñDÄóá7¿\×ùÊþºîÉ÷×y©«7žüÀ#ÓÿüØ¿_úMÎË•î7zïá{'ÙKëFþåŠ[fÇÜø`ä“Úžç{hmëÀÔ‡¦§MËèöȧǟ~ ‚¿ö‘]ù{6èF’ÉÌÝÉdû¢KþzËŸâ‰Ô•¥¹#ÛO»aòµKþzÛïÎ_dE£±ÓÙl6UU|ä·Ê¯E€¯iªŠl&' èH²L& QruçDDDDDD›Q¯ØÂ]ݯñxª/¾9¡:xPù˺ÏM$?×Mî±Ï^#Å7gÍË´G¢;{ž7Àýž0tÕÙzàV]›_Ÿ}Ž;F}àÑçã± Ñh|<€;<`ñ€šª®çJo ­‰DjB$«Ž¹‰­ŸiÖ¹Çô§¦òò°ð³Ýw0¼žïû¾·Îyîò¦æÕúÐ! ªr2‰n‰D‡t÷rÉÑßñ>æ´µGO¥ÒeõMûß}ßS72öìø]·^j¤R©“ˆð½º¥Ë0p@µo>.%’©Úšš*46¯Ò¬/Ñ÷¦WL ?[\‡€c©Ž/*–{âïO8Â~â©Wb‰DêUø¹l‚ ä°ö ð~©tfpcóªíÞE ©TÊCÑŠ'9t®’$)°)÷´.0´ès€û£±ø¤™oÍK <@Ã7“¦uÕÒ²ªÕ…‚m•]®µëººxÞ{aРþ¢¢(Ý%á’^yì&ÞÃpgèÜž0?‘HMôá¯XµªŠ,ûÂm‘Ø‹O?7Ó=õ䣂Á })Öþ·íÐZyÅŠ•PU¥ EgAõ´^1N¥ÓˆF]ŲŒ;4MàÌ@Àš»ë¨áUÉd_Ô5tx,Ë\¼¢±;í° د8Ç6õ;ëyÇ6•U«Û6¶û3ßþoòÌñ¿¶mÛ¸^–Å+DQ¼8°„C—Ö5læ»]›eçjªúa8˜£ªò?œ®ªê5Žmþ}ìáûé3^°`=Í|ùe]ƒ6fßÝQ8±¬,<+t^´,c:€ÚööèEgœwµ{Ëuí²ÒÐ?Âaç-Y/0!´î³,³I×Õ'ðÍ ÝªL‘å›4M]¦˜àì c?a›f¿d2 p´zž÷èÌ·þ›©èSŠÃ œ¹Î1 ívÛ6ï¹aòEÎy¦Äb±øU› ÑÑ+ž€D2…}÷%ÞºæßóÒ»ŒÚÎDÁÿÝ.uÝxâhäW5ÑÚ¹ä¤S/Ÿö¯Û/·Wðá¢%{†Ãã³%u™g¦ÏZ[Û‘JgÖúÃ@.—W¶¬3÷ÔÛõ+šëï{èÙ­Ÿyìçµ™s/Mg²^.›SŸ|öu×u~Sóªo<½ju2™l·€hk‹ •Jw­½Cp㉯® ¢ ^yù™Šª*{tD¢»×Õ7%+ú”¨Õý*¥«'ÿË]½º}.€™ë¾fI’Þ¼è’ë÷|Õyf˪¶½5MÁ?oz 麉€WÝxâïcsáeW]v†)ŠÒ>õË›öJ¦Ò^eE™’ËåðüŒY™¹ï~=OÏd2Òê5íëì°¡±e­Ïéf†"CIDAT¥©+þršéˆýº©yÕQÑŽx¦¦¦¯!I‚?vÜ…n2™>ùQ7ž8æÈcÏvÒ•ç˜ãŽ9x×E/Ù¡_UyÈàé¼ SܺúÆ7r¹Üýkõ×´vDDDDDD?5å¶mÆg # Overview Most optimization algorithms have the following interface: ```lua x*, {f}, ... = optim.method(opfunc, x[, config][, state]) ``` where: * `opfunc`: a user-defined closure that respects this API: `f, df/dx = func(x)` * `x`: the current parameter vector (a 1D `Tensor`) * `config`: a table of parameters, dependent upon the algorithm * `state`: a table of state variables, if `nil`, `config` will contain the state * `x*`: the new parameter vector that minimizes `f, x* = argmin_x f(x)` * `{f}`: a table of all `f` values, in the order they've been evaluated (for some simple algorithms, like SGD, `#f == 1`) ## Example The state table is used to hold the state of the algorithm. It's usually initialized once, by the user, and then passed to the optim function as a black box. Example: ```lua config = { learningRate = 1e-3, momentum = 0.5 } for i, sample in ipairs(training_samples) do local func = function(x) -- define eval function return f, df_dx end optim.sgd(func, x, config) end ``` ## Training using optim ## `optim` is a quite general optimizer, for minimizing any function with respect to a set of parameters. In our case, our function will be the loss of our network, given an input, and a set of weights. The goal of training a neural net is to optimize the weights to give the lowest loss over our validation set, by using the training set as a proxy. So, we are going to use optim to minimize the loss with respect to the weights, over our training set. To illustrate all the steps required, we will go over a simple example, where we will train a neural network on the classical XOR problem. We will feed the data to `optim` in minibatches (we will use here just one minibatch), breaking your training set into chucks, and feed each minibatch to `optim`, one by one. We need to give `optim` a function that will output the loss and the derivative of the loss with respect to the weights, given the current weights, as a function parameter. The function will have access to our training minibatch, and use this to calculate the loss, for this minibatch. Typically, the function would be defined inside our loop over batches, and therefore have access to the current minibatch data. ### Neural Network ### We create a simple neural network with one hidden layer. ```lua require 'nn' model = nn.Sequential() -- make a multi-layer perceptron inputs = 2; outputs = 1; HUs = 20 -- parameters model:add(nn.Linear(inputs, HUs)) model:add(nn.Tanh()) model:add(nn.Linear(HUs, outputs)) ``` > If we would like to train on GPU, then we need to shipt the model to *device memory* by typing `model:cuda()` after having issued `require 'cunn'`. ### Criterion ### We choose the *Mean Squared Error* loss `Criterion`: ```lua criterion = nn.MSECriterion() ``` We are using an `nn.MSECriterion` because we are training on a regression task, predicting contiguous (real) target value, from `-1` to `+1`. For a classification task, with more than two classes, we would add an `nn.LogSoftMax` layer to the end of our network, and use a `nn.ClassNLLCriterion` loss criterion. Nevertheless, the XOR problem could be seen and a two classes classification task, associated to the `-1` and `+1` discrete outputs. > If we would like to train on GPU, then we need to ship the `Criterion` to *device memory* by typing `criterion:cuda()`. ### Data set ### We will just create one minibatch of `128` examples. In your own training, you'd want to break down your rather larger data set into multiple minibatches, of around `32` to `512` examples each. ```lua batchSize = 128 batchInputs = torch.DoubleTensor(batchSize, inputs) -- or CudaTensor for GPU training batchLabels = torch.DoubleTensor(batchSize) -- or CudaTensor for GPU training for i = 1, batchSize do local input = torch.randn(2) -- normally distributed example in 2d local label if input[1] * input[2] > 0 then -- calculate label for XOR function label = -1 else label = 1 end batchInputs[i]:copy(input) batchLabels[i] = label end ``` ### Flatten parameters ### `optim` expects the parameters that are to be optimized, and their gradients, to be one-dimensional `Tensor`s. But, our network model contains probably multiple modules, typically multiple convolutional layers, and each of these layers has their own `weight` and `bias` `Tensor`s. How to handle this? It is simple: we can call a standard method `:getParameters()`, that is defined for any network module. When we call this method, the following magic will happen: - a new `Tensor` will be created, large enough to hold all the `weight`s and `bias`es of the entire network model - the model `weight` and `bias` `Tensor`s are replaced with views onto the new contiguous parameter `Tensor` - and the exact same thing will happen for all the gradient `Tensor`s: replaced with views onto one single contiguous gradient `Tensor` We can call this method as follows: ```lua params, gradParams = model:getParameters() ``` These flattened `Tensor`s have the following characteristics: - to `optim`, the parameters it needs to optimize are all contained in one single one-dimensional `Tensor` - when `optim` optimizes the parameters in this large one-dimensional `Tensor`, it is implicitly optimizing the `weight`s and `bias`es in our network model, since those are now simply views onto this large one-dimensional parameter `Tensor` It will look something like this: ![Parameter flattening](image/parameterflattening.png?raw=true "Parameter Flattening") > Note that flattening the parameters redefines the `weight` and `bias` `Tensor`s for all the network modules in our network model. > Therefore, any pre-existing references to the original model layer `weight` and `bias` `Tensor`s will no longer point to the model `weight` and `bias` `Tensor`s, after flattening. ### Training ### Now that we have created our model, our training set, and prepared the flattened network parameters, we can train using `optim`. `optim` provides [various training algorithms](doc/index.md). We will use the stochastic gradient descent algorithm [SGD](doc/index.md#x-sgdopfunc-x-state). We need to provide the learning rate, via an optimization state table: ```lua local optimState = {learningRate = 0.01} ``` We define an evaluation function, inside our training loop, and use `optim.sgd` to train the system: ```lua require 'optim' for epoch = 1, 50 do -- local function we give to optim -- it takes current weights as input, and outputs the loss -- and the gradient of the loss with respect to the weights -- gradParams is calculated implicitly by calling 'backward', -- because the model's weight and bias gradient tensors -- are simply views onto gradParams function feval(params) gradParams:zero() local outputs = model:forward(batchInputs) local loss = criterion:forward(outputs, batchLabels) local dloss_doutputs = criterion:backward(outputs, batchLabels) model:backward(batchInputs, dloss_doutputs) return loss, gradParams end optim.sgd(feval, params, optimState) end ``` ### Test the network ### For the prediction task, we will also typically use minibatches, although we can run prediction sample by sample too. In this example, we will predict sample by sample. To run prediction on a minibatch, simply pass in a tensor with one additional dimension, which represents the sample index. ```lua x = torch.Tensor(2) x[1] = 0.5; x[2] = 0.5; print(model:forward(x)) x[1] = 0.5; x[2] = -0.5; print(model:forward(x)) x[1] = -0.5; x[2] = 0.5; print(model:forward(x)) x[1] = -0.5; x[2] = -0.5; print(model:forward(x)) ``` You should see something like: ```lua > x = torch.Tensor(2) > x[1] = 0.5; x[2] = 0.5; print(model:forward(x)) -0.3490 [torch.DoubleTensor of dimension 1] > x[1] = 0.5; x[2] = -0.5; print(model:forward(x)) 1.0561 [torch.DoubleTensor of dimension 1] > x[1] = -0.5; x[2] = 0.5; print(model:forward(x)) 0.8640 [torch.DoubleTensor of dimension 1] > x[1] = -0.5; x[2] = -0.5; print(model:forward(x)) -0.2941 [torch.DoubleTensor of dimension 1] ``` If we were running on a GPU, we would probably want to predict using minibatches, because this will hide the latencies involved in transferring data from main memory to the GPU. To predict on a minbatch, we could do something like: ```lua x = torch.CudaTensor({ { 0.5, 0.5}, { 0.5, -0.5}, {-0.5, 0.5}, {-0.5, -0.5} }) print(model:forward(x)) ``` You should see something like: ```lua > print(model:forward(x)) -0.3490 1.0561 0.8640 -0.2941 [torch.CudaTensor of size 4] ``` That's it! For minibatched prediction, the output tensor contains one value for each of our input data samples. doc/logger.md000066400000000000000000000043701304650273300134330ustar00rootroot00000000000000 # Logger `optim` provides also logging and live plotting capabilities via the `optim.Logger()` function. Live logging is essential to monitor the *network accuracy* and *cost function* during training and testing, for spotting *under-* and *over-fitting*, for *early stopping* or just for monitoring the health of the current optimisation task. ## Logging data Let walk through an example to see how it works. We start with initialising our logger connected to a text file `accuracy.log`. ```lua logger = optim.Logger('accuracy.log') ``` We can decide to log on it, for example, *training* and *testing accuracies*. ```lua logger:setNames{'Training acc.', 'Test acc.'} ``` And now we can populate our logger randomly. ```lua for i = 1, 10 do trainAcc = math.random(0, 100) testAcc = math.random(0, 100) logger:add{trainAcc, testAcc} end ``` We can `cat` `accuracy.log` and see what's in it. ``` Training acc. Test acc. 7.0000e+01 5.9000e+01 7.6000e+01 8.0000e+00 6.6000e+01 3.4000e+01 7.4000e+01 4.3000e+01 5.7000e+01 1.1000e+01 5.0000e+00 9.8000e+01 7.1000e+01 1.7000e+01 9.8000e+01 2.7000e+01 3.5000e+01 4.7000e+01 6.8000e+01 5.8000e+01 ``` ## Visualising logs OK, cool, but how can we actually see what's going on? To have a better grasp of what's happening, we can plot our curves. We need first to specify the plotting style, choosing from: * `.` for dots * `+` for points * `-` for lines * `+-` for points and lines * `~` for using smoothed lines with cubic interpolation * `|` for using boxes * custom string, one can also pass custom strings to use full capability of gnuplot. ```lua logger:style{'+-', '+-'} logger:plot() ``` ![Logging plot](logger_plot.png) If we'd like an interactive visualisation, we can put the `logger:plot()` instruction within the `for` loop, and the chart will be updated at every iteration. In case we'd like to prevent `gnuplot` to display the plots, we can set the option `logger:display(false)`. In this way, plots will be saved but not displayed. To restore the normal behaviour, use `logger:display(true)`. We can set a logarithmic *y* axis with `logger:setlogscale(true)` and reset it with `logger:setlogscale(false)`. doc/logger_plot.png000066400000000000000000001307341304650273300146610ustar00rootroot00000000000000‰PNG  IHDR€€²GDébKGDÿÿÿ ½§“ IDATxœìg@IÇ'!ôÐCiPP¤Ú{|zÞÙËYÎz§§ž½·óÄÞÅˆŠ HPŠ Jï-”„–¶ï‡Õ\^’Mv£óû”Lfgþ&<»3Ï< A@ D¶ñ@ È4Àà4Àà4Àà4Àà4Àà4Àà4Àà4Àà4Àà4Àà4Àà4Àà4Àà4Àà4ÀHçX³fMjj*Þ*ä’ÚÚÚ•+W666â-!$AðÖÈŠŠŠwîÜ3f ÞB䢢"33³êêjmmm¼µ@ øŸ€!l@$//¯õã][|BËkjjx<^ëò¦¦¦¦¦¦öTUUµ¸Ÿæñx………-ª -l Á~[·ßÙÖZÐÙƒ@¾3 †@:¦¦¦æÄ‰?ýôS[?~lhhèææ¦­­½bÅ .— xøð¡±±±¶¶¶Ïüùóÿþûo´²ÐòÄÄD{{{==½-[¶ ¦®¸¸XEEåÂ… ¦¦¦ûöíóõõE|jkkÛ£GCCÃÕ«W£…AAAúúúvvvæææZ˜žž®¢¢ÒÜÜŒ~:räÈ£G¶îWhû­[›4iÒÂ… Ñ8ޱ±ñÝ»w%±¹sçž:uª¶¶¶s0D.@ HÛ¼zõjæÌ™êêêC† ¹ÿ>‚  %((H°Naa¡ªªjpp0‚ EEEVVVGŽÉÏÏWUU½råJ}}ý™3g¨YZÎ`0Œ·nÝZ__Ÿ——geeuæÌ´e€——WHHHcccHHÈþýûÑN_;99ݸqƒÇãihh$$$ ½\¿~­I"‘²²²ZšššÐvüüü<غßÖíó¿ˆ`k{öìÑÕÕe±X‚„††jjj666¶(@uuµè#vçÎooouuõ9sæ¼yóFJe †@„PZZºwïÞîÝ»ÛØØüñÇyyyüZàýû÷[ZZòßnÚ´iðàÁpuuåöèÑ5ÀB˯\¹¢§§W]]Íd2™Læ¦M›oëõë×íHår¹<¯¬¬ìåË—4íêÕ«û÷ïïÞ½;¿ÎÝ»wóóó[†„„´c€Ñ~…¶~ë­effjjj†„„ ²páÂyóæµÊ7À1Arrr¶oßniiikk»ÿþòòòv‘(8=xC „&    àܹsãÆ#‘HíWÎÍÍuss㿵´´¼{÷n^^ž ¿ÐÝÝ}!´<;;›Éd:88ðËíííù¯Ë[C&“|ˆ HUU•……ÅùóçcccÉdrpp0Ç»{÷.™LFT…–ggg«¨¨\¾|™Çãååå9;;ÿõ×_ˆÀš-ªçíÛ·×®]kñúÞ½{†††è2ò½{÷W®\IJJ"“ÉèRù½{÷¬¬¬ØlvëBƒA¡P.\¸€ È­[·‚KÐh¿BÛGDh\.×Ì̬gÏž6làãåË—ãââ›qÄÒÒÒÖ¬YchhhooøðaÔù>€é˜èèèùóç<A ¥åÆMFFƾ}û(Ц¦æâÅ‹Ùl6‚ Ç×ÖÖÖÒÒ4hÐСCwíÚ…¶&´üêÕ«êêêæææŠŠŠsçÎmnnFZàM›6ÙÙÙµxÍf³ ¤¯¯oii9mÚ´E‹=zTQQÑÐÐÐÖÖ–¿iݺpýúõ$‰F£ :4  µn«}¡­!òÛo¿>}úÄ=›íÛ··hVÄóòòúé§Ÿbbb¤ø×…@p`DTP#ÑÕÕÕqqq•••è[ƒQPPÀãñPO`???ÔDµUŽ “ÉŒ/((C[NNßNñx<ArrrZÔl]XSSSQQ!FûB[;v옷··(šE±öÇ‘k †@¤Bii©ŽŽÎ½{÷ÊËË/]ºD£ÑJJJÚ)ÿ¨®®ŽŽŽîÖ­º¶ÜY¾ã‘@„CQB ÒâîÝ»ÿüóOjjªƒƒÃ¶mÛø~¿m•Ë;ÉÉÉ ,˜5kÖòåËÅká{D(ÐC ‚ð@ 8 0@ 8 0@ 8 0@ 8 0@ 8€®®®NIIiQÈb±bccKKK;,„@ äƒcHk×®­ªªºpá¿äÕ«W+W®433+((3fÌŽ;Ú*„@ äÇD¢'àK—.?>((H°Á`lذaÛ¶mÁÁÁááá=zúô©ÐBÉ”C "ÇH”ØÂÂbòäÉZZZ‚…IIIl6{ôèÑæâ⢮®Þºpذa’ô@ ˆü"‘4h   @0­wnn® ™üõÙÚÊÊêÝ»wB %é@ ¹F",”ÂÂB*•ÊkhhÈb±„ ½ÜÆÆsI`NVV–$—co€544ÊËËùo F·nÝ„¶Õ‚„_ _llläW?r-ȹ~(/äZ<ÀâqûsÀVVVùùù|çꬬ,[[[¡…˜w @dL#·éaÑóæA*‹ž7r›ð–óÑØÌyò&›§íúäMvc3o9qÀÞûøø rùòe@fffDD„‡‡‡ÐBÌ»†@ ²ä=ÅíÙ¤¹±FªÍÝà61žŠ·¨‚ÄôrŸ·~þ3œ«çýóŸáÞóo%e”w|„``o€ÕÔÔNŸ>½oß>OOÏ &¬^½ÚÞÞ^h!æ]C ™Á`×Ï‹ÝXØð_\¢Æ²yqìzUý0X¿ì /*gòKŠ+˜¿ì g6w¬ ö€×­[×¢ÄÓÓ3))éóçÏVVV***íB 9%ª2±¨±¬EaaCéã’ˆ©]Fà"é!&¹¤¸‚Ù¢°¨œ•;Á¯;.’ â½Ö×v);;;Q ¿3äÚ§ŠÇ yŸÅÌZžW_$c%"wƒŸ]X+´<¿”!c%"w#90ª…Ðr3U#+ùA8tèÐÊ•+W®\ùüé-¡L ¨BË•••+W®lnn»D@Œ1UUUxK(/äQ¼ÍÉL­¥­5U5mê‹‹±‘—Áçñx\.—Ëåf$†v]‹OMô©#XµumsssBBÇ»‚ú‡Ÿ½“L|ÿph€1&88o âÅã…<Š×PT¿àº›JQã—˜©]pÛ­¡¨Ž£*1—Á_³fͱcÇŽ;æ3¸¿*åÿö€5Õ•NnB!óššþ; VUUÅ?ùijjúæÍUUUþ§\.·¦¦†ÿ¶Ã (í‹ì”Ç+,,l¿+øþá;ÏÆß?`Œ™;w.ÞÄŠÇ 9ï¬kßCóëS™D |ÁE×_Ib wƒŸW£ÕH2QU¡l_â1}¸€^‘û!汩©iDD 44ÔÖÖ¶G†††«W¯ääähkk3™Ì¬¬,MMÍãÇëëëëéé 0 ®®N” >466ÖÖÖöññ™?þßÿÝBUëNQ‚‚‚ôõõíììÌÍÍ8 ´+äÎ?\ZNXä»§™ÇJ­ùL&‘»kXfÔe¨ùägDÃ[ÔwNNQí‡#À®eý'úuçpxÁ_ÀäÌ¿·®]»†Æçß´iÓŽ;&Ož\RRbkk;sæL--­ÚÚ¯®[ ãÍ›7ééé#GŽ|øðáÌ™3y<^; 4uêÔsçÎ7îÊ•+‹/Þ²eK a­;urr*((˜>}ú¿ÿþ;uêÔÐÐÐaƹ»»·(7nœµµu;_ùí‡â˜äQ'»°F¨øê¿#ìlôDiàÞÛØ£‰ˆ•%`"&IÕ›y¬^ZÝüŒ¼2ê²£+“üŒ¼ðõ=ÃbsÙõœÍ#«só&úuP(dÏÞú¡1ÅÞ£ðx¼k×®uïÞ½¢¢"33SYY9##ÃÍÍM°¿ÿþ[]]ÝÅÅÅÓÓ3##£uG-*”——;88̘1°hÑ¢ƒ¶¨/´S''§[·n™››O:pçÎ%ŠŠŠíë˜ä’C—Ä5B¢sC¢sE¬¼j–34ÀòJ`` Ü­hñâñBNÅÇU%\u{7$U5U™ˆ·"q£ÁßqúmÚ—JªK¿>Ž_8ÈÙ84¦8-Ÿ‹¾%“É<8qâ™LîÓ§‚‚Bëv ЪªªBóâ´¨——'÷ØÝݽEý¶:ÍÍÍkÖ¬~ýúI¢Ð×Öàå¿“_Æå–1Í ©Þ®]T• læ‚amm·‰HNNÆ[‚ø@ñx!â¯ä>Ô¹ë2ûí:A’““CJ^ëÜuñÞº: ñ×Ùs¿3nÓ¯Òk…V ×6Z =g5ì\-£-ÉÉÉ©®®F_ñx¾ÉGGSxM•~öFïe|>Zbii©­­¾611!‘H’h¨¯¯ïÝ»wPPƒÁ¸|ùrRRR ·êö;UUUµ´´¬ÙºäÇ`Œñ÷÷Ç[‚ø@ñx!âãè®z½þþþšŠÔ^ZÝX<ö;yK LäÁ¯¬n\sàAÖÎqqéÕ^í¡^–€P‘Ût CCÃsçÎ={ÖÉÉéúõë=B7n! 0é45ìºÏŒ#‚,ßû¢‚ÞàÙÇdñä>íWÚߊD/ã šY\iˆ™0aÂÓ§O žò¤õ=—u+ª2q ˜‹¶ï€ó÷S¢sµ¨Ê'B¡tn—ÐßËòÔÍ÷!Q¹5ÀL&säÈ‘ .\¿~}eeåàÁƒÍÍÍ}}}>œ““£¦¦vðàÁõë×GEE½ÿ^è°ô²!EU&ìM?ש¯Ó‚ÇÅ‹#D¬¼Þ@,¯„……ùTCû@ñx!_âcª>€o'€Qøú=iN$@Š­úÀâ±ý³ˆ ¡?åsåîbI$°í SCjÇü?C¿àœ­‹=:uô÷Áƒ,kÕªU‚èééM›6íÞ½{>>>õõõçΛ1cÆo¿ý¶råʶ.—j6$/šóz»ö«|å #ÿnahëòáÆ´{ˆÔ^4Y_ =œŸŸŸ››koo¯««Ë/d±XIIIßñ2ccÙeÒÀ(/äKü×ß<°€€~}eÝ®Ÿ¹É5.ºøèë$ÄüúFö²ÝÏÙÞüqöž–b´àØÃÀ˜¦^TÆü˜UÙ«k'r3ggg3™L‡ÿþdööö]»v½xñâÁƒûí·^½zýñÇãÆz¹T³!õ×uM˜Á®¥(l(,4U5<åò‡4ö€%G*^ÐôööÞµk—»»ûÞ½{ÑÂW¯^¹¹¹íܹsèС۶m“F¿D@pËP<^È—øxú×$HüAýèi`9:ŒDœÁßtäMva­µîÆb´%‘€Ÿ‡èȺ5ºººùùù 'Ož,))éß¿\\\YYÙ”)S~þùçÆÆF¡—£Ù‚ƒƒsrr‚‚‚ÔÕ¿Z;Ö"÷QëlH………ýšm¡¡¨~Áu·©ª!¿ÄLÍè‚ÛnbZ_ \SSsæÌ™[·n…††¾|ù200022’Á`lذaÛ¶mÁÁÁááá=zúô)æ]C iSÐPRÜX®­¨Ù•j!´ÂW\!7˜ \{’qÿÅuUÅ“›‡(+ Iâ+"¢Fj¿¿uuõÕ«WÉÏÏ>|ø7FM§Óõõõ‡ÎãñÐÊŠŠŠuuu‚—$ÀY×>ÎÿN Ûž?Vºí‰õ»M蕉ãQ·äÆ#FŒà¿7oÞ^½zåììÌårÑÂE‹-_¾\èåòžŒ¡²²o âÅã…‰¿ÿTç®ËÔ¨•‚…‚úK+t?Èæqd®Nˆ0øŸréÝGž7÷;s7ÀzúpÑ"M´¢-ñhzàÎúBËy™öÒû@fff‹-Zºt©’’ƒÁ8pà€¦¦&àôéÓ‹/>}ú4ƒÁX»v­½}Ë(²ß£FÂ[‚ø@ñx!/âãèÉ7À(­õ{é;çç=ŠªHtÐê.#qâ‚×àï<“”QÞÅXsßêb7Ò–x?K …ý¡¸–Ù¬EU»}©"/Ó^zH+›ÍÎÉÉéÖ­›àÖ=‡Ãùüù³•••ŠJ›ëWp!&<„gýÈ·ŽÍLöÄXU¿ýÊWó‚—%ü1Òdð%÷}²‘'_¼ˆËŸ·%DA|{ÿ(瞆_Ðy¦­•TtdƒÏ8Ÿ®ÒhBÄ=`EEÅîÝ»·pœ£P(vvvíX_BX>ÖeÕ±™ê&Z_ ‹·[QRY¿z_‚€ \¥d}Á·UèШ)µ‘iàþÁyŠÇ ¹WõàªÛrýÓo©nj¦fTͪûÄ ºñàsyȪ½/éµMÞýÌ/d0;E;â<-I$ð2® ±™#a/RB.¦½TcJJJð– >P<^È…ø¸¯! [z`6ô{è9y -ãÁ?t)!úC±MýÐoÞJX$”vÄÑÔût7hlæD&IÚt‹i/U Æâä5(/äB|l.Р ý^úÎ@‚BËrðc’KNÜH"“H‡óÖÕÂ`3®}ñ_}¡ º!Ó^ª@ @:¦¼©*¯¾Xƒ¢n§)j t8º2Rñô”;ªj›–í~Îå!+g9{:šÈ Çaý­á1ù.܉'"ÐC މ©zpÑsP ‰úOÆÚÅHE¿¢™þ…‘'Miò‚€µû#ʪÜ{/›ÞW6Z›iÙ˜kW×5Å¥–v\"s Æ¡ñ5å(/ˆ/>¶*´áÚÖïA“ƒm`Ù þé[ïŸÇæëi©Ûè«@–xï÷Šÿæ ‹UBüi/m¤uXlà9`„€øEÌK §Þë|°A'rÅÿ›}gíû½ÌÎõÛ)=mÄçý§ò «r¸¼ó;†¸ Ï£,%>|ªµì¾M=öê É}¾ ‚÷0ùnhâ6§Ô|R ‘tzuêB/š3 ²"A:ºäƒ:&ë×]ÏÙÞâ‰}dl}½»ë›èSK+ëS>WȸkH‡@ @: ±ú#‹Çî©ÙUS‘ÚqmºkZê+ë–5Uf3 ¤¤øl:ú¦ ”ѧ‡þºyýdß;‰ü=-¡Ñ¹²ïÒ>ÐcŒ`rP¹ŠÇ ‚‹G ¹¶ ͧ-ý$@r§9¢ ¼ ,ÕÁ¿ø0íaD–†ºÒÉ߇(R°ÿ+Šx4=03|ÚËh€1ÆØØo âÅãÁÅǵ}¥ýü˜”Ò† ÒüŒú®s“m»/ IDAT±€¿–÷77ÒF¢ˆwëm¬«¥ò9¯:«°FĆàÓ^@Œ1xK(/ˆ,È;z*h#J;úQLäm`) ~CgÉÎð¦fÎÌ‘=ÇxK+‚(âÈ$×.€0‚=yÚËh€!H{|aäU±jŒTô»¨‰ó¼ÒS««®’VQcY~Ãwð÷c‘Y5=,u·.vÇ[‹|¤þcªªªð– >P<^Y|;(ù´£ŸHîhPh¢>Kcðï<˼û,SM…rjóeìÓ®óQü@g35ÊûOå%•õÒÓYˆ<íe4ÀŒ·ñâñ‚Èâc¿æ`h/oOûú½ô¿Æ¤ÄVV`>ø9Eµ[Gþ\Ú¿kmloˆâU”)ƒ\Ì<{K ¨dDžö²â€@ íáúlâFÞsï‹}uzŠ×‡š ﳬÔÍîc«€°ØÜ1+¤}©5ÈæÄï¾xËù{Ï?¯Üû²¿“éµ=#ðÖòq@ )BgÕf1òU”{iu»{­îZŠ9õ…Eej#&;N¿MûRii¢¹wÕ¼µüCÜ,)ä˜ä’F3ÞZ _´I\U2g^JdE±Q ‘Ñì·•IØI#"O#s.TRT8¹yUM o9ÿ‡&Uɽ· ‡Ã{›·ÈW ƘÀÀ@¼%ˆ„GOy`ôù40Vƒ_\Á\è5`ó"wû®4LÚìN‰J°ôÀ„ö2`Œ5jÞÄŠÇ Šï0J‡ú‰l€1|—÷ë®ç5Œf_·.sFw.b¶$tJüP/K2‰ôê]aCGz’D‡°Ó^fHËs8œ˜˜˜êêjÁB‹ú=g¦ÔÓÓÃ[‚ø@ñxALñlç}u: úµ‘…O‡úûèØQ)j_y¥M„K €Éàﻟð±ÌDŸzpÝ`Y&ê”x}]5G[ýÆfΛÄBéIbN{Y"|õêUww÷;w0à×_E _½zåææ¶sçΡC‡nÛ¶MýB  ùP“ÞÈmê¦a©£¤)aS’B?½Þ€˜ÊXH#¯Þž¹LQ ß䣣©‚·œö j\èì pssó¡C‡>üèѣׯ_GFF¾~ýšÁ`lذaÛ¶mÁÁÁááá=zúô)æ]””¼%ˆÄW%Ò0Mÿ·UhÂ…ãpð+«Wïà!ÈÚ9..½Œ°R%"?¬¿àÙÛ\‡'E€˜Ó^–`o€«ªªjjjLMMÚÚÚšššt:=))‰Íf=@£Ñ\\\BBB0ïš””Èq¼=(/ˆ)^”(¢è'ì6°$ƒÏCå{_TÐ<û˜,žÜñ ætV¼¥‰fw :&+6ÿ)GÌi/K°7À&&&ãÇÿùçŸ>—Ëݽ{÷Í›7=<urròññAäòåË€ÌÌ̈ˆÌ»&kÖ¬Á[‚ø@ñxA@ñq"{`‘õ»èÚ++(}¬Ë¢³j%‡)b þùû)aѹZTå¿ûR(x†3oæ ÛÀOßà‹€Ó^Æ`?uüýý—-[¶~ýzOOOWWW##£eË–©©©>}zß¾}žžž&LX½zµ½½=æ]C L`°ë3겔ȊŽÚv6«LVrÖéÅCxè㵜’ò¹r÷?±$Ø¿v™¡ÞrÄ¡Ÿ½‘ž–JNQí—ü¼µüÐH%SôŠ+–/_ž‘‘A¥RÍÍÍÑBOOϤ¤¤ÏŸ?[YY©¨ú¬:òƒOOæ"<'^* ÊØ¶ìEsŽ®LŠªLf<Û–eC}#{ÙîçloÞXûOK¼åˆ‰™äënq+ôSHTÎÒ.}ñ–óã"­Å‰dggÇ·¾( ÅÎÎîû¶¾‚^ìrDÿmýYÔƒ­¢ë' V§Ó‘7Ù…µvÖº›~r“ž$Ñ{æ|KÌ‹¡˜ÎB´i/{`2ŒáŸF•G x¼ šøØªNlƒÎèwÕsP"+¦Ô~ªe3ć5¢‹¿ö$ãþ‹/ꪊ'7QVRª*{æ t6£ª*¦|®(*gb+Itˆ6íe4À˜ÑØÌyò&ûí'äÉ›ìÆfB$é,xK(+¸/ž pÕU•èúUTuì¸=æDDŸ™W½ãT4`×òþ6fÚR%*bÏ%E….æ¢s1UÔ 5íq`lHL/÷Ypëç?ÃwžùùÏpïù·’2à;ˆ\’Vû™Éi°R73T‘JR[ÂÆ¤l‡fwÙîçÍœ)=Æû~'1 ÐUèPü 0` `6°~Ù.¸’S\Áüeg8³…£*1à‡d“G x¬èÔ `”Né'šEüÖQéÙtk3­m¿xÊ@’èH2s|ݺ(RȱÉ%ôÚ& %‰¡¦=.@Œ1É%Å-÷QŠÊ™¡xŸsï,ÁÁÁxK(+:u¥SúÝôú(’)ªÓ™œ†N‹“Š‘uýi†Š2åô?ªª¢lT‰ˆ$3GC]É«¯)—‡<ÍÇP’èjÚã4À’ÒÔÌ ÎúQ~)QÜLDdîܹxK(+â:é:©_¢æ Õƒƒp㉱ ܾø¼âº ‡ß¶ýìak¥+#M"#áÌAORáµ M¨i ЋI9½áÚ“ŒÛBûL¼t3$ChÚz9[‚†@J›* J4(ê=4¬¥×Ë·˜”DY…n 6‡÷ë_Ï™ ¬‘ƒ¬gŒÀ2& Að÷° “H¯ šäÒoTÞ‘J Žï˜Ì¼êç1yÏbò?–ñ¾…¶¶é¢]^ÙÀhµãûï½”˜÷Å˦÷>Àf‘Íœ—qù…eL3Cª·kUe8«Å'¦òÀU¯·IŠwç^4§c™—‰o€ÿú'69³ÂÔ€º{żµH}]µ¾v Ë^½+Öß o9?ð ¸cšYÜÈÄ¢m'£Ýg\²ðöîóqïÒJ•”ú;™n_âwmÆË&_Ù3ÜDŸÊ¿ÄDŸúËG]µÙUKv†[#|™šP¦É”¾ÿsâŒ|ý«îÔUÕï®ç¨@"'Uläâãþ#H[â_Äåÿ{?…B!ßä«EÅ8"VH>sии8¬gÚãöù€%„8ù€éµMo??‹É ‹Îãû3ëi© êgîçn1¸Ÿ¹úÿ»c Ïa™9åÝ­ Ðç°ÆfÎõ''o¾/§7œì –Në;Ä݇/#UUUzzzx«èÌÖ…wZxÀ™PŸHUSÂK•gä}_ÎNªNpr ~?ѯC¿÷‹Yj2:Û‘4*¾¤²~Ø’»ôÚ¦-‹ÝNèÜíˆ,‘|æ”2¼f_פ*%Ýš­(ÛÄÄ™öâ!¹µ‚‹u-IϦ?Í É{ŸQ.2“HÀ¾+ÍÏÃbˆ»…}WZ[‹ÉªÊ”ᬇ°,™?Î~ê0ÛKÁign}HL/Ÿ¿5Ô¹§áªYΉ˜@Tî~ íøŸOð뎋$ñ ÈÈ7q›Sk?+ÈÎ:½:u¡ú=iNj2¢+q7À­Ås¸¼e=§×6ù¸vùiËüùÏp‡qV?–Íß:~Õè¤"Œ¾ ´%ž˜0XyÅuB?21ÿ† 2òb„à@C¿‡^_2‰üŽžÚÌÅù°@ ñÑï‹_OR “ŽnðÑÕ"zæLfN€— ,:—'ÛI‚L{ùŸ€?çU‡Çä=‹ÉOJ/ãò¾N¸^6z¾nC<ºôî®O–ষ¤¤¤§êªŠK¦8ÎÝë⃴³w“ߥ•N[ÿ¸Ÿ½ÑšÙ.žŽ&bwŠí‹'>U\{’þàå¡g')ä¾= d¯J2òb„à@C¿Ž’¦¦MZíç„ê4OžñÅWÖ4.ßó‚‡ «f:»÷–ƒT˜Ìœ^6zæF¥Œ÷Nv²ûídÚãÈâ„õß"stnVÁ×EfŠÙÑÖÀϽK€—•µ™æ¶OCçÆÓŒã7’*«pQºC˜ì‡/¿\y”žú¥-qèFàlv?üKIå×`E ™Íáéj©œÛæßÏÞ?±ò®†T³êR†=2U5”A>ì?›uscÏÅël’Aw‚ `þÖç±ùnÆ7öT ÿ«ÏßøãôÛî¥,™Üg#1Ò,Ê’[«ïÜ×0š£’ŠžÅä…ÇäÕ1¿®téhªx:š qëàe‰»¯l}#ûfÈ'¾véeôË”>Ð ·às^õ•Çé·C?1ÙMªÒÈ6óÆöêa© þÿp?ãuû_½ˆËWVRØ¿fÐï®xk—2ê²=ç«ê§ {"›ƒ‹^̉]?ÈÀõ~ÿ²é±}NÝ|¿û|œž–ÊÓSŒhêxË‘)q©¥W?´4Ñ|8o-rô‚N~I]xL~xl^Lr ‡ÃC »kúºuñs·pïcLQ Êæ·ºªâüqöS†ö@Íð»´Òù[K]z­žåÜßÉou8ÓÌâ†Çä]}’™øu§Ü¡mÆ»ñ¾ÝT¢m þçü·ÿìðßqêíŇiË÷¼È.¬]5ËYÖºåtýÙ]ÏQf=zÐú’)®*™Åc+‘qޱüþSùþ‹ïH$ð÷êA?šõ¸ô2Ô×UË-®ËÌ«în¡ƒ·œ¢Ø!ÉáòøÔÒÝçã|Þî?çÆöSÑ‘‰Eqée´qëË'G^œºãÏþN¦Rµ¾ã*Ô ¿ œºq«¶†ò»´ÒéËÞEK<ñÒàs^õîóq.S¯,Ù™X¤IUš>Ü.ìÌÄÇ'ÆOn§",Ö_®Jœ(âé§)ëtÓ°lä6}¨ÌUÚ 9¼g,;v÷Yæ/;ÃÙÞ¢‰½ý<äiý «™C&‘†¸u„Då`Ò (aÚã‹Ü/A74q¢ß…Ç䇽ÍEWqÚÊ^}M‡¸uñ÷´ÔP—§€ €úFö¥‡i§n}¨a4\z­™íìÕ÷‡xnë‘wœo71L¾Œ/øug8³‘ÝÏÞèÜ6â{´âK¿°ñYÌ‚>—µew0hMÒž 9w·öúue¹2ë%1½ü×]ÿ—E´›…vÈ©‰2FA^ÄåÏÝbß•öääx¼µÈ?îpA)ãMbá³·y¯ Ù­™{SäüW„šá“7?Ô2¿šáµsá)-%¾ä×Ü~–yýI:zÛ¡¡®4j͜ѽì¬%Ê?ó1»jþ–Ðâ ¦¥‰fàÎa²wµ“ªX5Ýù«RTrG½¤dÖï½Â°Ÿâ~÷5ô¸íuTf‚6b¨ꩽ8³ÕO.ΖȞ˜Ê÷@\tìei}^4'@LÕ•e×Bc¨•U5È] 5 QRTðîgü*ëÙÛ¼ùãìñ–óC€½¾xñâñãÇKTTTÒÒÒ^½zµråJ33³‚‚‚1cÆìرC°9H€Ÿÿ 7ѧžÚ2¤¯­€ÙÀzõ®ðYLÞ˸‚꺯¡Ûµ¨ÊÞ®æCÜ-»˜kR tÇæïïUkTUÅ%SgŒèyþ~Ê?÷RP3<ÀÉlÕ,'—^ØŸ±ÁV|ûdäЯ=I¿þ™QÏhR•& é>c„Ø m‰7ÔS»}`Ô¯=›?sã“ýkõ!œk´,G^(bŸF[¿¡ ͆jžÅ,H©ùÔW§§x½‹ÁwC Û™àeü*+4:W6÷i;Øà•+W._¾œÿvñâÅ®®® cÆ Û¶m;vleee@@€»»û°aÃÐ:ÌÖ/;ÃoH‹+˜‹v„-gÿ&±8&¹˜¿ÈleªåçaáëÖ¥Ÿ½q<™16ÆþK“ª´j–ó‚qÿÜK>?õMbá›ÄÂÎf«f9;÷Äò¼¦4Ä· ©™óèuöÕÇé ËÐ瞆3FØh-ÔµJtÚ¯®ªx~GÀ§ß^J]±÷ENQíʙ΄ 1(ƒ‘oŸ¸*‰ °$ú=iÎYÌ‚¨ÊDYà¶6#ä.†¶3ÇÇÕ\IQ!.¥„^Û$Ÿ ܧ=îHwøÆ¡¡¡.\xýúõêÕ«ãââÈd2`ñâÅ***GŽA«…ÇäÍßоVÌÚ˶Y/؈™ÔÏÞ Secöý,2‹G-³ùŸ»)çï§¢ š¹˜­šå"Ëà5b“™W}õqúÝðLô@¶†ºÒxßn3FØÙZI´ËÛ)¤í8Íå!ã}»ý½z ’¢L—[ K3eìÍⲿŒ ×QÒ”qï·òŸþünk€Qÿ랇dÖ)³å·èŽ ÀDŸ~NÎòhaÎÜÍ!/âò÷­4% ÞZˆŽä{ÀR|ˆ,((Ø»wïæÍ›¹¹¹666¨õXYYýwÀ¦­å ›®PBÎ>vkÿ¨Å“zÝ<Ïÿ(,,ŒG´ªªJ0¯d```UUú:%%%,,Œÿ‘ ×»œ¶ EU•¯â®ÏظÀU“ªôê]áØAãW=ŒI.!æ·(-«xü:{ú†Ç~‹n_J­c²ºÑö¬0˃þçR/ÔúÊl$­yËÇh¨+Ý{þyʺGî>(³q r Nnkæ²l5­u”4e¯¡¿¾3 ¢8–‹ðd6T5¥“›‡¨(ýwfj@ío]η¾òû×”°OK@HdŽ\ i´`Ó 1R|Þ¸q£²²òöíÛýõWVVÖùó_-è… îß¿ÿðáCôm[OÀòx&Ë —5Œæsw“/ÜOEãCy÷3_5ÛÙQ‚0ÈØŠÿ’_sõIúÝg™¨c3UMiœo×#ìzZKe|DŸžMŸ·%¤¸‚ia¢¸s(–UðMŒzüó•­)GæX;Ôw“x-H¨¿o蘼úâŸ+½µe÷{Gà:ãjYeýÌÝú;Yuü$>˜ÏœÊêÆ~Ó®P(ä÷·g·HyŽ90°´ž€ËÊÊîß¿?{ölô­††Fyy9ÿSƒÑ­[7þ[÷ÞÆ¦­¶^Lô©#XIIžô–Y_ÚÊëæö‹¾2}Õ,g u¥—ñ£—Mßðøý§òŽ/&âYl.úÈë»ðÖù{)5Œfô‘7þúŒ]ËúKÉú‚Έ·³Ö}xllŸúyÅuc—?ˆþP,%I¢#ËiÓ±“ ñ‘P?ê U™(I#%åsEYe½©µ›fÞðÖòh}fMGÕ©§a3‹_€mË­ÁwÚiàëׯ÷éÓÇÚúk€@++«üü|þÓvVV–­­-¿2º$˜õÏÔ€zróyÜŒ™;w®Œ{ÔÖP^5Ë9òâTÔ G&‰m†%Ÿ]X»û|œÛô«hø*uÅéÃížœ†¯’öÝt§ÄèªÝ90zô`›ZfóÌ O®<ú(5]"!ûi#H<=àª+~æy õ{ÒœѲ5Àá1y€!îóæÍ•e¿Ø"™3ÔË•‹yË-ÀwÚKC ðäMvc³œl""­›¾7oÞðßúøø rùòåÙ³ggffFDD,\¸P°~_[ƒ—ÿN~—¿lîÞÓ[†ÈérŽèhª¬šåcLJJŠƒƒÞ*„£«¥²q뢉½ÏÞI JL,™tÏǵËðÖ/½ã‡å3ѧžøÝ·±‰sõIzHd—‡l̵'ûwŸ:ÌVG“ ;˜Œ¼’¢Â¡ß¼-L4_IØz"*§¨vëÏ d©»Fã5m0Yé÷¤õ½WU™Ø]CºÐH~î_W8ˆü›íé‰êeyöNò“79¿/t—Fû@>G¾¤¢¾±™K$|]œ75 žø]ÌC³ð cJJJð–ÐzZ*¸F_™¾dŠ£Šåylþšý‚Aq‹+˜×<œ¾áñã×Ù dô‘÷åùÉK¦8ÖúìFžD«f9ß䫬¤p!(uÞ–4ì¶TÁkÚ !8ÄÎÁÀý^úN@ú~X<y_ ÿ7ÛÒïÔÓÐ@W­ ”‘‘#-—yù-Ç£¸\Þô¶§· œÞ2äÅùÉbGã—n21€ÇdI9½aã‘7èÈé©-™â8aHwBe{”%±)%‹v<«®k²ïJû÷#š:ÞŠ0†ƒp­‚}8#Bô•e—£-29îÏ&ªÐÒ‡?•^âàhÛ IDAT/‰éåcWu1ÖŒ¼8Uz½|l8üæÚ“ôÕ³]VÎtê¸öÀý_Vìy¡§­ñïd-ª2qCQBä]57áÁ¦ ·›7Öþ‡µ¾7ã #c¬Í´R¿TŽ^ÔŽ÷¸œ’Z›YÏi°¦šÁúºiXê+ë–5Uf1¥ñ[,ÙyØÉ/hH¬P¸ €ÙÀÚu6ðûB7-*6î/Ðÿè|7‰Q¥•©VБ±î½K+ë'® Fÿw7H[H€äAë ˆ®L^/_ ° €Õ1^}M5Ô•Ò²ª Ä:có±ÿâ»rzC?{£ CºcÕ&4À#˜ÁJ.øn2aHiäµ5”¯î1ѯ{}#{áö°S7ßK£\¦ ê%a¬ôKû4pQ3#‡®¡®äÖû¿…¹ûÍ "Uñвk µˆr4òŸré—‚?*I.õÂ0^-4À³fͼ%tŽï&†ôF^‘B>¸nðö%žvŸÛpø5‡Ãö \¦ÍWh] 0VúQ?¬È i=‡½Í v1 q,w¿YA¤-þkb†H©¬BËËÈ#Ør<ŠÃáÍkm>7x ò_&ŒÂ2¦™!fÂÊüqöF4µ•G\{’QPÊ<½eˆ†ºœÝ£RØPZÔX¦¥¨ÑMƒ@‹±vš6zJÚÅåyõÅê&˜·ÿ ]ö ÐW&8ƒû™++)¼K+« 7èëªá-î<ËŒI.¡é¨®žåŒmËð ªÊ”á¬Mì-¿‰QeÀðÖ7÷¤é¨¾I,¿êaa™oŒ} Ý[fÙ‡DHî4G Uhf+6¹DLìb†yãß+ꪊýûšò$<6o-øÀl`íý7°u±æ÷Üúí}„……á-A| øékkðàÈØn:Ÿré#—ÞO-ŤYÙü× ` r ‚¡~ϯ© ±_…Žˆ/dsxýìZg‡Ó¾}†ö·ˆ—l }äbä÷œ+§7¸ÚñÆ>O4Àcl,üT\Å‹‚¹‘ƃ£c}\»Ðk›¦oxüàåÉÛ”ýÈcë¡~éùa};€ÔrýNûöñ÷° (#“Š0HCü‘OýRyõq:EüçÒþÒÈ 0ÆÈ]d5A x¡ª*þ³ÃÎè^Í,îò=/]–ôqMÆ#ßÀiL«ýL!)ôձäA õÛkuÓRÔÈ«/.lÀfu…ËC"Þý_,>pÚ·Ž¦ŠK/C›‹FÂ<A¶âòŸÆ;ØYKå¬<4Àˆ8PÈ.õھēH‡.'¬=ðеk´ôˆ§§r®ƒvu áÜjÈ$²»^ÀÛ*,O|½K+¥×6Ù˜i·uðÒhvÂÈ\¼…È”O?%|,3ÐU[>£¯”º€cªªªð– >P|g™?ÎþÂΡTUÅ[¡Ÿ¦þöˆ^Û$^;2GGן±ÙXë÷ÒwDazéëú³‡XpÚwH€§%‰^Äå7³¸6K䑯a4ÿ}!°ãOéÉ„c‚ƒƒñ– >P¼x÷3¿sh´‰>5>µt슠¬Â1‘±øoX˜ÅÀÂV¿'­/Àz8üm>¶þ à´SCj/Z}#;ê}†Íyä÷œ¥×6õw21ÐZz½Àd ”U5ÌÛ’ú¥R[Cùì6÷ÞÄõ.á!¼®üjØu©Ã›¨Š™ÅEªp®u°“Óðqø#}ÉÌ-®8÷†¶†râ­YøÔ!G¯%î|7m˜íÞUñÖ"u’3+F/ RP …™hc®ÝV5˜Œ!†zj·ŒânQÃhž¹ñɽðÏx+j“ Fv »Î\͘˜Ö@!) 2ßVb³  ðqí­¯ØxZÂÞæ¡ ¿cx²ùXAOêÓŽõÅiMG—Édþ—h–ÅbÅÆÆ––béÜuUÅsÛý—Lqd±¹«ö½Ü}>Ž`«K_!Z¡`{©­HÑéa©km¦UUÓ˜ð± o-ÒåÊ£ô÷ŸÊMô©K§IË÷ŠT pnn®§§çîÝ»×®]ëïï_^^xõê•››ÛÎ;‡ºmÛ6iôKñ– >P¼„(I¸îY9@L>uóý¯…75sD¹P–â¿å`ÀÌ HAÿ7ŒV-³ù]Z…Bè,<fŽØÈR¼¿‡%À4.4G¾º®éÀÅw€¿zª©H=& öAõë×OŸ>ýÎ;¯_¿îÚµkPPƒÁذaömÛ‚ƒƒÃÃÃ=zôô©snãȨQ£ð– >P<&Ln¸s¨†ºÒ£WÙÓÖ?®¬iìðYŠÇ6 æúûêôT£¨fÖåV4Ó%lêE\‡ËsïmÜVrkâÌ1¥ø41CT.VK;ùgcªëš:›¡KîÒ{œ““óîÝ»ñãÇ”””Nž<9iÒ¤¤¤$6›=zôhFsqq Á¼k" §‡e® ÅcÅ@g³{‡F›R>–]ñàK~®Ñ2_ÑLÏ©/T§¨õÔÂ2®æúÉ”~ºö@b$Þ›ðk{ý™P3§³ÈR¼“¡1M½°Œñ1›ãCDù„ewže*)*üñ«—lzÄÞçææš˜˜•ƒÉ·Ø¹s'qFò⃴´¬*]M…Ÿ'÷Ú‚M+€ä XsñâÅnݺ•––¢o÷íÛ7räÈ£GŽ9’_çÈ‘#«W¯æ¿­c1ퟌйë¢s×ÅÚÚ}áðtd‹‰¹®æ€goó$o8#ÿç™·uL–Ÿ‡…¯›H[Xm˜bo€===©Tê¿ÿþËf³‹ŠŠ‚‚‚|}}}||¹|ù2 333""ÂÃÃISøß2¯˰gŽL èqy×0MªÒ“79SÖ>ª 7È^ÃûšôfËVÃZS‘Úqmàõ57°˜øs^unqž–Š£-ACŽÈ#hb)¤Æ‹øÔÒ —_T”)Û—xŠR¿Å†©kØÄzªx]co€ÕÔÔ:téÒ%wwwoookkëÅ‹«©©>}zß¾}žžž&LX½zµ½ý÷à6Tá÷§fªF˜Ëƒ@ð«¯ið±qV¦Zï?•Xz?-KÖ‘ècªÞÜiŽ2îWl¢T;ñùÊ–”#èk¾µ¬·[¸ÞnQg%4¹³®}œÿ@·=4wjí¼EA RAIQáÐoÞ¿Nuä!ßúŠ+˜¿ì g6°Ú¹Vl²™•ÍÕ*zrd}ýÑÜÀ_…~›Ïå!^Ž&ÐúbÎ÷.rdRQS*sUfl?õ–QÏ>ÀJD다´IøÎ‘x¦D1ÀUtÍy½ÝbÀåÜ .ÂÃ["H$àÜÓ°uyQ93T:î-1òƒ¡5žz}Q6À0ƒôÐÑTqµ7âpx/ãóñÖ">QIEÁ¯²T•)›¹‹R?žž2ìÕO'2¯´þHì S`> \¬©æEe¯ËãðÖÒiO‚ËP¼,É.¬Zž_*Î~g‡ !8Ü0 ÍGzƒïª×[‘LI®É`r:áòÃbs_¿+$‘€§Jänæ‚—x~\hIÁqäÙÞæãQ€•3Ì ;ð½úÂÈ›»1 b~\U²±šþÊîsLUÿ»{6S3ºà¶[CQ] D4À$@šÖe$àrÞ¼µtccâfbï(^–´îÎÄ@*g„¤š…Pzƒ¯NQë­mËA¸qUD¿*&¹„ÙÈîi­g*Â`ÊÝÌ/ñ^–$ˆˆ/hfqÅnÇ‘?w'9« ¦kíŸ&´wKZÅªÙøá€gø”EájÕÝçÄúÝÙj¿”¿aè¶'Öï¶‹¸ŽD4À€Y–c($…'ů*›«ñÖÒ9°w1•P¼,qïmÜÚ<˜èSG °Â¼¯vÝfž²‚’ƒvÌR|1r£a"üއb |4+•;'çVóºE£ÝÌ{¸ÌИ9dá?ÚÚÄ]TÖ\R٢賄‰?x*·¬½Z;"å;ÉŽ”Æ–a”ç†äàSsmƒ‰ÐênÀ°Âyœ*¿<èö…¦co¥ïïeÍëÅ$=Á¤Aô°ŸéhhvQú@3Ð2¸‰°¿{ÐXTþ "a2èÓý .EÕòÀ8‘_^õíÓ#¼7Ïpmî³Úº­ÌžyþC·•ê”F x¤Á0ã‘­ÂöKÕ7ÉÖ28štj¹”x²è) ÅÂjM¡Œß `ß”e4ÂÀ¹KÜÛüPæ 73”I€5dfYÌ t€kНBã-^ þöôŸÐ´¥]£s€Ìµ N 9å¹Á@ —tëJ  ËæÀÉÒ‹d œš,Ãg†O=ÅÏ™âb Çºû îq¹Âkz}y–‚ç].bàœ”Å 56æz#][Ø23‡,¦úÚé°™9êk;/ŠŸx U âmÌÙ-`ò´kí/øÿr̃ŽzÞÐ ^d¦ËÔ¹Ýõ¤£‚l-ƒJ¶å¡Ä“EOñlmæœ).ðWœª/Á"Þƒ¶ÇZt¦±‡ŠM 1ƒ8 +šKÊ™9dÁÑfNk‡ ªØ*4Nâѽ«Ó·•vV±ÚMØWC÷9ìœd‹WUÐ Öeê̳ Bù£L3B±((TaQèø+¾H$R2Ë.JVS‘Œ6rW¥`‹ú€¾§só„QßOãÓ¨ ¤†Ey`Õy©p/Ç|&o)ë>¬qoÎÆ÷P¥Ñ †ç‚O–]”ùÝ£ JŒi9ÜѸ±¹ëf¦JK>x×`  ¶©«žC§ˆWÐÚ{m ŽË{PÒ¨ËÑ #£¾ Þ„81™ôÔüêÖrBeûî=3ê×Ì? è@ß±aƒ®¦ˆ¸0—Ë}܃ÎÎg ==½¶¶V‰6ýMÇŒ0p®ïæ&Ô¥`*cöïßO¶å¡Ä“E_ñ‹BÝ@åP,4–?ÎX@àà?Ûîs8.¥A`Ê8;mCÑ6‡ØÌ!=–¿—µH$¹‘¡ÀŸŒ˜ˆï¯pïW‡sBñ›³ÝÇzX¨Þ ^ 8°uëV777çÄÇÇ#’˜˜èíí=gΜ1cÆ|öÙgý=ëââÒßG?0>ç»4eš)(ÔŠ†&žó¬£ÎaGë¹Êµ –ˆ/N3>ç[Í«ÇV‰œ)¿j|Î÷äz]_±ýŠ}Èá3× IQE Hô…{ö!‡×}GXb‰ø|eüè«áÆç|ÏùλýþýÖbô£‹‰íC{-ˆæ¶tá'`·’\Þ€KKKþùçÏ nooŒŒŒŠŠŠ‰‰IHH¸téÒÕ«WmöMÇpm:+¾6¹¶»Ùꃙ1g†ŸƒH,ùûúcåZxÐVÒ&ìpÔµ±æÈUW#@߀Ӹ¹bäÅî8¯[”’WM§Ñ¦W ¶Ì t¢ÑàfFEŸˆ]Â^…{/N>ôϤƒ# †@G—pÇá4ؾÖßÄP­£p1ಲ2ôO镜œ¡Pfff¾¾¾±±±Š6kÂ2 ³ž"BÄ”]ÂR.…Z²8Ô N]}¤ÜãClņcá¤kÛ&ì¸×#7í­»•|ØÇÃÂ̘C¢¶W+3Ý1n]|Ñì*\;’Y¸w’ù8é ÿ;q·¶±sÌsôH½:ƒ½óx¼ÆÆÆÈÈÈQ£FM˜0áàÁƒ‚”––ºººÒéϺsvv®ªRæi¹Sœ(=/ATŠŸ8 .ÜD‰' ™âgø;X˜è”T¶d?¬W¢MbRp 9øèKpÏÚÀè¤e㟇ÞÌ! EóB+*^žÂ½ÅeÍ¿ž¿G§Ñvl˜HWôDá`oÀõõõ666‹-JLLܲeËÁƒ£££+++õô^$±´´úMuëÚôúþýû§YøÛëX—uVÿ/ö°4‹ —ËíYU#::šËå¢ÿ]PPÐó߸çž\\-X[[“®Aé8é”n¡££ƒt J·€N›^-œøf>ð<'%ZIé `º3‡Ðmà«wžÊ³´:€øœæá·ÖÍ¿³þa[ Z¸÷Ú´_&˜zÐÚ¾è¬:.Ïw”ÕÂ`7…u“öìää´aÆ?üpÚ´ióæÍ Z¶l™ŽŽÎ¡C‡öíÛ¸páÂM›6yz*Ÿ™­ÍpâéìTc†t™]¡Ä“ÅâçNwÕåh¥åW—V·Éß =¨h‚_Z•¡ª®£°´IO‡åç¥|’ý¡:sHÁk¸¹­…^mcgAñà‡EeНäÕþ++*øæªäÆìž…{®§YXÚt"æ“AßùÁDµ½z^{Àb±øñãÇ666úúúÒ‹"‘¨¸¸ØÙÙ™Íî÷l–<«ê"DìyõµúnnÂôè±Æ£0MA¡–lÚ—x6¾èßKÇþg•¯<÷w‹ùN1ÓňøÉœúZ ”¦×žtTøÆ-0Ó6ŽîÿüÇÔð©®ÿD¶(ŠgDý˜rìü½ oú|¼z|÷t‰»ãk“+x5ö:Ö!VÑ\åÍ‚¶ï‹Ž*ù“/pìw]ߨ8b•<¥ÞØ“–_óίÏÞSrmU Ôq…Á`Œ1¢§û“ÉôððÀ}å„Ic¼á0N”ªãK0¶<«W(–ÈõçrvóD8Êpøt_pѳ·æ˜7ò›/äf@pµ¬FÌì0RVSü¢U鑟|·*=Ò/îõ´ÆÜßžþãÿúwE¿ %"E ÷þW˜–_cn¢³qù¸ÁïV'45@c…Ó<ÐÎV\ëñÈÖBA/þ^ÖN6µ·ïVÊs:'€É-Mx·=—A§Mó••CA þ^Ö&†ìÇå-%2âdÛ…«Ó·Uò^T¨êª‹¸óÞÆìÝüæ©~7gœP¨pokÏ/ðé»ôuY˜ü„¡©ìªç`æÝ)â]¨L þjÉ IDAT [ËKô]%òÉÿÝKwx¹;›(#”l4Ø€9 öBû™p²ì"ÙZ((p Åús°Ú Ï ™ © }É~PO¯²€ -%«EQà‡6‹1Å×AžÒîÉD³±&ÚF½.Úr,#lŽc?uõQöÃzk3Ý—U^+©h°À2§8Uv‰/é7³4ÁH3Žj"”x²G|h “©!ûÑÓ¦{¸íy¡Lüà'¤–1j¬ ¹á®ŠM ù™C 3ûY…¾^—ÚÊéD»ŽÕ1ÿ=ŠFì·´ó¿>– Ÿ½ ËÑRI+yh¶{yŒ1ro´^­¾E¶–gÔÔÔ-Ay(ñd!x-&}îŒapæÚ@¡XéMè0¡!ÐÄ~|Z£ÚžçÃR…!?sH!ØßA‹IOϯéµp¾2áÝÌOÄ ùØãhÿ½ËµgEûïMùË×ÄKÑö÷þ’ÞÔÚ=i¬íkS\0N(šmÀð<ëD™º %[‚òPâÉBNñKÂÜàüÇ|Xæ \AKI{9›¡=Êp8–úƒàÁ/«n+©h1Yš²Œª»êK;U*@û*ÌâÑ×eŒ±‰%73ÊÑ+¨ûŠñ¶‘ë"=ÖEØ}÷Ú—¶Ah…È/j8uµP‹Iß±~"Ö Eã x‘}‡ÁN¬KÚ)×I ÍÅÝÙÄk¸YK;ÿZJ©Ì2¸ù ¾&ž,º¦.ÊÉC\j)L÷u0ó,^‚)ðàyyàR¸PõÂ}·¸¿£J³ùäÿ’%²nÑWûÞÛÉš…ư–Þ\Û Óå—ÉÖBA;ϲbõ³ Al ²HH+€àÇ@³qB°Z6Ñ™N£%Ý­ŒBäà·u2ï×2™ô©ãì'š•ã°^‘™C‡•ܨü6°ÆMûž¨§ø‹U×ßÎØ.”ˆ>öxçm³U 3n_!ñ¿]¸¿„kk©÷Þâ¡ó'æ1`芅€\5SqÂÚš¸¼˜£qâw”ʼ^¦ÚÁPâQtä…ºÑi´+wž¶u¼È÷¬!Є͜ø´2x¹ðh£úLÝ'µÝ ʵ©qÓ¾'j(}÷!â-îïDz¬ ›ä×RJ‘>¿˜åߨÜõí‰,عaG[ãc¯¤ ža`˱,é('w7ÈË‹èø Ñ ñ‰ðϲK?—œ•ù©ÇŠ`=*¢èÈÛYêxÛtóEŸeB.묮ën4e¹ê;à p›97ÒËáù0 ƒFG£¾“”\…Ö ißuS}óÌÿ %¢ÿ¸¿½mä:ðffo¥_ÛØ™WTßëfùÅï8œÚÖ! t ò'azãÇÐ1`þ–S8ü^JÕfÊ´ ;=>5îÚüõw¿(ï¬fÐzÏa mS%»kÏ?‹…Nãæ€¿éh`U6ù(.k~ZÕjjÈöv·èy=Ð̨8,5 ¦úæ;Û…ÑnË·|Oz=$Àú©N(÷jÏß|ÌÖfF½€‰Nõaè0,wšÇ ÑÏW%´Û¿¸\.Y]«Žš‹/çÕ|qï‡Ñ±áÛó÷WuÕ2~`ìö˜É‡l9–=o³â˜êié%R9”ùÙ“œ õ´s ë>ii 26€¨™ƒÆ?Ïðw`Ð_ú#c¢9º ¬ä°šOûQñqµwÞÍøD(m¾ì Ï÷ü-|õöÓ^È#^$–|úÃÞô±·ÒÇP°:0¤ Ø–c9ů[Ì?WAZ`BLL Y]«ŽÚŠÏkyô¯¬(ßkó¿+ú­UØîo:æ€ooý¾Òyþ3ŸŒÐ³Ñþ{#ºòýÜ’m–ßRôg™†¥ESbäµYŒˆé®p6¾¤!Є§à@!fæÄ£ °&ô.(ëcó»Ñ¾;ãØñèÑ#@0zô³999ŽŽŽVVýnѹºº–””(ÝãùÊ„5ÛF¿ô‡ÒP¨ DW›|¸äTR}°èZóíB>p[>Ò`Xœ­ˆ}7óS–aZÈ_fÚÆŠ%¼Â†ðþ16`ß8>ÏýZ“Æ, ¿©Í`‘­ šÛºÇ.>Á`ÐsÏ®ÐëS~nþõIõÑþ{_…Ýu#¾6yEÚÇ|‰`ýðe;ú¸/Ê–ýI§¯~¼z¼Bù#šxSלéà ¢w†ÍðS»Ý_Ý p}nll\±bÅéÓ§ÑÿMJJò÷÷ß¹sgXXXTTNζ™j¦m|¿µ8¯eºåê _"8U~90aÉÒÔMIõúLÝu®K²gžÿÉ÷‹Ü^· ±šØ$hýüÞ÷„©%‹1#ÌGº˜6·uÿœv]ŒHFªî ×ÓËÅ$ÐÛ¦¯ûu˜<êRu_›$»<ðÀDý”ÒÁÌžì¢†î‹ x0‚ [¶la0èÿ¶··GFFFEEÅÄÄ$$$\ºtéêÕ«xôË¢k-v˜ TV,¥‘ßü]ÑoÞ±sßÏú¼¨ý©£®M”熂Y—öŒÙlñüy€=£7³Ú–]¾Õ‰·ZÒy=Ô Î?JòÖŸ‰Ýî»þŒòÌ€• „¦PŽ„º”å©[øÁûÃßÀ}`òX[=ŽVAqCU½Œæ2¹“]u)é G›ùÉ»þXˆUGð2àcÇŽ±Ùìàà`ôsrr„BaDD˜™™ùúúÆÆÆâÔõJ§y4 ýUKJZàèèhâ;Å rÅ?鍨–·LlÄ÷~¨ëncäþ£ï癡è¶Ò@KoÐÇ¥â]ôì7X²9g/_,ð!uAé‘_<œ¥Åx")?ò ï™#In¡ °üìeÞ0ÎÄ“Ã`?l+á ZdÞ0ÔwV9zºïN¯¾™¥Å˜:ÞA ®GFŽÄ E’O&ÀGËÇÙYµØ+)¸ðƒ~ûí·={öH¯”––ºººÒéϺsvv®ªê7U‚kÐë=KgÄÅÅ ÿÍår{þC&ŸKô1ôhv\¨º^PPÐ3ÙŠœ-DGGKÃóm!<<\ÅT× t 'N$EÃ÷W,ˆ{ß?þõÃ%§øÁH¡ã?“Þœqb‰Ãk';!§é<ár¹Fi0ÂÀ¹¤£üûâãñoN%Z06`;˜u ÍëÀÏÄ‹¬Ÿ¢¢¢“q诅ԼêŽ.á(WÓ„«çd¶À¢kYt €¤5æ*ª|LÆøÂÃÃIÑp½.uiò&¾Dð¯aKwz}$O hyàßÎ¥I?êèèèOÊ~,©hq±3|{¾§šü[ôgL*` Ç ½}û6‚ Ÿ|òÉöíÛÙµkך5k¤÷üúë¯ááá2wqqQ]ÃɧŒÏù¾–´Võ¦(ðC,_­¾rsµñ9_ãs¾Vÿ¾—ùYaÛLOiÈ697ÞêŸÀâ¶RLT[ŽÞ¾i|Î×êDˆDB¶Üøô‡;ö!‡¿‰Îàž½ŸóÝž·Ÿ0U¯, µ)VçÏùnÏûVþ§Ú:ø.³Ž:Í<ÂméøÎªúöá¿Ø‡NΩRM)¾¨îVØ¿÷Ýw†††|>ÿúõë•••ÕÕÕ‰‰‰úúúõõ/Ò ´··>ó®¥Ì· Ñgê¦4æµ÷>yF¡tŠx‡Ÿò¹6oiꦬ¦3mã­kï;ü“ïnúΘt`æ³Ôq_"Ø”»‡Üì¤x#¶ªI…YÖ}åKò©9 ý@êI ‡E×ëR—¥ý‡/ükØ›»Fo”ÿA}]ÖD[±¹ž^>ðŸÿ˜ÂëÍ>,ÐÛF5±êöl`` ««{òäÉ“'O>~ü¸¨¨è÷ßwvv.//Gžy*))qwwǼk):LÎûPø½ŒèCrÒ…M„ñõÝܯA“iTðj\ôìwÞœ³Õã]S–‘*-÷ÿ¥×GæÚ&wîž­¸¦JË ÊÈg5½Î²Wm"Áuæ<|ÒTY×na¢3ÚÍ|€ÛüLFk3X÷Z‹[…í µO}gåçÆKî»IÑÇÑUèØägïE2Åߺ[›\ªÇÑúïÚ!{%{~ÿý÷='88xÚ´iG1c‚ 'Nœ€¢¢¢ÄÄÄ€|“Š-wš §Ê. %"\;êEMªU·HWñ÷Z‹7æìs-⫇G›mþ¦cŽùïI9ûÞ°%l†¶êí÷oÌ2øÜóØž·_‰Ø"QeäÑÌ:«˜¤’Ž.!v¢×™ŸV Áh&ÙÔf°|ŒFJ š•S~¨ï¬œÜ¨K}K÷€Ð'vën%:QûŠÅQS`ãŠqVfºªkVsÊ„¥££sèС}ûö.\¸pÓ¦Mžžž¸ö8Öx”—¡[¿)¶æ®õ"44”Èî°'ñiÜÜ7S6N½þÖoOÿJD3­&ÅMûõêÔŸçÚ÷Íä¬42Å/q|mŠùx® eçý±ê”ùš®†J^­¡–¾Ÿµ;¯[tùÖl…É ®Ó>!uðõg”‰æÊF¢¾³òp³. uß÷†-Ù©ÈÊsOÌŒ9>–|iï+þÇÓy%•-nŽÆ«çâkj¾µk×.ô¿srr~ùå—ÌÌÌ•+WâÚ/ÊR§p8A& DxªüòÄ„%³“Ö^«½£Ëä¬s]’3óüŸ|M*áBÚ~ŸHmëøÓóè›â}ÛoâõÆLwèS!xÐØÒ•_ÔÀÖfNô±ôf*NܬK[š¶™/¬r^°kô&U ~ «Ð×’eDçTÕwüt:—Fƒ&2™C*MrúC2™L6›MLwK^c3´oÔ§Uð4x‰IA ½6ïý¬Ï¶•X°M·z¬ÍŸ³gÌf{¢Ë—ºê9|è¶dcÎn‚÷#@ZƒaÎTW=ŽVæ½Ú’ µ^lW”„´2 ‚Lô¶‘§ ¬¿é]« ¥°]ØI€¶W©û®tž¿ß'RÅr[³';@Bz¹P$éõѧ?$wñE ‚ÝÆ ñØ+)Cù¯ C-ý96Ó%ˆä²K„uÚóè˜Æ¡ºø²Îêmyû=®ÎÚž¿¿º«ÞÓpø¾Ÿ„]Úêñ®‘–&"ûcñG¬®ïô¨íÉÁ⓸jP¥G>£)üLGë°™s¦ºÀ_ñEX*“ü¦=ÿŒÖ³ƒ=ÚÈ]„ˆ3šòåïâÿÎLb}:ºò¼Òyþ·>ÛT/vig©ïábÒÞ)HÍ«î)>>µ,!­LO‡µím?»Ð ð-Æ ª§·îÉ­†Ìy·ß·åXæ†]Äp»‘¢/¹-?>u®âš€¿é˜ÝVδž¤&åi“³#n½§Í`¥ŸvÒ|1S#à‰ºœ/Í@äiø ]¦NÖýÚ/š›è¤ÿ¾”É ³½›/ò^t¼‹/Jÿý-9Cr¾¸÷ÃwE¿}4bÕg£Öã-oÈ“XŸ¾4us·˜¿ÂiÞ±Û±ú.8q÷À‰»ËæŒÜýïIè•n¾(øÝ³å5m_¼¸zžÆìþªu1u`²¹¯‹ž}UW]R}:ÙZ†&D[s{þõ3n¬8]~…N£¿á0;9øÔÕ©?‡YOV÷€‰fc9„u‹ùÿÉýŠl-˜q·ù¾P"ò4tÓeê€ï(«aF M¼¤¬J²¥aCJn5¯[ä5Ü\þ€ØçqXwñÔõJ€“ûÀÌ燑$Ï_ÿ~ø3·¼¦ÍÝÙdyøH¬zц¸Ó€¶Ô źH¶–¡Z°( á ´`‘–ž´`‘‡IÚ°f×èM¦,£u©ç+ÈÖ‚ èpÏ ‹BÜ`…bÅX€A&L½™4FnËCž¨ 7]CŸ”Æœei[ðp_ébê`mÐØÜ•ó°J«ÛŸÍ£Ñ`χ“‡ÆÊü ýŸv™c„yµ&I¹bÝŠÒ3•¨Æ!§ø~ÓWx^yíý¬Ï‹ÛKumvÞü`Öù áÁ âMYFŸy®€ÈüoÍÕ€7ÊM4®ÛÏôE¡òE¡#˜Lz|ZYc ¡öƒÇ´G¸‘®À0ŠSÇËÈM(e6É›¡âUøÎ*DJcÎâ”y¢®åNó0Ù÷í ZT#rÿµ+·Ÿ|úC2_ ^:bÜHKÌ;Rs†¾[°Mƒ-á™ò+tgmMt”/† *^Z°è«‡G¹‚o#´`Ñ{Öè09ĈìyF~™ÓÜIæã껹»îÿD€$ùQbÚ €Üm¾/°™1gš¯½H$ùçz1–úiïqcMc§•™îHS… 4ŠFÚßYEImÌy#å#Ô}øl£ã:“ý°=°^XÑýÞŽ„¤¬ =­Èw†~Þ«¾ }€eNsà·Òóäöò"è„+ >›»:}Z°H δšôϤƒ7f_âð“Æ RdÈ3ò4 }=æc]ë×§çäC"%¦MaÛÓfA›5ÇÜ–óÒ{Ãa#àÌ5Bc¡ñ˜öÒÀ'Àê‹¢§‡êwV Rs§|Ô)â-sš‹“ûvðïïLhh~i…†É kk½fÔ‹Wâg±šhÅ6Ü^†î™Qô¥KÜ}±êúÁâ“«®÷¬£ŒÆX…&®™´öBU“Æ|Ãavjðé?LµÐÈÓî.뇿%A$³5ûX0ºþ`êÓëz¿ƒ¹‰NaiSna½¬ç4†øÔ2Ppý%Ð̇A£g7ÝïóqÐ5déé¾ÿóÙŽ‡û@Z~MuCG¯‹-íükÉ¥xt§æ¼̤1–:΀“øgÅ’––Ô ²š üã­Jü´à»Ué‘~q¯ßmº×!âz|ÊûÚ\´`‘¹¶ÉVµ÷g_ùÉ÷‹áúNdK–ü#¿Åýg]»m”œÂU’ü(1mУ®=ןQ˜ úüÃàt,q¡X˜OûÚÆÎû%:lf â9 ´ôF ãKYM÷ä¹_¿³R°ŸÆÍEÝ÷-§üÜžT¶Ê¼^^«^aÄðJ0,wšG§Ñÿ©JÀ;ENL Ñõ—T¤]ع:}[%ïE%»ª®º…Éx]™³=%¯ÖUÏ~÷èÍya·z¼kÂ2$QêÀÈ?òl†ö>ï`÷ƒÃeÕxŠ’%¦M7^–òæ,w¸˜XÒÅ'èóiŸV† 0eœ6K™ Žg‡‘ä[…Ö¸ïlO0ŸÆÍ]”ü!ê¾ßùü?÷;Ù¿Cl,ôðëTmyU ØQ×f’Ù8ž¨ë\%¾•éV­Z…kû˜“ܘ]ÕU×ëb›°£UÔîo:æ€o3BÏaU°Wù–óíBºÄÝ[ÔãX°¢Ó†+hyÒQ©ÃäŒ2”QWÛÕÞÈÇÝ¢½SpõAõ°1Ÿöò4+µ1Gž›5î;ÛÕÅé¾0a´µm¯µ1×{m26…À5‹WÅ€áyÂ¥çÉ¢^”t”ɼ¾Êyº%ÓÀ–=£7jé'Ô¥\ªN$[‹Â¤só@Æê/îy(–Fæu‹Ròªé4Ú ?åZ0ó¦-£)Ÿ/`«mˆ‘Ò˜ózò¿ s_ÐÓaýøI°ù ¶µÐûñ“`=Þ]«!¯ϱ™nÌ2Èi~x¯•ÐjŽ«žì—ŒqÆ£VB0lÓOG½‘yû:D<²å(Fß½ˆ˜æÊÑf¦æU—U·¨ ngWvóE>fÆJžm3e¹¸t‹ù9ͰÕ6”ž8"Ì}Q|Ü-nþºøÐ§ÁŸ¼;áЧÁ7~Y<Öƒ´üäò °6ƒµØ~6àŠ_ãx0Ñl¬Ǽ×E[Že„m)z”F‰‘_å¼`¼‰WuWýž‡pP¤ŠŠG«`Àz:¬Y“Î%q ÛiŸªp¬¾ ‡‘RäX…Ö¸ïlO”ŸÎÍ{#å£No©ã"Ý…£Íœ=Ù…Õ‘={²‹ò˜ðj0<Å"à@°FðweÜ/OÎjÓYÇ'|½Ô1|ýðe¶A›l]„²mä:G]›Ü–‡??9C¶¹è›Z&4¼®µÐX¡N*¶c®m2Lß±SÄËoy„¬¡BO÷=<~U¤•\^¹ÑÝ~¦SçNÃÝ’Ž <Ú/(P£‡ó¸½ì£ì]°gÌfo#Ð(ñ}QZ<‡ÁÞç½vÝÿ©º‹œìQ ‰ï/G_ÏÁ Ó®ÞyÚԊמ †35àÕ6€QÍ|@ŽUèWgÚg6 +ÏóíBÿ’t÷Õè‘Ç„W΀u™:sí‚@þ(Ã¥@aMM ÍbOÔµ<}K‡ˆ·Ð~æ*çèEM/UÄ[†ÛLïñ¶åïÇP’ü($Íb=@–k3ÝIcm…"ÉÅD•ʆ V3§ª¾ãÑÓ&=–ÿh j È™ú™ö™M¯ßù ]Ô9ß.äðøêÂ]£G^9€åŽsà÷²Íÿì÷ŽtÓÓ¿õÇ»®‹Ç™xVòj¿~ô3ÙZúÝ–gýE‹IŸ;}hB(Vg—0½ †A§MóµÇªÍ@ó±Ò oi¡GnË÷7´Û(÷UC°7à'Ožœ¶èèhiÌ‚‚‚¸¸8éG=[Ùh'Ë.H‰r-¨®à¾}tìJM’1Ë ß…E×ÒПï¶ü—•¶YNóƒè§«ÛO‘ÁÍ— 7–cRB¢B-,u€ß/ßS‡ŸBf û¾ÙŸˆ&À pÀPƒ-ÇÒ–mÙ"l{ÐVBÀO¡>- îÛ,h›ªç‹º¯&þjÕBƤ>Ô××/[¶lôèÑ ,(//ßµkך5k¤Ÿþúë¯ááá2tqqÁIR/$ˆdlì<ãs¾‰uÄôH.·ê3Íþö3ýÛ/¾6™l-êÎŪÆç|.L­éª'[ËKì¼ÿ£ñ9ߨ‚ï}°¹­{Øk?;†©¬kÇC˜êdÔØ‡ž´òOÌ[þWf”ñ9ßC±oYmÉk~ä3ÃøœïÊ´­B‰ˆl9CÕÝ ¯(hssó'Näääðx¼~øA__¿¾þEŠƒöööáÃeÔ1%ÐÞpx N–aŠÕó(õ¡¾›ûnæ§bD²Åýí`ËÀþnSOñr‚¡øp›é³¬§´‹:?ÉÿVmŒœâ-‚ÔFúÚ¡NÁ©6ƒêƒæß˜脚—yV•¡ÿ8¬!6íó[ çßy¿YÐaô³ß.5\y–¢Ñ# Øð‘#GvìØñ¬u:}êÔ©%%%ÎÎÎåååò,)|II‰»»;æ]+Ê2§Suƒ+hÁªMkk `‹¯ÎØV×Ý8Å|üÜßàN5/?ØŠÿjÌ]¦Îß•qqµw0l¶?ä/BÄÙÍh@¯T¦n´BðéØB‡Ò ª~dò,º1Ù?ùPšöR÷ ·qTý¢®z¡Ñ# Øðøñã/^¼xçÎ(//¿té’¿¿ÿŒ39qâ%&&`Þµ¢Øp,fX$¿Ê1‹óòR»2_Þû!µ1Ç‚mzd°Ô¯j(^~°o§cµÕc-lÉýš'ê°e™È#¾ ¥¨SÄsѳ7Ó6V¢‹Icmm-õ*jÛÓò«•x|`Tü²ê¶’ŠC=mßQ–XI’â¬kg˱ä Z ۞ʼaÈLû‚Ö"tß7ÜvÆÏãwiÑս̟F<&`oÀÞÞÞ“&MZ¹r¥ŸŸßôéÓ===7lØ ££sèС}ûö.\¸pÓ¦Mžžž˜w­ËœæÀ‰Òód Á‹ØšÛ‹gÒÑþ{-دzí…xoØ›£FTðj¾-Û4ú÷EÇïµcÛx/äŸÑ$W¤XËzÊ{ÃÞ”çõ¯xˆ÷1¹Êyœûu;ˆ˜ x4ËÏDÉ7`°³ÔŸ0ƺ›/ºt ãÚ ª ~{§ ã~-“IÇ0V/žÅaõ³ ¬‰Ó>«©À?~ѪôÈ=%GW¥G†Ý|GãÜ4sä±åU,ÆÐ‹åNsi@;W×EàU«V©Þ&lÉû:¯å‘‹žýO¾_Ѐ&Ï#ê#^ pÿÙ¨ Öó4n.®‰K_É«­îª7Ò2®¯Òk"NµTüå"‘ÄÏÓÊ@…¢—¦ïhÅ6¯ïæ–´—÷ýTã¦}»°suú¶JÞ‹¤ú°Úû}¶iû‚Ž<æP ®zfÞ"ÞùÊx²µ`ÆŸe—N–^`3´£ý¿2ÐÒ#[Ž£¯¥»Ëk|~ïÿøMdÉ@S@7õ¢«VÃuö$g=VöÃúâ²fŒ¤© Z€“À`æ Ce8¹1»oÝn1?¡.…=JC0Àr§yp|¨Ôf¸ßZüŸÜ¯`Ÿ÷VOC’Ï[æÙY4 Ú>+øŽ, Ïן•ßFak3#¦ €3qjQ›A$–  °‚p6à@ùjkÅí¥2¯—uö›^B=¡ `®m‘–AVSÁ}•cmz&9#…NoMÆö.q÷r§yo9†+ô,éâUWñßúlÓarN—_IªÏÀ£ýAŧqs`‚Ùà‘tƒ²x¦œ/‰0Kv­ôàgÜ«míàw4v²1ÀJŒLˆÃÒ i/A$ª•œ’ù©ÇŠ`=*¢A#”°Ú íCà²K*6®˜çaÎú»_·—Ž2¾wŒÂ‰ÎI¯ ¸Š·×±Þò@ð3FcäÞ$h½RD¶%Éj*øâÞ4 5LµXYо Ç‚é4úÂè¢vÙ9•pBÅ}y=ĥŸ™QQß„Aä¿Ò<.oyZÕjlÀöñÀ>V_М”´ ÜËzíu¬ølÏšùÏJçù~¦£3BÏFûïÝáõa´ÿÞô¿|•JPJA.”¿àyV,•B±¤E¯¦YÐövÆáúáo…ÛÎP®²ÄcâÇ™x.sŒH„›rö`{,x`ñh´*)8zalÀòw‰%ç°I0¢Ü࣠°‚üt¹ŽÉ©ÈD³qp»!«×u5œöD[s{úåRëÝ=zsFèÙ•Îó¥é9 v„mДî1¶AX-ŒŽ<ÁPü‚Eöa;©>£ï.‘üÔÔÔ`(IN$ˆdmæ'¼šñ&^ŸŽZ¯t;¤ˆÇ bÄîõ¹¶IJcÎéò+6;€x "Éj*€ñ*‡@÷=|:ö&µ”|´À(# \MX†U]u¼—ÔªÕ´—ZïÒÔM­ERë}oØmºŒsÒj%^Q4Z<&Pü-½¹¶A §Ê.+ÝHhh(†’ääëGGoÔ¥šk›Dû¥ÊI|RÄc1â´ vx}Ÿähäcv”vñÚŸ´ ;t¬m8ýÝ£S}í,MužT¶f?ì}¢T ”üæ¶îœ‡õ,-Æ_;ÕÈFG+9öZ…V“i[s{ÆÍ¨õÚéX l½(j"^94Z<&Püè*ôɲ b³x“TŸ¹ÿѯtýðø/­9ædËú,v˜5Õ¯IÐúÅýèÝöÃn…É /Ä:K!n¤—‹Ä’€1Öz-Â:•æ¤$¬Gy@­}ëÍo)D­73ôÜÀÖK1  ø%Í|Üôkº®kHN™ª®ºw2¶‹É6uÓ,üÉ–óª°ß;R›Áú£4æVC&Þ}=KÁݰ”Å¡#h4¸˜XÒÙ%ļñA‰O+ןQž×V—8¬go½7V¼d½!”õ¾*PÜ›¥Žs@éÄ¿û÷ïÇTÎ@%¢w2þË´„XMÜ8b•ê )sˆï¢g¿Ñm5Èæœ½*ž[C@<úìõ0¸Øú޲êì^¹­jP·¢ƒ/InÝ­€ Ü õÄËp„¡–þ“ŽŠž©I™ö=­7¯å‘-Çò…õ2°^ê;«ÑÐLb0°ÃÕÕµ¤ãR- ÑÀoò¼ú‚ ³.Y²ÍHT2(‘yß)9m˱L :iÊ2"[Ϋ…@"œrý­¢ö§ÿù¯Íîkpê¥ß4âòL=¦ÎÓð› Õ²@ËäôµÂ-û“ü½¬ÿÚOhJ„[w+—m»2ÒÅ4öÐB"û€7R>НM>:~çBû™w‚r­æÎ׿¶<[ŽåúáËV;/PÈw)ÔÕÝŠzî¹¶I˜Õd">U®|(œ¯L8RrZ‹ÎüÅo7å¾Äâk}ë³´oýò¸½ §^Ò¸yàkâ…‡û@øTW=ŽVzAMIE í÷ÁñÏ=™HjRè¤úŒ +—¦nÊmyˆ¾õf…þ­è[/Å2` ¡XÇŸžÇµ¬*”tT|˜½vÞŒÇî …<šù,q|/|œ·§.ž¯?ãõO¬Ãf¾6Ű:,'h¬àBןQÈ2à¤úŒ ›+æßYŸÛòÐ\Û$Êse½”Ë È2ÀNÇêig¥Ñ’qqqxHêI·˜¿&=²]Ô9ß.äm—×1l™ñøAŠø^™i'Ö§Ÿ«¸¦J;ý‰ÇªÒ ‚ÏÆ‰%Êÿ¹©Ðà?|ÒTQÛnfÌíFBÐþc=¦Nq{i]w#zï™#µÞœægÖ›vñC·•˜X/õÕh(–FW:ËÚÚE/±9woAk‘«žÃÿ|þ‹mˈÇRÄ›° £#èæÊ¾ÖËfhcÕõÕh(–Ír§y ýBÕuE«zyᛑ5úéß–]ÒarNL؇yîu¼Åã Yâ—:Ιb>¾ßô彃J7"S|vÓ}¾D0ÒÀÕ@KOƒ³èÙà"¥[PhðIÜFy¶ ý¼*3§‡õ>ÀÉzQ¨ï¬Fƒ—s¹Ü¤¤¤ŒŒŒ®®.éE@žž^[[‹S§b˱œbá×-æŸUmi[îµoÏÿ¾ñÞênàB¶ ÐöûDjÓYÇKÏ£+ÆXñ<4öz±(Ôɠǧ–r[»ñ¥+¯°­Íœèc‹w_ý1Ϫ „Y/Å>uêÔ¤I“8ðÎ;ïÌš5 uܤ¤$ÿ;w†……EEEáÑ/¶,wœ ¿=ýG¡§¸\.>r Uؾ"mK·˜ÿ¶ËëK^ã üĉâ]õ>p[.A$sv %"%Z)µs;|øðùóç322ôôôNŸ>ÝÞÞ“péÒ¥«W¯bÞ5¶Ì¶™j¦m|¿µ=®''111xˆAùàî—¥U>Æ#wŽÞˆG€›xb Wüf÷5Ãô¶•üôø%ï+$³©pŽÀ’‚†bŠU2-¥üƒŸV!d–Ëdѵ|M<@Ò¹ù€ÅÌ‘Zovó}¬…úÎj4Øð½{÷ §L™l6{òäÉ©©©999B¡0""ÌÌÌ|}}ccc1ï[Xt­Å³àdéEùŸZµjb¾+üíRu¢‘–Á¯~{ðËQ‡“xb W¼6õ­÷6оzx´´³JÑÇûŠ/i/oä7[°Mum°‘8 !M8…¥MùE J<.çà „âäœ* ¦û‘p©'Ï’BßÕfNR}FHâê¾ÖKX}@ê;«Ñ`oÀãÇÏÌ|– —ÇãÅÆÆÎž=»´´ÔÕÕ•NÖ³³sU•¿¤ˆg¥Ó<ÐÎVÄv‰q߀äÆìÝÑ€öƒïgÄü:¦P‚IæãÚÏìwoÉýJõÖÐÀL½UoJ˜Lú‚ á€sm†;9U]BÏafÖfÇ*J¯8,%Hãæ†ßZ7ÿÎú»M÷LYFÄ[/ÅÇ(èÌÌÌððp[[Û… VVVê齈䴴´úÍ ëÚôzÏÄ¡qqqÒbÎ\.7::ZúQtt´tk¡   çQ3E[®ï4ŠãÚ&ì8_™@–†~Óªä­"D¼É}õl멤h Z³…eZaFZ×ëRt^E ·j2¡G ~Š7ÂFÀ_q²²óT‡þ4ü-žÇ?“û¯9ÞÄK›Áºßöøïkm!êäžY7Þž´6¹1Û®÷:kFöÌó¨õªáœ¤ZÀª…þŒI%èèèØ¼yóرcOœ8!‘HùþûïçÌ™#½á»ï¾Û´i“Ìg]\\ð¤4'Ÿ^0>ç;;i­œ÷;v ÃÞEñ¼ÛïŸó ¿µN$cزL°O0j">úÉ߯ç|G\žÙ"h“ÿ©¾âýãŸó½ÛtKqƒ¾áûÃÿ\/VôAy_"AüÞçk|ÎwXLðÞ‡Ûxj5™öÊ¡Ñâ,Ü û7`±X¼fÍ.—¿lÙ2ÎÎÎåååÈóÂ%%%îîî˜wóíBô™º©9EírUŒ Ç2©ý®?%Õg˜k›¿§lÀ=ÁV<Á¨‰øåNsýMÇÔwsw?8$ÿS½Ä·Ûw”±Úž†nX ˆÅ3ÝàLœÂ«Ðò þý’ÆšÆNKS‘®jQãDš“RñiÜܹ·ÿ5;i톻¦,£­k³gžßêñ.ægñEM¦½rh´xLÀþwz^^Þ£G"##…Ba]]]]]—Ë1c‚ 'Nœ€¢¢¢ÄÄÄ€€Ì»Æ&g}(ü^&WÀž©©)V]_«½ý]áoLã˜ÿ^bê2a(žxÔDÕK|:7O‚HÆdщ+Vs§ãh3“sªÊkË?#Ïàǧ–@h ù¯d0ñyÖÀâ¥Ö{»!Ë„e¨>Ö‹¢&Ó^94Z<&`oÀYYY³gÏ|ÎÊ•+utt:´oß¾ÀÀÀ… nÚ´ÉÓÇìzزÂiüQƒIåW9©àÕ¬Ïúä3Ï f>„õK¡:®ï{K‚H6æìQîX0a'€{¡¯Ëš5ÉAp©Í€0‰ °zág:šE×Êo)lvȼ!›;ïöûjk½Cì øÝwß-y™K—.@```NNÎ/¿ü’™™¹råJÌûÅã‘^†n\AK\ÍAo–nõ«_"X™¶µIÐf=yýð·ToPN0Oj%~«ÇZ']Ûû­Å??9#Ïý½Ä£!ФԹBŸ‰+”(R)|ÐÁ¯ãòî—4ê°™cÔ%ŒŸÃ`{¹‰Ɇ[Q«®÷<é µÞ[ ™=­J VÓ^Q4Z<&š šÉdzxx°Ùš¦ÿ–Sœ£6CMMêÝmËÛŸÛòÐ^Çúà¸Ïi@Ü‚&âÉB­Ä³Úû¼·ÀÎû?•óÖS¼P"Êi~HZ3€`ÆØ8ÚTÕu¤äTËÿÔ ƒŸV† 0y¬6‹¡š@ÌÈj*(j/€K­·V¥GúŽ~·é^7wþͰ^µšöŠ¢Ñâ1*Æ o8Ìæ0Ø7êÓ*ûeªb_ç*®E?ý[›Á:>ákc–Š­)„êâIDÝÄY̵ –óXpOñ­…]âîaúަ,#<ʆFƒ…Á ‡b :øñhR`õ¤]ع:}[»°Sz¥ª«nÎíu³×&Õg³ ÔßzQÔmÚ+„F‹ÇÊ€åÂPKŽÍ4 "ùC¾P,¥yÔöäÜ]ðõ˜-cŒ4#Pœ¢?öŽÙl ¥_›|¹:Qþ§Ðüˆ¤¬?£¼6‚A§]½ó´µƒIƒ]|Qjn5F›1Þ“U'¹1»ª«®×E¾X £ÅÙ>ò½Ü™Õßz)†”ËË2§¹ð{YŒ‘àÔE‡ˆ·2}+OÔõ¦ãœåNópê…‚0,ÙfŸŒz"ó¾éñä|êY!) ebm¦;ÑÇ–/_¸Y‚Iƒ·ïVvñEÞîææ&:˜4¨:%e2¯¯s}ã?îoSaVÄ@°¼L2çªg_É«M¬Oà¶žÉSå?¹{‹ÛKG ûÆ{«Ò¨‚*âIG=ůq^8ÞÄ«ª«n÷ƒÃÜÖS|F¡I(eò,Kî´”>Z€A}âŸÀUO¶]uyG—õœör¢Ñâ1†(ëH®®®%%ØüÝ9 £wÜ?aí¿óÆ–œÙš·OŸ©{cÆqW=’SÕS`HAkQÐ?=zÐm…r^wl„ ˰xN<‘ñw½Š$ãß<ÙÔÚ{háH•kJdü›¿74ñâ¿îîl‚•BivN¼¾¤’÷Rmr[ŽeJðiêõ—BNTw+ê XÞr ×¢3ckn¡eD1$»ùþ§ÿ€ÿ÷)å¾C /C·w‡-!âM9»Åƒí_H ‘辠ŤGLs€¿âŠTl*¯°¡¡‰gk©§>î úZºÇüöØr,¥Wìt¬Žùï¡Ü—‚H(V ¶iˆåDDx¦ü †Í6 ÚÖ¤oH„ÿ¶4Â6Ö)Ô„ÿŽ|ÏAÇ:§ùá¯OÎ|g7ÈHÁÑtúï„bP¬J; ieà„‰* gâ™z6Úﯣý÷¦‡üEʹ/ŠWÊ€ Åú­ô<²—î{Ó "Y—ùi9¯fœ‰g”ç $ª€¢âÕ uÏa°Ÿ þ±¦KFÁ]©øgoÀäE`Iñf6ÊÕ´¹­uÐ`ðÑǃ'¨ãº‡Áް þÔ"Â6HCËªó´ ”+F°U 5Çüq{ú‹²/ÖÖÖ 5øÍ£_êRŒY¿úí&8ño_¯V¨¹ø«‰¯ÙLkunÏÿ¶ï§¨øïa[‰émìA¸@<Å|º¿Á¯ªïxô´I—£å量ÿ:j>s†¯ÑP¬Lc©c8œì'+–——«X·²ö=:J§ÑŽßi¯Cþ\TH¼º¡þâ÷yl ¥w¡*!¶æv¯PñYMbD2ÆÈCMÞÆæ gi13+ªdgK–Òßàǧ–!LoÏÒR—X}Qÿ™3”x†2`…Yæ8—N£ÿ]ß*lW¥únîÚÌOĈäc÷µ3,5£6…*X±Í·z¬€ó¾–y,˜ÄÐ21Ò× t” ÈßÊÖf@ןCÔé…ú@°Â8êÚL6×-æÿ])cƒËåÊÓˆ¯J¬ïæNµ¿Ù} Ö•DNñê‰Fˆ×uÉ#÷J^í¾G¿ô¼ŽŠO';G_‡Ž€S±…W”9ø]´ü6Mm`ÉD#fNPâ5Ê€•a™ã\èg:&F®\•Qß§qsm9–?ûífÐÔå_ANñê‰FˆgÐèßúlgÐè?ÿ^Ðúbo5&&FŒH²›ïƒ:½À_;[ ½òš¶Œ{eA—9øIY¡xÜHKCµXQï˜9ýA‰×hÔåW¿fn;Ôe”Óü0¿¥wª U«V úøÕš[‡ÿ©Egþì·‹”„ûý!xµESÄû{¼í²H„ˆ7fï–¦5]µjÕƒ¶ÇmÂ'][K¶¹ {B§ÑžÕf0+–ÌÁG`©M†þД™#J¼FC°2°èZ‹Âà÷²‹Š>û¤£â_YQ _z}¨Ç=)ˆç“Qï[s̳›ï/=/½ø,´úM‰7ÂFÐhpùÖ“ž@þ§ÄäfF9PÀýC°’ ÅN—_éYÇ{PøbÁšŒmmÂŽyvÁë\—঎B­Ñcêì½>¿÷µÝÏŽ«[–{+ý £mxÝ¢˜¤'ò?•ý ®©µÛÑÆÀÕ^Öx((Ô Ê€•ÄÃÀuœ‰g›°#¦êfÏëÑÑÑ<õŸÜ½ù-…®zößù|‚¯>¥X¼š£Yâ#lƒÂ¬'· ;>+ø¢££3Ô&G_‡² ÝwðÕ6V_4kæô‚¯ÑP¬<ËæÀɲ—B±ÂÃÃû»ÿdé…ßËbØ í_ý÷ªgÊÙÄ«?'þë1ë2uÎVÄî¼ð‰Ws9¯FŸ©ënàJ¶.¼6ÅÅ@u÷AÝãò™7ôüx5N€Õ ›9=¡Äk4”+ÏB»P=¦NrCvIG…ô¢©©ìÒ1÷[‹·æ}û½#½ Ý’¨ ý‰×4N¼ŽÕ›¯À·…Ñ?”ý‰0·ùÙºdÀÖfΙ‚Öf馟oUIDATýÜkðËkÚ—·èë²Æ²"BŸjhÜÌé %^£¡ Xyt™:óìB@úËŠ%¥Mر2}k—¸{…Ó¼7ç#BÍiv^©Iêy…/¬ÎØÖ.ì$KÒ i)ÿŠ/‰)èq©eäïÀdR¿a((úǯGsssAAAÏ+ ==½¶¶¶¿G4tú²¡D„^éõ#ÈÙ;žtTxß;æ?DKT„¾â5ŸÜ˜]ÝUßëb%¯örM"ra¬‡ÅpGãÆæ®›™}?í5ø ©èú³fÄ?kÜÌé %^£ÁÑ€wíÚõí·/òÎ'%%ùûûïܹ3,,,** ¿~‰d¼‰—»K¿)®öz¥¦¦w¾‚‹©ºa¨¥|Â>6C›p ÐW¼¡qâK:dW*ë¬"X‰œ Y±d†bõüöNAÆýZ&ƒ>Õ׎8q* q3§'”x>~üø‚ ΟqƱ½½=222***&&&!!áÒ¥KW¯^Å£kâyŠõ|:44´ç§YM;îÿHÚÿûÌI×–}ŠÐK¼f¡qâ]õd¿ ÚqÔtßtaÈp&“~=½¼¡©w"랃#£\$’øyYê©õŸ›R4næô„¯ÑàbÀŽŽŽ‹/ž¨©3_àø°¼„ "€Õyë_P‹ _À]u*£,Âí_ê\±N­ƒ#·nk½­CQZ\¤;¼”º2Õ]¤Å7ÄT¤ 6WAš$B !$gÿHÍrAwsœ'þ>5ÇpΗyÌ9'Ïc½¹…x³G޵^Žüµ^+°ôü[n.Ž+Þ~sHoøÛ•Æñ´òŸ`þ Ì2!°X,Žë­·L[är¹H$²±ùípB¡ðñc+=ÏF—«oµ@¬§ §šK‡o×S†íÕlïî6wÿ¼+X-ç7œòÞþÜË‘oÚâÍöÈ ýÜ:?¢fd¼«èBÃËž 7P×î(BËC øx1t¢B¡àp8¦‡|>pð¥ÓÚ‰F1nOOO7=§¬¬Ìt_­Vÿ@w~~¾i‘ÚÚÚ²²®Y4A{0ž…>qÿ/Ê`|B~~þŸVtTOµwMæ&üxùÊD7ŒË:„½Áâ=$''co »‡y®A–䇎|:'?ôðg6;ìŸÿ»Ô:¿‹Y"¶»+»IÑ}º´jøŒ'·B·kÛ»zžMã; ½xVû]ŒØƒé ±ÿ>{ƒù{xÙÀ4,ê_/36iiiõõõyyy¡/¿ü²¬¬Ì´öEfffssóðoÏD$555MPÒ¡5ÿÒzYŸ¢xq–Øým„ÐeeåVía!tfÑ—Æ-¼>ÿó­?}w÷ÝÕ‡wGŒþÓC'~úú¯÷Þ›ó?ÛàǼâÆ>Z1ôX(¶´´˜û¦¦¦€€fÍbÅO_ƒ:ü÷œ¬GßæËþ¶³æ€2ìë}}Á+&î÷,ú^ÒÔ?04úO3PF‘0Ø14/_¾œ¢¨ÂÂB„ÐÇ%IXX3‡fF0Ï!tK}÷ãÚc{¤Ÿ« 2ûÿ͸»g>Þ¼@~¯vðüµ‘k34µvËÿ:™ë07ÿ¯ ÇÐÌf³³³³ÓÒÒÂÃÃcbböìÙÄÌ¡ Ñõíý¿##6¶jÛ{u#?­aå†_ÿ Ä3Æx+ÖweM[ŒýÆùŸ—‡¾ikÃÂÕf²^ü žh“&n×{÷îþ0<<\*•>zôH(:88LÜq™WÙùóèÏ µõwœk—Ä¿¹K’e<==q'Xâ³v©è³«~º×&oë™!à¢çýÆ °ˆ;ÿLÖ‹?ÄÑ™Z'MšøŠ¾ˆÀ)^&88w‚å ž1NŽo¬ŽR:óüMpppp·fàç¿w¼1ÉfÉüixóè"ëÅâ‰S¥â¦4`ŒžŸ…~ 7üvgå·Z†ô†°ÙŽãXÓ  À〸)^Æôy8A<“Bƒ=EÓ\”}×ï(BjµúùÀäM€EÜ‹?Ä àq@â”F/dú 6‰ ža1‘¾¡ïÊ „JJ~0N€µ‚À °H|ñM žh8‡eHœˆÃ¨_ÿì²²²UÛ>íå±ÈÑöU»Ô ÀpÊξ°±±aUŸÚx¿©ó¿RÎú¸^Êþî.2öÑjï‚~Ý8Ú:w΋y¸9‰çOûñvKÉÕFy["óü3Á °Ð†ßùÿx»åϽ§ÑêB‹CÈX+×€ÇÙði¾‰ñ¸ï6ÙÑÖ†ÕªêíÖ „>ˆþy‚x\HŒÿé^ûˆÑ!ô¸£÷R¥GŽåH|ñM žh0,ñ‹â×noQj.€P03Ó²Ï$‚x\HŒ÷ñæ½p»ÀÃpÉ‘øâ›@<Ñ`gííí¸,ñ¸¿p–§×¨±V0•³&Bˆ¥Çb$¾ø&O4¸ `!iCÇû‡ÊMW‚½Ü9Yû#CÝñVÀ ˜ˆ€ÍÜ÷«¹®ÞnQ¨z½ùœeo¿éh¿R0ümXÎÑ~ÒêÜ ®³ôôtÜ –ƒx\ˆŽG„÷C<.DÇ ¸ ÐqD‚Ààq&‰p'Xâq!:Þñ¸?.€oݺ¥T*™<(`…˜ûREEÅîÝ»½½½[[[£££<ÈØ¡kÃÐ;`F“’’ràÀ~ø¡¼¼¼´´ôÂ… ̰B ÀR©T§Ó­]»!äææ6þü‹/2shÀ 1t Z.—‹D"›ßÆ{¡PXSSó²'“~ežè~ˆÇ…èxDx?ÄãBtüØ14+ çŸ §ðùüÁÁÁ>fáð:`è´³³sGG‡é¡F£ñõõeæÐ€bh …---¦i/›šš˜94`…€—/_NQTaa!Bèálj$,,Œ™CVˆ¹ÅnÞ¼™˜˜èìì¬Ñh’““7oÞÌÌq+ÄèjHCCC= …Œ°BV·!ð:€Å ˜› š–®®.…BŒ;„6µZ]WWçèèìèèˆ;‡6…B!—ËgÏžíì쌻ÅB ƒƒƒ³fÍÂBƒZ­îêê2=ôôôtrrÂØC—Á`J¥ýýýsæÌþ‰+÷ôéÓ§OŸŽØ8sæL,1ª©©ñ÷÷Ÿúw =qqq×®]Ã]a ƒÁ°aÆcÇŽQ500pâÄ ÜQæ2 CÃlÛ¶ xŠ¢ž={6oÞ¼ëׯS¥V«gÍšeüýC„®®.??¿ššŠ¢ E@@€ñ±r£G¨žžž… SõäÉ“óçÏ›¹7«»<}úô 6DDDà¡­®®ŽÇã-Y²!äààQUU…;Š¥R»hÑ"„Çãñxr¹w=yyy½w4innöññ¡¼#R&“ÕÔÔ¬_¿!dggwüøñØØXÜQæb±X¶Ï>}Z¯×oß¾w jµº»»ÛËË !äââÂårGŸQ·Z—.]òõõ7oBÈËË+,,ìöíÛ¸£þ½Ñ#ÔX–²ºSÐb±!ÔÚÚZ__»…ž TWWÿ[«Õ^¼xqëÖ­x“h ×jµW¯^-++srrZ¶lî(êëë JJJÒÓÓq·Ð£Õj;;;SRRîܹÃårvîÜÉb±pw™E.— ‚’’’Ó§O»¹¹­[·...wm­­­GŽ9sæ îzÁúõëwìØ±jÕªêêj‡³bÅ ÜQæâóùÃï{Édvvv{Ì4z„¢µÔÐV÷øP]]ýÎ;ïxyyÅÄÄàn¡­¯¯¯¨¨H"‘ðx¼á=¬\ÿ‡~˜ššêââ‚»…¶ŽŽ@+‘HöîÝ›•••ŸŸ;Ê\ÍÍÍ*•ª®®.###::úèÑ£#®ªáøñãÑÑÑÄ­Ì£×ë¹\n[[[}}½L&Ci4ÜQ抈ˆÐétŸ|òIUUÕáÇ•J¥Á`Àe ó— àñÔ××—œœ¼cÇŽ­[·’u#«ÑÔ©S ¥R©V«%è7é±cÇx<ÞÀÀÀ•+W E[[›D"Áe®3fTTT¬]»ÖÝÝ=&&fÕªUçÏŸÇe.ãcŸ~úéܹsâââ®\¹‚;Š•JU\\¼iÓ&Ü!´•——óÍ7ååå999•••vvvß~û-î(sÙÚÚæææ*•ÊÏ>û¬¯¯/66ÖÏÏw”%ƲÔÕ‚&—^¯ï½÷Ølöå˗ɺ¥Þ(''G¥R}üñÇ!±Xlþ‰ì¸\®“““ñ·Occ£Á`8yòäÒ¥Kqw™åÁƒííí¦Z—ööv¬E4;;;.—k|Hâ§×N:5{ölÜ!´Ý¿ßÏÏÏç#„X,–X,¾yó&î(suvvêõúœœãø¸¸wß}o’eLK /555™ùµðxÜܽ{·¡¡!%%E§Ó©T*•J¥V«qGѰ`Á‚ï¿ÿþÆ¡–––ÒÒÒÐÐPÜQæÚ¹sgÞs‘‘‘K—.ýúë¯qG™ËÞÞ>11ÑxJmmí¹sçV®\‰;Ê\ááá'77W§Ó=~üøìÙ³]†4º~ý:qÍFAAA •••¡îîî .„„„àŽ2׳gÏbccú:wîœB¡ 릓±,5ï€ÇMMMMooïêÕ«M[KKK1&Ñ2gΜŋoÞ¼yÊ”)jµ:***)) wÔkaÆŒIII|ð½½}kkk||üÆqG™‹ÍfgddìÞ½;77W£ÑDEE%&&⎢¡§§§¶¶vÿþý¸C,±råÊ]»víÛ·Ï`0tvv†††îÚµ w”¹¼½½·oßž””dgg§ÑhÒÓÓMçQÈÂf³³³³³³³K ™ÿæ‚ÿOGGG[[›@ e.…W†^¯oll$žÅjlltuu…æQÕÐÐÀáp¦M›†»…6N'“É|}}I¹íÿe,[j`¸ `0€ À0À `0€Á?ÎãIžÁøäIEND®B`‚fista.lua000066400000000000000000000136511304650273300127000ustar00rootroot00000000000000--[[ FISTA with backtracking line search - `f` : smooth function - `g` : non-smooth function - `pl` : minimizer of intermediate problem Q(x,y) - `xinit` : initial point - `params` : table of parameters (**optional**) - `params.L` : 1/(step size) for ISTA/FISTA iteration (0.1) - `params.Lstep` : step size multiplier at each iteration (1.5) - `params.maxiter` : max number of iterations (50) - `params.maxline` : max number of line search iterations per iteration (20) - `params.errthres`: Error thershold for convergence check (1e-4) - `params.doFistaUpdate` : true : use FISTA, false: use ISTA (true) - `params.verbose` : store each iteration solution and print detailed info (false) On output, `params` will contain these additional fields that can be reused. - `params.L` : last used L value will be written. These are temporary storages needed by the algo and if the same params object is passed a second time, these same storages will be used without new allocation. - `params.xkm` : previous iterarion point - `params.y` : fista iteration - `params.ply` : ply = pl(y - 1/L grad(f)) Returns the solution x and history of {function evals, number of line search ,...} Algorithm is published in @article{beck-fista-09, Author = {Beck, Amir and Teboulle, Marc}, Journal = {SIAM J. Img. Sci.}, Number = {1}, Pages = {183--202}, Title = {A Fast Iterative Shrinkage-Thresholding Algorithm for Linear Inverse Problems}, Volume = {2}, Year = {2009}} ]] function optim.FistaLS(f, g, pl, xinit, params) local params = params or {} local L = params.L or 0.1 local Lstep = params.Lstep or 1.5 local maxiter = params.maxiter or 50 local maxline = params.maxline or 20 local errthres = params.errthres or 1e-4 local doFistaUpdate = params.doFistaUpdate local verbose = params.verbose -- temporary allocations params.xkm = params.xkm or torch.Tensor() params.y = params.y or torch.Tensor() params.ply = params.ply or torch.Tensor() local xkm = params.xkm -- previous iteration local y = params.y -- fista iteration local ply = params.ply -- soft shrinked y -- we start from all zeros local xk = xinit xkm:resizeAs(xk):zero() ply:resizeAs(xk):zero() y:resizeAs(xk):zero() local history = {} -- keep track of stuff local niter = 0 -- number of iterations done local converged = false -- are we done? local tk = 1 -- momentum param for FISTA local tkp = 0 local gy = g(y) local fval = math.huge -- fval = f+g while not converged and niter < maxiter do -- run through smooth function (code is input, input is target) -- get derivatives from smooth function local fy,gfy = f(y,'dx') --local gfy = f(y) local fply = 0 local gply = 0 local Q = 0 ---------------------------------------------- -- do line search to find new current location starting from fista loc local nline = 0 local linesearchdone = false while not linesearchdone do -- take a step in gradient direction of smooth function ply:copy(y) ply:add(-1/L,gfy) -- and solve for minimum of auxiliary problem pl(ply,L) -- this is candidate for new current iteration xk:copy(ply) -- evaluate this point F(ply) fply = f(ply) -- ply - y ply:add(-1, y) -- local Q2 = gfy:dot(ply) -- L/2 ||beta-y||^2 local Q3 = L/2 * ply:dot(ply) -- Q(beta,y) = F(y) + + L/2||beta-y||^2 + G(beta) Q = fy + Q2 + Q3 if verbose then print(string.format('nline=%d L=%g fply=%g Q=%g fy=%g Q2=%g Q3=%g',nline,L,fply,Q,fy,Q2,Q3)) end -- check if F(beta) < Q(pl(y),\t) if fply <= Q then --and Fply + Gply <= F then -- now evaluate G here linesearchdone = true elseif nline >= maxline then linesearchdone = true xk:copy(xkm) -- if we can't find a better point, current iter = previous iter --print('oops') else L = L * Lstep end nline = nline + 1 end -- end line search --------------------------------------------- --------------------------------------------- -- FISTA --------------------------------------------- if doFistaUpdate then -- do the FISTA step tkp = (1 + math.sqrt(1 + 4*tk*tk)) / 2 -- x(k-1) = x(k-1) - x(k) xkm:add(-1,xk) -- y(k+1) = x(k) + (1-t(k)/t(k+1))*(x(k-1)-x(k)) y:copy(xk) y:add( (1-tk)/tkp , xkm) -- store for next iterations -- x(k-1) = x(k) xkm:copy(xk) else y:copy(xk) end -- t(k) = t(k+1) tk = tkp fply = f(y) gply = g(y) if verbose then print(string.format('iter=%d eold=%g enew=%g',niter,fval,fply+gply)) end niter = niter + 1 -- bookeeping fval = fply + gply history[niter] = {} history[niter].nline = nline history[niter].L = L history[niter].F = fval history[niter].Fply = fply history[niter].Gply = gply history[niter].Q = Q params.L = L if verbose then history[niter].xk = xk:clone() history[niter].y = y:clone() end -- are we done? if niter > 1 and math.abs(history[niter].F - history[niter-1].F) <= errthres then converged = true xinit:copy(y) return y,history end if niter >= maxiter then xinit:copy(y) return y,history end --if niter > 1 and history[niter].F > history[niter-1].F then --print(niter, 'This was supposed to be a convex function, we are going up') --converged = true --return xk,history --end end error('not supposed to be here') end init.lua000066400000000000000000000010641304650273300125300ustar00rootroot00000000000000 require 'torch' optim = {} -- optimizations require('optim.sgd') require('optim.cg') require('optim.asgd') require('optim.nag') require('optim.fista') require('optim.lbfgs') require('optim.adagrad') require('optim.rprop') require('optim.adam') require('optim.adamax') require('optim.rmsprop') require('optim.adadelta') require('optim.cmaes') require('optim.de') -- line search functions require('optim.lswolfe') -- helpers require('optim.polyinterp') require('optim.checkgrad') -- tools require('optim.ConfusionMatrix') require('optim.Logger') return optim lbfgs.lua000066400000000000000000000214741304650273300126710ustar00rootroot00000000000000--[[ An implementation of L-BFGS, heavily inspired by minFunc (Mark Schmidt) This implementation of L-BFGS relies on a user-provided line search function (state.lineSearch). If this function is not provided, then a simple learningRate is used to produce fixed size steps. Fixed size steps are much less costly than line searches, and can be useful for stochastic problems. The learning rate is used even when a line search is provided. This is also useful for large-scale stochastic problems, where opfunc is a noisy approximation of f(x). In that case, the learning rate allows a reduction of confidence in the step size. ARGS: - `opfunc` : a function that takes a single input (X), the point of evaluation, and returns f(X) and df/dX - `x` : the initial point - `state` : a table describing the state of the optimizer; after each call the state is modified - `state.maxIter` : Maximum number of iterations allowed - `state.maxEval` : Maximum number of function evaluations - `state.tolFun` : Termination tolerance on the first-order optimality - `state.tolX` : Termination tol on progress in terms of func/param changes - `state.lineSearch` : A line search function - `state.learningRate` : If no line search provided, then a fixed step size is used RETURN: - `x*` : the new `x` vector, at the optimal point - `f` : a table of all function values: `f[1]` is the value of the function before any optimization and `f[#f]` is the final fully optimized value, at `x*` (Clement Farabet, 2012) ]] function optim.lbfgs(opfunc, x, config, state) -- get/update state local config = config or {} local state = state or config local maxIter = tonumber(config.maxIter) or 20 local maxEval = tonumber(config.maxEval) or maxIter*1.25 local tolFun = config.tolFun or 1e-5 local tolX = config.tolX or 1e-9 local nCorrection = config.nCorrection or 100 local lineSearch = config.lineSearch local lineSearchOpts = config.lineSearchOptions local learningRate = config.learningRate or 1 local isverbose = config.verbose or false state.funcEval = state.funcEval or 0 state.nIter = state.nIter or 0 -- verbose function local verbose if isverbose then verbose = function(...) print(' ', ...) end else verbose = function() end end -- import some functions local abs = math.abs local min = math.min -- evaluate initial f(x) and df/dx local f,g = opfunc(x) local f_hist = {f} local currentFuncEval = 1 state.funcEval = state.funcEval + 1 local p = g:size(1) -- check optimality of initial point state.tmp1 = state.tmp1 or g.new(g:size()):zero(); local tmp1 = state.tmp1 tmp1:copy(g):abs() if tmp1:sum() <= tolFun then -- optimality condition below tolFun verbose('optimality condition below tolFun') return x,f_hist end if not state.dir_bufs then -- reusable buffers for y's and s's, and their histories verbose('creating recyclable direction/step/history buffers') state.dir_bufs = state.dir_bufs or g.new(nCorrection+1, p):split(1) state.stp_bufs = state.stp_bufs or g.new(nCorrection+1, p):split(1) for i=1,#state.dir_bufs do state.dir_bufs[i] = state.dir_bufs[i]:squeeze(1) state.stp_bufs[i] = state.stp_bufs[i]:squeeze(1) end end -- variables cached in state (for tracing) local d = state.d local t = state.t local old_dirs = state.old_dirs local old_stps = state.old_stps local Hdiag = state.Hdiag local g_old = state.g_old local f_old = state.f_old -- optimize for a max of maxIter iterations local nIter = 0 while nIter < maxIter do -- keep track of nb of iterations nIter = nIter + 1 state.nIter = state.nIter + 1 ------------------------------------------------------------ -- compute gradient descent direction ------------------------------------------------------------ if state.nIter == 1 then d = g:clone():mul(-1) -- -g old_dirs = {} old_stps = {} Hdiag = 1 else -- do lbfgs update (update memory) local y = table.remove(state.dir_bufs) -- pop local s = table.remove(state.stp_bufs) y:add(g, -1, g_old) -- g - g_old s:mul(d, t) -- d*t local ys = y:dot(s) -- y*s if ys > 1e-10 then -- updating memory if #old_dirs == nCorrection then -- shift history by one (limited-memory) local removed1 = table.remove(old_dirs, 1) local removed2 = table.remove(old_stps, 1) table.insert(state.dir_bufs, removed1) table.insert(state.stp_bufs, removed2) end -- store new direction/step table.insert(old_dirs, s) table.insert(old_stps, y) -- update scale of initial Hessian approximation Hdiag = ys / y:dot(y) -- (y*y) else -- put y and s back into the buffer pool table.insert(state.dir_bufs, y) table.insert(state.stp_bufs, s) end -- compute the approximate (L-BFGS) inverse Hessian -- multiplied by the gradient local k = #old_dirs -- need to be accessed element-by-element, so don't re-type tensor: state.ro = state.ro or torch.Tensor(nCorrection); local ro = state.ro for i = 1,k do ro[i] = 1 / old_stps[i]:dot(old_dirs[i]) end -- iteration in L-BFGS loop collapsed to use just one buffer local q = tmp1 -- reuse tmp1 for the q buffer -- need to be accessed element-by-element, so don't re-type tensor: state.al = state.al or torch.zeros(nCorrection) local al = state.al q:mul(g, -1) -- -g for i = k,1,-1 do al[i] = old_dirs[i]:dot(q) * ro[i] q:add(-al[i], old_stps[i]) end -- multiply by initial Hessian r = d -- share the same buffer, since we don't need the old d r:mul(q, Hdiag) -- q[1] * Hdiag for i = 1,k do local be_i = old_stps[i]:dot(r) * ro[i] r:add(al[i]-be_i, old_dirs[i]) end -- final direction is in r/d (same object) end g_old = g_old or g:clone() g_old:copy(g) f_old = f ------------------------------------------------------------ -- compute step length ------------------------------------------------------------ -- directional derivative local gtd = g:dot(d) -- g * d -- check that progress can be made along that direction if gtd > -tolX then break end -- reset initial guess for step size if state.nIter == 1 then tmp1:copy(g):abs() t = min(1,1/tmp1:sum()) * learningRate else t = learningRate end -- optional line search: user function local lsFuncEval = 0 if lineSearch and type(lineSearch) == 'function' then -- perform line search, using user function f,g,x,t,lsFuncEval = lineSearch(opfunc,x,t,d,f,g,gtd,lineSearchOpts) table.insert(f_hist, f) else -- no line search, simply move with fixed-step x:add(t,d) if nIter ~= maxIter then -- re-evaluate function only if not in last iteration -- the reason we do this: in a stochastic setting, -- no use to re-evaluate that function here f,g = opfunc(x) lsFuncEval = 1 table.insert(f_hist, f) end end -- update func eval currentFuncEval = currentFuncEval + lsFuncEval state.funcEval = state.funcEval + lsFuncEval ------------------------------------------------------------ -- check conditions ------------------------------------------------------------ if nIter == maxIter then -- no use to run tests verbose('reached max number of iterations') break end if currentFuncEval >= maxEval then -- max nb of function evals verbose('max nb of function evals') break end tmp1:copy(g):abs() if tmp1:sum() <= tolFun then -- check optimality verbose('optimality condition below tolFun') break end tmp1:copy(d):mul(t):abs() if tmp1:sum() <= tolX then -- step size below tolX verbose('step size below tolX') break end if abs(f-f_old) < tolX then -- function value changing less than tolX verbose('function value changing less than tolX') break end end -- save state state.old_dirs = old_dirs state.old_stps = old_stps state.Hdiag = Hdiag state.g_old = g_old state.f_old = f_old state.t = t state.d = d -- return optimal x, and history of f(x) return x,f_hist,currentFuncEval end lswolfe.lua000066400000000000000000000134661304650273300132510ustar00rootroot00000000000000--[[ A Line Search satisfying the Wolfe conditions ARGS: - `opfunc` : a function (the objective) that takes a single input (X), the point of evaluation, and returns f(X) and df/dX - `x` : initial point / starting location - `t` : initial step size - `d` : descent direction - `f` : initial function value - `g` : gradient at initial location - `gtd` : directional derivative at starting location - `options.c1` : sufficient decrease parameter - `options.c2` : curvature parameter - `options.tolX` : minimum allowable step length - `options.maxIter` : maximum nb of iterations RETURN: - `f` : function value at x+t*d - `g` : gradient value at x+t*d - `x` : the next x (=x+t*d) - `t` : the step length - `lsFuncEval` : the number of function evaluations ]] function optim.lswolfe(opfunc,x,t,d,f,g,gtd,options) -- options options = options or {} local c1 = options.c1 or 1e-4 local c2 = options.c2 or 0.9 local tolX = options.tolX or 1e-9 local maxIter = options.maxIter or 20 local isverbose = options.verbose or false -- some shortcuts local abs = torch.abs local min = math.min local max = math.max -- verbose function local function verbose(...) if isverbose then print(' ', ...) end end -- evaluate objective and gradient using initial step local x_init = x:clone() x:add(t,d) local f_new,g_new = opfunc(x) local lsFuncEval = 1 local gtd_new = g_new * d -- bracket an interval containing a point satisfying the Wolfe -- criteria local LSiter,t_prev,done = 0,0,false local f_prev,g_prev,gtd_prev = f,g:clone(),gtd local bracket,bracketFval,bracketGval while LSiter < maxIter do -- check conditions: if (f_new > (f + c1*t*gtd)) or (LSiter > 1 and f_new >= f_prev) then bracket = x.new{t_prev,t} bracketFval = x.new{f_prev,f_new} bracketGval = x.new(2,g_new:size(1)) bracketGval[1] = g_prev bracketGval[2] = g_new break elseif abs(gtd_new) <= -c2*gtd then bracket = x.new{t} bracketFval = x.new{f_new} bracketGval = x.new(1,g_new:size(1)) bracketGval[1] = g_new done = true break elseif gtd_new >= 0 then bracket = x.new{t_prev,t} bracketFval = x.new{f_prev,f_new} bracketGval = x.new(2,g_new:size(1)) bracketGval[1] = g_prev bracketGval[2] = g_new break end -- interpolate: local tmp = t_prev t_prev = t local minStep = t + 0.01*(t-tmp) local maxStep = t*10 t = optim.polyinterp(x.new{{tmp,f_prev,gtd_prev}, {t,f_new,gtd_new}}, minStep, maxStep) -- next step: f_prev = f_new g_prev = g_new:clone() gtd_prev = gtd_new x[{}] = x_init x:add(t,d) f_new,g_new = opfunc(x) lsFuncEval = lsFuncEval + 1 gtd_new = g_new * d LSiter = LSiter + 1 end -- reached max nb of iterations? if LSiter == maxIter then bracket = x.new{0,t} bracketFval = x.new{f,f_new} bracketGval = x.new(2,g_new:size(1)) bracketGval[1] = g bracketGval[2] = g_new end -- zoom phase: we now have a point satisfying the criteria, or -- a bracket around it. We refine the bracket until we find the -- exact point satisfying the criteria local insufProgress = false local LOposRemoved = 0 while not done and LSiter < maxIter do -- find high and low points in bracket local f_LO,LOpos = bracketFval:min(1) LOpos = LOpos[1] f_LO = f_LO[1] local HIpos = -LOpos+3 -- compute new trial value t = optim.polyinterp(x.new{{bracket[1],bracketFval[1],bracketGval[1]*d}, {bracket[2],bracketFval[2],bracketGval[2]*d}}) -- test what we are making sufficient progress if min(bracket:max()-t,t-bracket:min())/(bracket:max()-bracket:min()) < 0.1 then if insufProgress or t>=bracket:max() or t <= bracket:min() then if abs(t-bracket:max()) < abs(t-bracket:min()) then t = bracket:max()-0.1*(bracket:max()-bracket:min()) else t = bracket:min()+0.1*(bracket:max()-bracket:min()) end insufProgress = false else insufProgress = true end else insufProgress = false end -- Evaluate new point x[{}] = x_init x:add(t,d) f_new,g_new = opfunc(x) lsFuncEval = lsFuncEval + 1 gtd_new = g_new * d LSiter = LSiter + 1 if f_new > f + c1*t*gtd or f_new >= f_LO then -- Armijo condition not satisfied or not lower than lowest point bracket[HIpos] = t bracketFval[HIpos] = f_new bracketGval[HIpos] = g_new else if abs(gtd_new) <= - c2*gtd then -- Wolfe conditions satisfied done = true elseif gtd_new*(bracket[HIpos]-bracket[LOpos]) >= 0 then -- Old HI becomes new LO bracket[HIpos] = bracket[LOpos] bracketFval[HIpos] = bracketFval[LOpos] bracketGval[HIpos] = bracketGval[LOpos] end -- New point becomes new LO bracket[LOpos] = t bracketFval[LOpos] = f_new bracketGval[LOpos] = g_new end -- done? if not done and abs((bracket[1]-bracket[2])*gtd_new) < tolX then break end end -- be verbose if LSiter == maxIter then verbose('reached max number of iterations') end -- return stuff local _,LOpos = bracketFval:min(1) LOpos = LOpos[1] t = bracket[LOpos] f_new = bracketFval[LOpos] g_new = bracketGval[LOpos] x[{}] = x_init x:add(t,d) return f_new,g_new,x,t,lsFuncEval end mkdocs.yml000066400000000000000000000002551304650273300130660ustar00rootroot00000000000000site_name: optim theme : simplex repo_url : https://github.com/torch/optim use_directory_urls : false markdown_extensions: [extra] docs_dir : doc pages: - [index.md, Optim] nag.lua000066400000000000000000000051301304650273300123300ustar00rootroot00000000000000---------------------------------------------------------------------- -- An implementation of SGD adapted with features of Nesterov's -- Accelerated Gradient method, based on the paper -- On the Importance of Initialization and Momentum in Deep Learning -- Sutsveker et. al., ICML 2013 -- -- ARGS: -- opfunc : a function that takes a single input (X), the point of -- evaluation, and returns f(X) and df/dX -- x : the initial point -- state : a table describing the state of the optimizer; after each -- call the state is modified -- state.learningRate : learning rate -- state.learningRateDecay : learning rate decay -- state.weightDecay : weight decay -- state.momentum : momentum -- state.learningRates : vector of individual learning rates -- -- RETURN: -- x : the new x vector -- f(x) : the function, evaluated before the update -- -- (Dilip Krishnan, 2013) -- function optim.nag(opfunc, x, config, state) -- (0) get/update state local config = config or {} local state = state or config local lr = config.learningRate or 1e-3 local lrd = config.learningRateDecay or 0 local wd = config.weightDecay or 0 local mom = config.momentum or 0.9 local damp = config.dampening or mom local lrs = config.learningRates state.evalCounter = state.evalCounter or 0 local nevals = state.evalCounter if mom <= 0 then error('Momentum must be positive for Nesterov Accelerated Gradient') end -- (1) evaluate f(x) and df/dx -- first step in the direction of the momentum vector if state.dfdx then x:add(mom, state.dfdx) end -- then compute gradient at that point -- comment out the above line to get the original SGD local fx,dfdx = opfunc(x) -- (2) weight decay if wd ~= 0 then dfdx:add(wd, x) end -- (3) learning rate decay (annealing) local clr = lr / (1 + nevals*lrd) -- (4) apply momentum if not state.dfdx then state.dfdx = torch.Tensor():typeAs(dfdx):resizeAs(dfdx):fill(0) else state.dfdx:mul(mom) end -- (5) parameter update with single or individual learning rates if lrs then if not state.deltaParameters then state.deltaParameters = torch.Tensor():typeAs(x):resizeAs(dfdx) end state.deltaParameters:copy(lrs):cmul(dfdx) x:add(-clr, state.deltaParameters) state.dfdx:add(-clr, state.deltaParameters) else x:add(-clr, dfdx) state.dfdx:add(-clr, dfdx) end -- (6) update evaluation counter state.evalCounter = state.evalCounter + 1 -- return x, f(x) before optimization return x,{fx} end optim-1.0.3-0.rockspec000066400000000000000000000012421304650273300145350ustar00rootroot00000000000000package = "optim" version = "1.0.3-0" source = { url = "git://github.com/torch/optim", tag = "1.0.3-0" } description = { summary = "An optimization library for Torch.", detailed = [[ This package contains several optimization routines for Torch. ]], homepage = "https://github.com/torch/optim", license = "BSD" } dependencies = { "torch >= 7.0", "sys >= 1.0", } build = { type = "command", build_command = [[ cmake -E make_directory build && cd build && cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH="$(LUA_BINDIR)/.." -DCMAKE_INSTALL_PREFIX="$(PREFIX)" && $(MAKE) ]], install_command = "cd build && $(MAKE) install" } optim-1.0.3-1.rockspec000066400000000000000000000012421304650273300145360ustar00rootroot00000000000000package = "optim" version = "1.0.3-1" source = { url = "git://github.com/torch/optim", tag = "1.0.3-1" } description = { summary = "An optimization library for Torch.", detailed = [[ This package contains several optimization routines for Torch. ]], homepage = "https://github.com/torch/optim", license = "BSD" } dependencies = { "torch >= 7.0", "sys >= 1.0", } build = { type = "command", build_command = [[ cmake -E make_directory build && cd build && cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH="$(LUA_BINDIR)/.." -DCMAKE_INSTALL_PREFIX="$(PREFIX)" && $(MAKE) ]], install_command = "cd build && $(MAKE) install" } optim-1.0.4-0.rockspec000066400000000000000000000012211304650273300145330ustar00rootroot00000000000000package = "optim" version = "1.0.4-0" source = { url = "git://github.com/torch/optim", tag = "1.0.4-0" } description = { summary = "An optimization library for Torch.", detailed = [[ This package contains several optimization routines for Torch. ]], homepage = "https://github.com/torch/optim", license = "BSD" } dependencies = { "torch >= 7.0", } build = { type = "command", build_command = [[ cmake -E make_directory build && cd build && cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH="$(LUA_BINDIR)/.." -DCMAKE_INSTALL_PREFIX="$(PREFIX)" && $(MAKE) ]], install_command = "cd build && $(MAKE) install" } optim-1.0.5-0.rockspec000066400000000000000000000011761304650273300145450ustar00rootroot00000000000000package = "optim" version = "1.0.5-0" source = { url = "git://github.com/torch/optim", } description = { summary = "An optimization library for Torch.", detailed = [[ This package contains several optimization routines for Torch. ]], homepage = "https://github.com/torch/optim", license = "BSD" } dependencies = { "torch >= 7.0", } build = { type = "command", build_command = [[ cmake -E make_directory build && cd build && cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH="$(LUA_BINDIR)/.." -DCMAKE_INSTALL_PREFIX="$(PREFIX)" && $(MAKE) ]], install_command = "cd build && $(MAKE) install" } polyinterp.lua000066400000000000000000000133651304650273300140010ustar00rootroot00000000000000local function isreal(x) return x == x end local function isnan(x) return not x == x end local function roots(c) local tol=1e-12 c[torch.lt(torch.abs(c),tol)]=0 local nonzero = torch.ne(c,0) if nonzero:max() == 0 then return 0 end -- first non-zero local _,pos = torch.max(nonzero,1) pos = pos[1] c=c[{ {pos,-1} }] local nz = 0 for i=c:size(1),1,-1 do if c[i] ~= 0 then break else nz = nz + 1 end end c=c[{ {1,c:size(1)-nz} }] local n = c:size(1)-1 if n == 1 then local e = c.new({{-c[2]/c[1], 0}}) if nz > 0 then return torch.cat(e, c.new(nz, 2):zero(), 1) else return e end elseif n > 1 then local A = torch.diag(c.new(n-1):fill(1),-1) A[1] = -c[{ {2,n+1} }]/c[1]; local e = torch.eig(A,'N') if nz > 0 then return torch.cat(e, c.new(nz,2):zero(), 1) else return e end else return c.new(nz,2):zero() end end local function real(x) if type(x) == number then return x end return x[{ {} , 1}] end local function imag(x) if type(x) == 'number' then return 0 end if x:nDimension() == 1 then return x.new(x:size(1)):zero() else return x[{ {}, 2}] end end local function polyval(p,x) local pwr = p:size(1) if type(x) == 'number' then local val = 0 p:apply(function(pc) pwr = pwr-1; val = val + pc*x^pwr; return pc end) return val else local val = x.new(x:size(1)) p:apply(function(pc) pwr = pwr-1; val:add(pc,torch.pow(x,pwr)); return pc end) return val end end ---------------------------------------------------------------------- -- Minimum of interpolating polynomial based on function and -- derivative values -- -- ARGS: -- points : N triplets (x,f,g), must be a Tensor -- xmin : min value that brackets minimum (default: min of points) -- xmax : max value that brackets maximum (default: max of points) -- -- RETURN: -- minPos : position of minimum -- function optim.polyinterp(points,xminBound,xmaxBound) -- locals local sqrt = torch.sqrt local mean = torch.mean local max = math.max local min = math.min -- nb of points / order of polynomial local nPoints = points:size(1) local order = nPoints*2-1 -- returned values local minPos -- Code for most common case: -- + cubic interpolation of 2 points w/ function and derivative values for both -- + no xminBound/xmaxBound if nPoints == 2 and order == 3 and not xminBound and not xmaxBound then -- Solution in this case (where x2 is the farthest point): -- d1 = g1 + g2 - 3*(f1-f2)/(x1-x2); -- d2 = sqrt(d1^2 - g1*g2); -- minPos = x2 - (x2 - x1)*((g2 + d2 - d1)/(g2 - g1 + 2*d2)); -- t_new = min(max(minPos,x1),x2); local minVal,minPos = points[{ {},1 }]:min(1) minVal = minVal[1] minPos = minPos[1] local notMinPos = -minPos+3; local d1 = points[{minPos,3}] + points[{notMinPos,3}] - 3*(points[{minPos,2}]-points[{notMinPos,2}]) / (points[{minPos,1}]-points[{notMinPos,1}]); local d2 = sqrt(d1^2 - points[{minPos,3}]*points[{notMinPos,3}]); if isreal(d2) then -- isreal() local t = points[{notMinPos,1}] - (points[{notMinPos,1}] - points[{minPos,1}]) * ((points[{notMinPos,3}] + d2 - d1) / (points[{notMinPos,3}] - points[{minPos,3}] + 2*d2)) minPos = min(max(t,points[{minPos,1}]),points[{notMinPos,1}]) else minPos = mean(points[{{},1}]) end return minPos end -- TODO: get the code below to work! --error(' extrapolation not implemented yet...') -- Compute Bounds of Interpolation Area local xmin = points[{{},1}]:min() local xmax = points[{{},1}]:max() xminBound = xminBound or xmin xmaxBound = xmaxBound or xmax -- Add constraints on function values local A = points.new(nPoints*2,order+1):zero() local b = points.new(nPoints*2,1):zero() for i = 1,nPoints do local constraint = points.new(order+1):zero() for j = order,0,-1 do constraint[order-j+1] = points[{i,1}]^j end A[i] = constraint b[i] = points[{i,2}] end -- Add constraints based on derivatives for i = 1,nPoints do local constraint = points.new(order+1):zero() for j = 1,order do constraint[j] = (order-j+1)*points[{i,1}]^(order-j) end A[nPoints+i] = constraint b[nPoints+i] = points[{i,3}] end -- Find interpolating polynomial local res = torch.gels(b,A) local params = res[{ {1,nPoints*2} }]:squeeze() params[torch.le(torch.abs(params),1e-12)]=0 -- Compute Critical Points local dParams = points.new(order):zero(); for i = 1,params:size(1)-1 do dParams[i] = params[i]*(order-i+1) end -- nan/inf? local nans = false if torch.ne(dParams,dParams):max() > 0 or torch.eq(dParams,math.huge):max() > 0 then nans = true end local cp = torch.cat(points.new{xminBound,xmaxBound},points[{{},1}]) if not nans then local cproots = roots(dParams) local cpi = points.new(cp:size(1),2):zero() cpi[{ {1,cp:size(1)} , 1 }] = cp cp = torch.cat(cpi,cproots,1) end -- Test Critical Points local fmin = math.huge -- Default to Bisection if no critical points valid: minPos = (xminBound+xmaxBound)/2 for i = 1,cp:size(1) do local xCP = cp[{ {i,i} , {} }] local ixCP = imag(xCP)[1] local rxCP = real(xCP)[1] if ixCP == 0 and rxCP >= xminBound and rxCP <= xmaxBound then local fCP = polyval(params,rxCP) if fCP < fmin then minPos = rxCP fmin = fCP end end end return minPos,fmin end rmsprop.lua000066400000000000000000000034711304650273300132730ustar00rootroot00000000000000--[[ An implementation of RMSprop ARGS: - 'opfunc' : a function that takes a single input (X), the point of a evaluation, and returns f(X) and df/dX - 'x' : the initial point - 'config` : a table with configuration parameters for the optimizer - 'config.learningRate' : learning rate - 'config.alpha' : smoothing constant - 'config.epsilon' : value with which to initialise m - 'config.weightDecay' : weight decay - 'state' : a table describing the state of the optimizer; after each call the state is modified - 'state.m' : leaky sum of squares of parameter gradients, - 'state.tmp' : and the square root (with epsilon smoothing) RETURN: - `x` : the new x vector - `f(x)` : the function, evaluated before the update ]] function optim.rmsprop(opfunc, x, config, state) -- (0) get/update state local config = config or {} local state = state or config local lr = config.learningRate or 1e-2 local alpha = config.alpha or 0.99 local epsilon = config.epsilon or 1e-8 local wd = config.weightDecay or 0 local mfill = config.initialMean or 0 -- (1) evaluate f(x) and df/dx local fx, dfdx = opfunc(x) -- (2) weight decay if wd ~= 0 then dfdx:add(wd, x) end -- (3) initialize mean square values and square gradient storage if not state.m then state.m = torch.Tensor():typeAs(x):resizeAs(dfdx):fill(mfill) state.tmp = torch.Tensor():typeAs(x):resizeAs(dfdx) end -- (4) calculate new (leaky) mean squared values state.m:mul(alpha) state.m:addcmul(1.0-alpha, dfdx, dfdx) -- (5) perform update state.tmp:sqrt(state.m):add(epsilon) x:addcdiv(-lr, dfdx, state.tmp) -- return x*, f(x) before optimization return x, {fx} end rprop.lua000066400000000000000000000066261304650273300127400ustar00rootroot00000000000000--[[ A plain implementation of RPROP ARGS: - `opfunc` : a function that takes a single input (X), the point of evaluation, and returns f(X) and df/dX - `x` : the initial point - `state` : a table describing the state of the optimizer; after each call the state is modified - `state.stepsize` : initial step size, common to all components - `state.etaplus` : multiplicative increase factor, > 1 (default 1.2) - `state.etaminus` : multiplicative decrease factor, < 1 (default 0.5) - `state.stepsizemax` : maximum stepsize allowed (default 50) - `state.stepsizemin` : minimum stepsize allowed (default 1e-6) - `state.niter` : number of iterations (default 1) RETURN: - `x` : the new x vector - `f(x)` : the function, evaluated before the update (Martin Riedmiller, Koray Kavukcuoglu 2013) --]] function optim.rprop(opfunc, x, config, state) if config == nil and state == nil then print('no state table RPROP initializing') end -- (0) get/update state local config = config or {} local state = state or config local stepsize = config.stepsize or 0.1 local etaplus = config.etaplus or 1.2 local etaminus = config.etaminus or 0.5 local stepsizemax = config.stepsizemax or 50.0 local stepsizemin = config.stepsizemin or 1E-06 local niter = config.niter or 1 local hfx = {} for i=1,niter do -- (1) evaluate f(x) and df/dx local fx,dfdx = opfunc(x) -- init temp storage if not state.delta then state.delta = dfdx.new(dfdx:size()):zero() state.stepsize = dfdx.new(dfdx:size()):fill(stepsize) state.sign = dfdx.new(dfdx:size()) state.psign = torch.ByteTensor(dfdx:size()) state.nsign = torch.ByteTensor(dfdx:size()) state.zsign = torch.ByteTensor(dfdx:size()) state.dminmax = torch.ByteTensor(dfdx:size()) if torch.type(x)=='torch.CudaTensor' then -- Push to GPU state.psign = state.psign:cuda() state.nsign = state.nsign:cuda() state.zsign = state.zsign:cuda() state.dminmax = state.dminmax:cuda() end end -- sign of derivative from last step to this one torch.cmul(state.sign, dfdx, state.delta) torch.sign(state.sign, state.sign) -- get indices of >0, <0 and ==0 entries state.sign.gt(state.psign, state.sign, 0) state.sign.lt(state.nsign, state.sign, 0) state.sign.eq(state.zsign, state.sign, 0) -- get step size updates state.sign[state.psign] = etaplus state.sign[state.nsign] = etaminus state.sign[state.zsign] = 1 -- update stepsizes with step size updates state.stepsize:cmul(state.sign) -- threshold step sizes -- >50 => 50 state.stepsize.gt(state.dminmax, state.stepsize, stepsizemax) state.stepsize[state.dminmax] = stepsizemax -- <1e-6 ==> 1e-6 state.stepsize.lt(state.dminmax, state.stepsize, stepsizemin) state.stepsize[state.dminmax] = stepsizemin -- for dir<0, dfdx=0 -- for dir>=0 dfdx=dfdx dfdx[state.nsign] = 0 -- state.sign = sign(dfdx) torch.sign(state.sign,dfdx) -- update weights x:addcmul(-1,state.sign,state.stepsize) -- update state.dfdx with current dfdx state.delta:copy(dfdx) table.insert(hfx,fx) end -- return x*, f(x) before optimization return x,hfx end sgd.lua000066400000000000000000000055671304650273300123560ustar00rootroot00000000000000--[[ A plain implementation of SGD ARGS: - `opfunc` : a function that takes a single input (X), the point of a evaluation, and returns f(X) and df/dX - `x` : the initial point - `config` : a table with configuration parameters for the optimizer - `config.learningRate` : learning rate - `config.learningRateDecay` : learning rate decay - `config.weightDecay` : weight decay - `config.weightDecays` : vector of individual weight decays - `config.momentum` : momentum - `config.dampening` : dampening for momentum - `config.nesterov` : enables Nesterov momentum - `config.learningRates` : vector of individual learning rates - `state` : a table describing the state of the optimizer; after each call the state is modified - `state.evalCounter` : evaluation counter (optional: 0, by default) RETURN: - `x` : the new x vector - `f(x)` : the function, evaluated before the update (Clement Farabet, 2012) ]] function optim.sgd(opfunc, x, config, state) -- (0) get/update state local config = config or {} local state = state or config local lr = config.learningRate or 1e-3 local lrd = config.learningRateDecay or 0 local wd = config.weightDecay or 0 local mom = config.momentum or 0 local damp = config.dampening or mom local nesterov = config.nesterov or false local lrs = config.learningRates local wds = config.weightDecays state.evalCounter = state.evalCounter or 0 local nevals = state.evalCounter assert(not nesterov or (mom > 0 and damp == 0), "Nesterov momentum requires a momentum and zero dampening") -- (1) evaluate f(x) and df/dx local fx,dfdx = opfunc(x) -- (2) weight decay with single or individual parameters if wd ~= 0 then dfdx:add(wd, x) elseif wds then if not state.decayParameters then state.decayParameters = torch.Tensor():typeAs(x):resizeAs(dfdx) end state.decayParameters:copy(wds):cmul(x) dfdx:add(state.decayParameters) end -- (3) apply momentum if mom ~= 0 then if not state.dfdx then state.dfdx = torch.Tensor():typeAs(dfdx):resizeAs(dfdx):copy(dfdx) else state.dfdx:mul(mom):add(1-damp, dfdx) end if nesterov then dfdx:add(mom, state.dfdx) else dfdx = state.dfdx end end -- (4) learning rate decay (annealing) local clr = lr / (1 + nevals*lrd) -- (5) parameter update with single or individual learning rates if lrs then if not state.deltaParameters then state.deltaParameters = torch.Tensor():typeAs(x):resizeAs(dfdx) end state.deltaParameters:copy(lrs):cmul(dfdx) x:add(-clr, state.deltaParameters) else x:add(-clr, dfdx) end -- (6) update evaluation counter state.evalCounter = state.evalCounter + 1 -- return x*, f(x) before optimization return x,{fx} end test/000077500000000000000000000000001304650273300120405ustar00rootroot00000000000000test/l2.lua000066400000000000000000000010531304650273300130570ustar00rootroot00000000000000require 'torch' -- rosenbrock.m This function returns the function value, partial derivatives -- and Hessian of the (general dimension) rosenbrock function, given by: -- -- f(x) = sum_{i=1:D-1} 100*(x(i+1) - x(i)^2)^2 + (1-x(i))^2 -- -- where D is the dimension of x. The true minimum is 0 at x = (1 1 ... 1). -- -- Carl Edward Rasmussen, 2001-07-21. function l2(x) local xx = x:clone() xx:cmul(xx) local fout = xx:sum() local dx = torch.Tensor():resizeAs(x):copy(x) dx:mul(2) --print('l2 eval = ', fout) return fout,dx endtest/rosenbrock.lua000066400000000000000000000025561304650273300147220ustar00rootroot00000000000000require 'torch' -- rosenbrock.m This function returns the function value, partial derivatives -- and Hessian of the (general dimension) rosenbrock function, given by: -- -- f(x) = sum_{i=1:D-1} 100*(x(i+1) - x(i)^2)^2 + (1-x(i))^2 -- -- where D is the dimension of x. The true minimum is 0 at x = (1 1 ... 1). -- -- Carl Edward Rasmussen, 2001-07-21. function rosenbrock(x) -- (1) compute f(x) local d = x:size(1) -- x1 = x(i)^2 local x1 = x.new(d-1):copy(x:narrow(1,1,d-1)) -- x(i+1) - x(i)^2 x1:cmul(x1):mul(-1):add(x:narrow(1,2,d-1)) -- 100*(x(i+1) - x(i)^2)^2 x1:cmul(x1):mul(100) -- x(i) local x0 = x.new(d-1):copy(x:narrow(1,1,d-1)) -- 1-x(i) x0:mul(-1):add(1) -- (1-x(i))^2 x0:cmul(x0) -- 100*(x(i+1) - x(i)^2)^2 + (1-x(i))^2 x1:add(x0) local fout = x1:sum() -- (2) compute f(x)/dx local dxout = x.new():resizeAs(x):zero() -- df(1:D-1) = - 400*x(1:D-1).*(x(2:D)-x(1:D-1).^2) - 2*(1-x(1:D-1)); x1:copy(x:narrow(1,1,d-1)) x1:cmul(x1):mul(-1):add(x:narrow(1,2,d-1)):cmul(x:narrow(1,1,d-1)):mul(-400) x0:copy(x:narrow(1,1,d-1)):mul(-1):add(1):mul(-2) x1:add(x0) dxout:narrow(1,1,d-1):copy(x1) -- df(2:D) = df(2:D) + 200*(x(2:D)-x(1:D-1).^2); x0:copy(x:narrow(1,1,d-1)) x0:cmul(x0):mul(-1):add(x:narrow(1,2,d-1)):mul(200) dxout:narrow(1,2,d-1):add(x0) return fout,dxout end test/sparsecoding.lua000066400000000000000000000075031304650273300152310ustar00rootroot00000000000000require 'kex' -- L1 FISTA Solution -- L1 solution with a linear dictionary ||Ax-b||^2 + \lambda ||x||_1 -- D : dictionary, each column is a dictionary element -- params: set of params to pass to FISTA and possibly temp allocation (**optional**) -- check unsup.FistaLS function for details. -- returns fista : a table with the following entries -- fista.run(x,lambda) : run L1 sparse coding algorithm with input x and lambda. -- The following entries will be allocated and reused by each call to fista.run(x,lambda) -- fista.reconstruction: reconstructed input. -- fista.gradf : gradient of L2 part of the problem wrt x -- fista.code : the solution of L1 problem -- The following entries just point to data passed to fista.run(x) -- fista.input : points to the tensor 'x' used in the last fista.run(x,lambda) -- fista.lambda : the lambda value used in the last fista.run(x,lambda) function optim.FistaL1(D, params) -- this is for keeping parameters related to fista algorithm local params = params or {} -- this is for temporary variables and such local fista = {} -- related to FISTA params.L = params.L or 0.1 params.Lstep = params.Lstep or 1.5 params.maxiter = params.maxiter or 50 params.maxline = params.maxline or 20 params.errthres = params.errthres or 1e-4 -- temporary stuff that might be good to keep around fista.reconstruction = torch.Tensor() fista.gradf = torch.Tensor() fista.gradg = torch.Tensor() fista.code = torch.Tensor() -- these will be assigned in run(x) -- fista.input points to the last input that was run -- fista.lambda is the lambda value from the last run fista.input = nil fista.lambda = nil -- CREATE FUNCTION CLOSURES -- smooth function fista.f = function (x,mode) local reconstruction = fista.reconstruction local input = fista.input -- ------------------- -- function evaluation if x:dim() == 1 then --print(D:size(),x:size()) reconstruction:resize(D:size(1)) reconstruction:addmv(0,1,D,x) elseif x:dim(2) then reconstruction:resize(x:size(1),D:size(1)) reconstruction:addmm(0,1,x,D:t()) end local fval = input:dist(reconstruction)^2 -- ---------------------- -- derivative calculation if mode and mode:match('dx') then local gradf = fista.gradf reconstruction:add(-1,input):mul(2) gradf:resizeAs(x) if input:dim() == 1 then gradf:addmv(0,1,D:t(),reconstruction) else gradf:addmm(0,1,reconstruction, D) end --------------------------------------- -- return function value and derivative return fval, gradf, reconstruction end ------------------------ -- return function value return fval, reconstruction end -- non-smooth function L1 fista.g = function (x) local fval = fista.lambda*x:norm(1) if mod and mode:match('dx') then local gradg = fista.gradg gradg:resizAs(x) gradg:sign():mul(fista.lambda) return fval,gradg end return fval end -- argmin_x Q(x,y), just shrinkage for L1 fista.pl = function (x,L) x:shrinkage(fista.lambda/L) end fista.run = function(x, lam, codeinit) local code = fista.code fista.input = x fista.lambda = lam -- resize code, maybe a different number of dimensions -- fill with zeros, initial point if codeinit then code:resizeAs(codeinit) code:copy(codeinit) else if x:dim() == 1 then code:resize(D:size(2)) elseif x:dim() == 2 then code:resize(x:size(1),D:size(2)) else error(' I do not know how to handle ' .. x:dim() .. ' dimensional input') end code:fill(0) end -- return the result of unsup.FistaLS call. return optim.FistaLS(fista.f, fista.g, fista.pl, fista.code, params) end return fista end test/test_adadelta.lua000066400000000000000000000005761304650273300153510ustar00rootroot00000000000000require 'torch' require 'optim' require 'rosenbrock' require 'l2' x = torch.Tensor(2):fill(0) fx = {} state = {} config = {eps=1e-10} for i = 1,10001 do x,f=optim.adadelta(rosenbrock,x,config,state) if (i-1)%1000 == 0 then table.insert(fx,f[1]) end end print() print('Rosenbrock test') print() print('x=');print(x) print('fx=') for i=1,#fx do print((i-1)*1000+1,fx[i]); end test/test_adagrad.lua000066400000000000000000000005651304650273300151730ustar00rootroot00000000000000require 'torch' require 'optim' require 'rosenbrock' require 'l2' x = torch.Tensor(2):fill(0) fx = {} config = {learningRate=1e-1} for i = 1,10001 do x,f=optim.adagrad(rosenbrock,x,config) if (i-1)%1000 == 0 then table.insert(fx,f[1]) end end print() print('Rosenbrock test') print() print('x=');print(x) print('fx=') for i=1,#fx do print((i-1)*1000+1,fx[i]); end test/test_adam.lua000066400000000000000000000005521304650273300145060ustar00rootroot00000000000000require 'torch' require 'optim' require 'rosenbrock' require 'l2' x = torch.Tensor(2):fill(0) fx = {} config = {learningRate=0.002} for i = 1,10001 do x,f=optim.adam(rosenbrock,x,config) if (i-1)%1000 == 0 then table.insert(fx,f[1]) end end print() print('Rosenbrock test') print() print('x=');print(x) print('fx=') for i=1,#fx do print((i-1)*1000+1,fx[i]); end test/test_adamax.lua000066400000000000000000000005751304650273300150440ustar00rootroot00000000000000 require 'torch' require 'optim' require 'rosenbrock' require 'l2' x = torch.Tensor(2):fill(0) fx = {} state = {} config = {} for i = 1,10001 do x,f=optim.adamax(rosenbrock,x,config,state) if (i-1)%1000 == 0 then table.insert(fx,f[1]) end end print() print('Rosenbrock test') print() print('x=');print(x) print('fx=') for i=1,#fx do print((i-1)*1000+1,fx[i]); end test/test_cg.lua000066400000000000000000000005571304650273300142020ustar00rootroot00000000000000require 'torch' require 'optim' require 'rosenbrock' require 'l2' x = torch.Tensor(2):fill(0) x,fx,i=optim.cg(rosenbrock,x,{maxIter=50}) print() print('Rosenbrock test: compare with http://www.gatsby.ucl.ac.uk/~edward/code/minimize/example.html') print() print('Number of function evals = ',i) print('x=');print(x) print('fx=') for i=1,#fx do print(i,fx[i]); end test/test_cmaes.lua000066400000000000000000000006521304650273300146750ustar00rootroot00000000000000require 'torch' require 'optim' require 'rosenbrock' require 'l2' -- 10-D rosenbrock x = torch.Tensor(10):fill(0) config = {maxEval=10000, sigma=0.5, verb_disp=0} -- will take some time x,fx,i=optim.cmaes(rosenbrock,x,config) print('Rosenbrock test') print() -- approx 6500 function evals expected print('Number of function evals = ',i) print('x=');print(x) print('fx=') for i=1,#fx do print(i,fx[i]); end print() print()test/test_confusion.lua000066400000000000000000000017531304650273300156130ustar00rootroot00000000000000require 'torch' require 'optim' n_feature = 3 classes = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9} print'ConfusionMatrix:__init() test' cm = optim.ConfusionMatrix(#classes, classes) target = 3 prediction = torch.randn(#classes) print'ConfusionMatrix:add() test' cm:add(prediction, target) cm:add(prediction, torch.randn(#classes)) batch_size = 8 targets = torch.randperm(batch_size) predictions = torch.randn(batch_size, #classes) print'ConfusionMatrix:batchAdd() test' cm:batchAdd(predictions, targets) assert(cm.mat:sum() == batch_size + 2, 'missing examples') print'ConfusionMatrix:updateValids() test' cm:updateValids() print'ConfusionMatrix:__tostring__() test' print(cm) target = 0 cm:add(prediction, target) assert(cm.mat:sum() == batch_size + 2, 'too many examples') -- FAR/FRR testing on identify matrix. FRR/FAR should be zero for identity. cm.mat = torch.eye(#classes, #classes) classFrrs, classFars, frrs, fars = cm:farFrr() assert(classFrrs:sum() + classFars:sum() == 0, "Incorrect values") test/test_de.lua000066400000000000000000000007061304650273300141750ustar00rootroot00000000000000require 'torch' require 'optim' require 'rosenbrock' require 'l2' -- 10-D rosenbrock x = torch.Tensor(2):fill(0) config = {popsize=50, scaleFactor=0.5, crossoverRate=0.9, maxFEs=3000} -- will take some time x,fx=optim.de(rosenbrock,x,config) print('Rosenbrock test') print() -- approx 6500 function evals expected print('Number of function evals = ',i) print('x=');print(x) print('fx=') for i=1,config.maxFEs do print(i,fx[i]); end print() print() test/test_fista.lua000066400000000000000000000042141304650273300147110ustar00rootroot00000000000000 require 'unsup' require 'torch' require 'gnuplot' require 'sparsecoding' -- gnuplot.setgnuplotexe('/usr/bin/gnuplot44') -- gnuplot.setgnuplotterminal('x11') function gettableval(tt,v) local x = torch.Tensor(#tt) for i=1,#tt do x[i] = tt[i][v] end return x end function doplots(v) v = v or 'F' local fistaf = torch.DiskFile('fista2.bin'):binary() local istaf = torch.DiskFile('ista2.bin'):binary() local hfista = fistaf:readObject() fistaf:close() local hista = istaf:readObject() istaf:close() gnuplot.figure() gnuplot.plot({'fista ' .. v,gettableval(hfista,v)},{'ista ' .. v, gettableval(hista,v)}) end seed = seed or 123 if dofista == nil then dofista = true else dofista = not dofista end torch.manualSeed(seed) math.randomseed(seed) nc = 3 ni = 30 no = 100 x = torch.Tensor(ni):zero() --- I am keeping these just to make sure random init stays same fista = unsup.LinearFistaL1(ni,no,0.1) fista = nil fistaparams = {} fistaparams.doFistaUpdate = dofista fistaparams.maxline = 10 fistaparams.maxiter = 200 fistaparams.verbose = true D=torch.randn(ni,no) for i=1,D:size(2) do D:select(2,i):div(D:select(2,i):std()+1e-12) end mixi = torch.Tensor(nc) mixj = torch.Tensor(nc) for i=1,nc do local ii = math.random(1,no) local cc = torch.uniform(0,1/nc) mixi[i] = ii; mixj[i] = cc; print(ii,cc) x:add(cc, D:select(2,ii)) end fista = optim.FistaL1(D,fistaparams) code,h = fista.run(x,0.1) --fista.reconstruction:addmv(0,1,D,code) rec = fista.reconstruction --code,rec,h = fista:forward(x); gnuplot.figure(1) gnuplot.plot({'data',mixi,mixj,'+'},{'code',torch.linspace(1,no,no),code,'+'}) gnuplot.title('Fista = ' .. tostring(fistaparams.doFistaUpdate)) gnuplot.figure(2) gnuplot.plot({'input',torch.linspace(1,ni,ni),x,'+-'},{'reconstruction',torch.linspace(1,ni,ni),rec,'+-'}); gnuplot.title('Reconstruction Error : ' .. x:dist(rec) .. ' ' .. 'Fista = ' .. tostring(fistaparams.doFistaUpdate)) --w2:axis(0,ni+1,-1,1) if dofista then print('Running FISTA') fname = 'fista2.bin' else print('Running ISTA') fname = 'ista2.bin' end ff = torch.DiskFile(fname,'w'):binary() ff:writeObject(h) ff:close() test/test_lbfgs.lua000066400000000000000000000013041304650273300146750ustar00rootroot00000000000000require 'torch' require 'optim' require 'rosenbrock' require 'l2' print('--- regular batch test ---') x = torch.Tensor(2):fill(0) x,fx,i=optim.lbfgs(rosenbrock,x,{maxIter=100, learningRate=1e-1}) print() print('Rosenbrock test') print() print('Number of function evals = ',i) print('x=');print(x) print('fx=') for i=1,#fx do print(i,fx[i]); end print() print() print('--- stochastic test ---') x = torch.Tensor(2):fill(0) fx = {} config = {learningRate=1e-1, maxIter=1} for i = 1,100 do x,f=optim.lbfgs(rosenbrock,x,config) table.insert(fx,f[1]) end print() print('Rosenbrock test') print() print('Number of function evals = ',i) print('x=');print(x) print('fx=') for i=1,#fx do print(i,fx[i]); end test/test_lbfgs_w_ls.lua000066400000000000000000000005731304650273300157300ustar00rootroot00000000000000require 'torch' require 'optim' require 'rosenbrock' require 'l2' print('--- batch test w/ line search ---') x = torch.Tensor(2):fill(0) x,fx,i=optim.lbfgs(rosenbrock,x,{maxIter=100, lineSearch=optim.lswolfe}) print() print('Rosenbrock test') print() print('Number of function evals = ',i) print('x=');print(x) print('fx=') for i=1,#fx do print(i,fx[i]); end print() print() test/test_logger.lua000066400000000000000000000007701304650273300150650ustar00rootroot00000000000000require 'optim' logger_former = optim.Logger('accuracy-former.log') logger_new = optim.Logger('accuracy-new.log') logger_new:setNames({'channel 1', 'channel 2', 'channel 3'}) for i = 1, 20 do logger_former:add({['channel 1'] = 1 , ['channel 2'] = 0.1 * i, ['channel 3'] = 1 - 0.2 * i}) logger_new:add({1 , 0.1 * i, 1 - 0.2 * i}) end logger_former:style({['channel 1'] = '-' , ['channel 2'] = '-', ['channel 3'] = '-'}) logger_new:style{'-', '-', '-'} logger_former:plot() logger_new:plot() test/test_rmsprop.lua000066400000000000000000000005651304650273300153120ustar00rootroot00000000000000require 'torch' require 'optim' require 'rosenbrock' require 'l2' x = torch.Tensor(2):fill(0) fx = {} config = {learningRate=5e-4} for i = 1,10001 do x,f=optim.rmsprop(rosenbrock,x,config) if (i-1)%1000 == 0 then table.insert(fx,f[1]) end end print() print('Rosenbrock test') print() print('x=');print(x) print('fx=') for i=1,#fx do print((i-1)*1000+1,fx[i]); end test/test_sgd.lua000066400000000000000000000005611304650273300143610ustar00rootroot00000000000000require 'torch' require 'optim' require 'rosenbrock' require 'l2' x = torch.Tensor(2):fill(0) fx = {} config = {learningRate=1e-3} for i = 1,10001 do x,f=optim.sgd(rosenbrock,x,config) if (i-1)%1000 == 0 then table.insert(fx,f[1]) end end print() print('Rosenbrock test') print() print('x=');print(x) print('fx=') for i=1,#fx do print((i-1)*1000+1,fx[i]); end