;(function() { window.createMeasureObserver = (measureName) => { var markPrefix = `_uol-measure-${measureName}-${new Date().getTime()}`; performance.mark(`${markPrefix}-start`); return { end: function() { performance.mark(`${markPrefix}-end`); performance.measure(`uol-measure-${measureName}`, `${markPrefix}-start`, `${markPrefix}-end`); performance.clearMarks(`${markPrefix}-start`); performance.clearMarks(`${markPrefix}-end`); } } }; /** * Gerenciador de eventos */ window.gevent = { stack: [], RUN_ONCE: true, on: function(name, callback, once) { this.stack.push([name, callback, !!once]); }, emit: function(name, args) { for (var i = this.stack.length, item; i--;) { item = this.stack[i]; if (item[0] === name) { item[1](args); if (item[2]) { this.stack.splice(i, 1); } } } } }; var runningSearch = false; var hadAnEvent = true; var elementsToWatch = window.elementsToWatch = new Map(); var innerHeight = window.innerHeight; // timestamp da última rodada do requestAnimationFrame // É usado para limitar a procura por elementos visíveis. var lastAnimationTS = 0; // verifica se elemento está no viewport do usuário var isElementInViewport = function(el) { var rect = el.getBoundingClientRect(); var clientHeight = window.innerHeight || document.documentElement.clientHeight; // renderizando antes, evitando troca de conteúdo visível no chartbeat-related-content if(el.className.includes('related-content-front')) return true; // garante que usa ao mínimo 280px de margem para fazer o lazyload var margin = clientHeight + Math.max(280, clientHeight * 0.2); // se a base do componente está acima da altura da tela do usuário, está oculto if(rect.bottom < 0 && rect.bottom > margin * -1) { return false; } // se o topo do elemento está abaixo da altura da tela do usuário, está oculto if(rect.top > margin) { return false; } // se a posição do topo é negativa, verifica se a altura dele ainda // compensa o que já foi scrollado if(rect.top < 0 && rect.height + rect.top < 0) { return false; } return true; }; var asynxNextFreeTime = () => { return new Promise((resolve) => { if(window.requestIdleCallback) { window.requestIdleCallback(resolve, { timeout: 5000, }); } else { window.requestAnimationFrame(resolve); } }); }; var asyncValidateIfElIsInViewPort = function(promise, el) { return promise.then(() => { if(el) { if(isElementInViewport(el) == true) { const cb = elementsToWatch.get(el); // remove da lista para não ser disparado novamente elementsToWatch.delete(el); cb(); } } }).then(asynxNextFreeTime); }; // inicia o fluxo de procura de elementos procurados var look = function() { if(window.requestIdleCallback) { window.requestIdleCallback(findByVisibleElements, { timeout: 5000, }); } else { window.requestAnimationFrame(findByVisibleElements); } }; var findByVisibleElements = function(ts) { var elapsedSinceLast = ts - lastAnimationTS; // se não teve nenhum evento que possa alterar a página if(hadAnEvent == false) { return look(); } if(elementsToWatch.size == 0) { return look(); } if(runningSearch == true) { return look(); } // procura por elementos visíveis apenas 5x/seg if(elapsedSinceLast < 1000/5) { return look(); } // atualiza o último ts lastAnimationTS = ts; // reseta status de scroll para não entrar novamente aqui hadAnEvent = false; // indica que está rodando a procura por elementos no viewport runningSearch = true; const done = Array.from(elementsToWatch.keys()).reduce(asyncValidateIfElIsInViewPort, Promise.resolve()); // obtém todos os elementos que podem ter view contabilizados //elementsToWatch.forEach(function(cb, el) { // if(isElementInViewport(el) == true) { // // remove da lista para não ser disparado novamente // elementsToWatch.delete(el); // cb(el); // } //}); done.then(function() { runningSearch = false; }); // reinicia o fluxo de procura look(); }; /** * Quando o elemento `el` entrar no viewport (-20%), cb será disparado. */ window.lazyload = function(el, cb) { if(el.nodeType != Node.ELEMENT_NODE) { throw new Error("element parameter should be a Element Node"); } if(typeof cb !== 'function') { throw new Error("callback parameter should be a Function"); } elementsToWatch.set(el, cb); } var setEvent = function() { hadAnEvent = true; }; window.addEventListener('scroll', setEvent, { capture: true, ive: true }); window.addEventListener('click', setEvent, { ive: true }); window.addEventListener('resize', setEvent, { ive: true }); window.addEventListener('load', setEvent, { once: true, ive: true }); window.addEventListener('DOMContentLoaded', setEvent, { once: true, ive: true }); window.gevent.on('allJSLoadedAndCreated', setEvent, window.gevent.RUN_ONCE); // inicia a validação look(); })();
  • AssineUOL
Topo

"Está tudo relativamente tranquilo, tudo sob controle", diz Barroso sobre segundo turno

Luís Roberto Barroso, presidente do TSE - Fernando Frazão/Agência Brasil
Luís Roberto Barroso, presidente do TSE Imagem: Fernando Frazão/Agência Brasil

Idiana Tomazelli

Brasília

29/11/2020 17h41

Após um primeiro turno marcado por tentativa de invasão hacker e problemas técnicos na contabilização dos votos, o presidente do Tribunal Superior Eleitoral (TSE), ministro Luís Roberto Barroso, disse neste domingo, 29, que o segundo turno das eleições municipais ocorre dentro da normalidade. "Está tudo relativamente tranquilo, tudo sob controle", disse.

Barroso conversou com jornalistas enquanto se dirigia ao setor que cuida da tecnologia do tribunal. Há pouco, ele recebeu o diretor-geral da Polícia Federal, Rolando Alexandre de Souza, que trouxe informações sobre a atuação da corporação para garantir a segurança das eleições.

Diferentemente do 1º turno, quando previsões de horário de conclusão da apuração dadas por Barroso foram frustradas devido a um "problema técnico" em um dos núcleos de processadores de contabilização, o presidente da corte eleitoral evitou antever um prazo para o término da apuração.

Barroso disse que a equipe trabalha para que a totalização dos votos seja finalizada num prazo menor do que no 1º turno. "Nós vamos divulgar hoje, se Deus quiser", disse.

O ministro também parabenizou a Polícia Federal pelas investigações que resultaram na prisão do suspeito de ter realizado o ataque hacker contra o TSE no primeiro turno. Ele foi detido em Portugal no âmbito da Operação Exploit, deflagrada em conjunto com a Polícia Judiciária Portuguesa - Unidade Nacional de Combate ao Cibercrime e Criminalidade Tecnológica.

Outros três mandados de busca e apreensão e três medidas cautelares de proibição de contato entre investigados foram cumpridos no Brasil, nos Estados de São Paulo e Minas Gerais.

"A Polícia Federal foi extremamente eficiente junto com polícia portuguesa", disse Barroso em breve conversa com os jornalistas. O ministro deve conceder entrevista coletiva mais tarde na sede do TSE, em Brasília.