Bom dia pessoal, Entendi Chiappa, a minha dúvida era justamente se algumas dessas tools que você comentou, se ela fazia o "relacionamento" das bult-in's, ou se elas faziam algum tipo de aviso, mostrando as bult-in's que foram descontinuadas e/ou depreciadas e quais "vieram" no seu lugar.
Muito Obrigado [ ]s Em sexta-feira, 22 de maio de 2020 16:59:04 BRT, Jose Laurindo Chiappa jlchia...@yahoo.com.br [oracle_br] <oracle_br@yahoogrupos.com.br> escreveu: Por exemplo, falando de fatures/built-ins que foram REMOVIDAS mesmo depois de vários anos depreciadas, podemos exemplificar com a feature de STREAMS, no banco 19c afaik ela foi mesmo removida, Não Existe mais : é por conta do aplicador/migrador alterar os códigos/processos que dependiam de STREAMS para funcionar, nenhuma tool é disponibilizada para isso afaik.... O máximo que a Oracle faz é no script de pré-upgrade do 19c já te AVISAR que o banco a ser migrado contém Streams, okdoc ?? Abraços, Chiappa Em sexta-feira, 22 de maio de 2020 16:51:58 BRT, Jose Laurindo Chiappa jlchia...@yahoo.com.br [oracle_br] <oracle_br@yahoogrupos.com.br> escreveu: às vezes, em casos MUITO pontuais, depois de vários e vários anos que a built-in foi depreciada aí SIM ela é mesmo Removida do banco , aí SIM vai haver necessidade de re-escrita da app - e nesses RAROS casos, não, a Oracle via de regra não te dá uma tool que já faça a substituição por você.... Abraços, Chiappa Em sexta-feira, 22 de maio de 2020 16:48:15 BRT, Jose Laurindo Chiappa jlchia...@yahoo.com.br [oracle_br] <oracle_br@yahoogrupos.com.br> escreveu: Não sr : as tools de migração não fazem essa substituição porque ela Não É Necessária : fato é, quando uma built-in interna é depreciada/descontinuada, JUSTAMENTE para evitar re-escrita de código de apps legadas, ela CONTINUA EXISTINDO, veja o caso aqui num banco 18c dessa package dbms_obfuscation_toolkit depreciada : SID:XE::C:\Users\User 2am>sqlplus system/oracle SQL*Plus: Release 18.0.0.0.0 - Production on Sex Mai 22 16:43:32 2020 Version 18.4.0.0.0 Copyright (c) 1982, 2018, Oracle. All rights reserved. Horário do último log-in bem-sucedido: Qui Mai 21 2020 16:30:11 -03:00 Conectado a: Oracle Database 18c Express Edition Release 18.0.0.0.0 - Production Version 18.4.0.0.0 WHERE ------------------------------ CONTAINER=XEPDB1 1 linha selecionada. SYSTEM@xepdb1::CONTAINER=XEPDB1> @desc dbms_obfuscation_toolkit PROCEDURE DESDECRYPT Nome do Argumento Tipo In/Out Padrão? ------------------------------ ----------------------- ------ -------- INPUT RAW IN KEY RAW IN DECRYPTED_DATA RAW OUT FUNCTION DESDECRYPT RETURNS RAW Nome do Argumento Tipo In/Out Padrão? ------------------------------ ----------------------- ------ -------- INPUT RAW IN KEY RAW IN PROCEDURE DESDECRYPT Nome do Argumento Tipo In/Out Padrão? ------------------------------ ----------------------- ------ -------- INPUT_STRING VARCHAR2 IN KEY_STRING VARCHAR2 IN DECRYPTED_STRING VARCHAR2 OUT FUNCTION DESDECRYPT RETURNS VARCHAR2 Nome do Argumento Tipo In/Out Padrão? ------------------------------ ----------------------- ------ -------- INPUT_STRING VARCHAR2 IN KEY_STRING VARCHAR2 IN PROCEDURE DESENCRYPT Nome do Argumento Tipo In/Out Padrão? ------------------------------ ----------------------- ------ -------- INPUT RAW IN KEY RAW IN ENCRYPTED_DATA RAW OUT FUNCTION DESENCRYPT RETURNS RAW Nome do Argumento Tipo In/Out Padrão? ------------------------------ ----------------------- ------ -------- INPUT RAW IN KEY RAW IN PROCEDURE DESENCRYPT Nome do Argumento Tipo In/Out Padrão? ------------------------------ ----------------------- ------ -------- INPUT_STRING VARCHAR2 IN KEY_STRING VARCHAR2 IN ENCRYPTED_STRING VARCHAR2 OUT FUNCTION DESENCRYPT RETURNS VARCHAR2 Nome do Argumento Tipo In/Out Padrão? ------------------------------ ----------------------- ------ -------- INPUT_STRING VARCHAR2 IN KEY_STRING VARCHAR2 IN PROCEDURE DESGETKEY Nome do Argumento Tipo In/Out Padrão? ------------------------------ ----------------------- ------ -------- SEED RAW IN KEY RAW OUT FUNCTION DESGETKEY RETURNS RAW Nome do Argumento Tipo In/Out Padrão? ------------------------------ ----------------------- ------ -------- SEED RAW IN PROCEDURE DESGETKEY Nome do Argumento Tipo In/Out Padrão? ------------------------------ ----------------------- ------ -------- SEED_STRING VARCHAR2 IN KEY VARCHAR2 OUT FUNCTION DESGETKEY RETURNS VARCHAR2 Nome do Argumento Tipo In/Out Padrão? ------------------------------ ----------------------- ------ -------- SEED_STRING VARCHAR2 IN PROCEDURE DES3DECRYPT Nome do Argumento Tipo In/Out Padrão? ------------------------------ ----------------------- ------ -------- INPUT RAW IN KEY RAW IN DECRYPTED_DATA RAW OUT WHICH BINARY_INTEGER IN DEFAULT IV RAW IN DEFAULT FUNCTION DES3DECRYPT RETURNS RAW Nome do Argumento Tipo In/Out Padrão? ------------------------------ ----------------------- ------ -------- INPUT RAW IN KEY RAW IN WHICH BINARY_INTEGER IN DEFAULT IV RAW IN DEFAULT PROCEDURE DES3DECRYPT Nome do Argumento Tipo In/Out Padrão? ------------------------------ ----------------------- ------ -------- INPUT_STRING VARCHAR2 IN KEY_STRING VARCHAR2 IN DECRYPTED_STRING VARCHAR2 OUT WHICH BINARY_INTEGER IN DEFAULT IV_STRING VARCHAR2 IN DEFAULT FUNCTION DES3DECRYPT RETURNS VARCHAR2 Nome do Argumento Tipo In/Out Padrão? ------------------------------ ----------------------- ------ -------- INPUT_STRING VARCHAR2 IN KEY_STRING VARCHAR2 IN WHICH BINARY_INTEGER IN DEFAULT IV_STRING VARCHAR2 IN DEFAULT PROCEDURE DES3ENCRYPT Nome do Argumento Tipo In/Out Padrão? ------------------------------ ----------------------- ------ -------- INPUT RAW IN KEY RAW IN ENCRYPTED_DATA RAW OUT WHICH BINARY_INTEGER IN DEFAULT IV RAW IN DEFAULT FUNCTION DES3ENCRYPT RETURNS RAW Nome do Argumento Tipo In/Out Padrão? ------------------------------ ----------------------- ------ -------- INPUT RAW IN KEY RAW IN WHICH BINARY_INTEGER IN DEFAULT IV RAW IN DEFAULT PROCEDURE DES3ENCRYPT Nome do Argumento Tipo In/Out Padrão? ------------------------------ ----------------------- ------ -------- INPUT_STRING VARCHAR2 IN KEY_STRING VARCHAR2 IN ENCRYPTED_STRING VARCHAR2 OUT WHICH BINARY_INTEGER IN DEFAULT IV_STRING VARCHAR2 IN DEFAULT FUNCTION DES3ENCRYPT RETURNS VARCHAR2 Nome do Argumento Tipo In/Out Padrão? ------------------------------ ----------------------- ------ -------- INPUT_STRING VARCHAR2 IN KEY_STRING VARCHAR2 IN WHICH BINARY_INTEGER IN DEFAULT IV_STRING VARCHAR2 IN DEFAULT PROCEDURE DES3GETKEY Nome do Argumento Tipo In/Out Padrão? ------------------------------ ----------------------- ------ -------- WHICH BINARY_INTEGER IN DEFAULT SEED RAW IN KEY RAW OUT FUNCTION DES3GETKEY RETURNS RAW Nome do Argumento Tipo In/Out Padrão? ------------------------------ ----------------------- ------ -------- WHICH BINARY_INTEGER IN DEFAULT SEED RAW IN PROCEDURE DES3GETKEY Nome do Argumento Tipo In/Out Padrão? ------------------------------ ----------------------- ------ -------- WHICH BINARY_INTEGER IN DEFAULT SEED_STRING VARCHAR2 IN KEY VARCHAR2 OUT FUNCTION DES3GETKEY RETURNS VARCHAR2 Nome do Argumento Tipo In/Out Padrão? ------------------------------ ----------------------- ------ -------- WHICH BINARY_INTEGER IN DEFAULT SEED_STRING VARCHAR2 IN PROCEDURE MD5 Nome do Argumento Tipo In/Out Padrão? ------------------------------ ----------------------- ------ -------- INPUT RAW IN CHECKSUM RAW(16) OUT FUNCTION MD5 RETURNS RAW(16) Nome do Argumento Tipo In/Out Padrão? ------------------------------ ----------------------- ------ -------- INPUT RAW IN PROCEDURE MD5 Nome do Argumento Tipo In/Out Padrão? ------------------------------ ----------------------- ------ -------- INPUT_STRING VARCHAR2 IN CHECKSUM_STRING VARCHAR2(16) OUT FUNCTION MD5 RETURNS VARCHAR2(16) Nome do Argumento Tipo In/Out Padrão? ------------------------------ ----------------------- ------ -------- INPUT_STRING VARCHAR2 IN SYSTEM@xepdb1::CONTAINER=XEPDB1> Sacou ?? Como os objetos depreciados na esmagadora maioria das vezes CONTINUAM no banco, os eventuais códigos legados que os usam VÂO CONTINUAR FUNCIONANDO, necessidade NENHUMA de alguma tool de conversão.... É POR CONTA DO DESENVOLVEDOR passar a usar as novas alternativas nos próximos desenvolvimentos, okdoc ?? Abraços, Chiappa Em sexta-feira, 22 de maio de 2020 15:39:55 BRT, Tiago de Assis Pimenta tiagopime...@ymail.com [oracle_br] <oracle_br@yahoogrupos.com.br> escreveu: Eu entendi Chiappa, acho que não fui claro ao fazer a pergunta... Para o meu caso do type JSON customizado no banco 11g, não há ferramentas que possam me ajudar, isso já está entendido. A minha pergunta foi em relação a pacotes nativos do Oracle que foram substituídos, vou dar uma exemplo, no 11g, existia um pacote chamado "dbms_obfuscation_toolkit", que na própria documentação da Oracle ( https://docs.oracle.com/cd/E11882_01/appdev.112/e40758/d_obtool..htm#ARPLS028 ), diz que foi descontinuada(deprecated) e que o pacote chamado "dbms_crypto", substitui o pacote "dbms_obfuscation_toolkit". As ferramentas que você comentou, nesse caso dos pacotes "dbms_obfuscation_toolkit" e "dbms_crypto", fariam essa "migração" ? [ ]s Em sexta-feira, 22 de maio de 2020 13:44:30 BRT, Jose Laurindo Chiappa jlchia...@yahoo.com.br [oracle_br] <oracle_br@yahoogrupos.com.br> escreveu: NÃO, colega!!! Plz RELEIA a minha resposta, eu disse " E sendo customizado NÃO TEM COMO as tools de migração da Oracle fazerem qquer conversão automáticamente para vc" - e justamente o CONTRÁRIO, NÃO TEM ferramenta alguma que faça mudança em código customizado não-Oracle!!!! Em quinta-feira, 21 de maio de 2020 18:04:41 BRT, Tiago de Assis Pimenta tiagopime...@ymail.com [oracle_br] <oracle_br@yahoogrupos.com.br> escreveu: Boa tarde Chiappa, tudo bem ??? Desculpa a demora, mas com esses feriados relâmpagos, ficou tudo mais confuso ainda *rs* Perfeito Chiappa, sobre as tools de migração, existe então ferramentas que, quando os recursos nativos do Oracle, mudam de nome, essas ferramentas ajudam a fazer essa migração ? Não conhecia essa possibilidade. [ ]s Em segunda-feira, 18 de maio de 2020 11:44:19 BRT, Jose Laurindo Chiappa jlchia...@yahoo.com.br [oracle_br] <oracle_br@yahoogrupos.com.br> escreveu: Sim sr : com Absoluta Certeza já existe um objeto chamado JSON_VALUE , criado de OUTRA maneira pelo Oracle : se vc olhar a documentação Oracle do 12c em https://docs..oracle.com/database/121/SQLRF/functions093..htm#SQLRF56668 vc JÁ VAI VER que no 12c já foi introduzida uma FUNÇÃO INTERNA com esse nome.... Então SIM, concordo com sua análise : lá na época do 11g alguém construiu um código CUSTOMIZADO, com objetos CUSTOMIZADOS para simular as funções JSON que o Oracle 11 não tinha E não tem, agora por Casualidade no 19c algum/alguns desse(s) construtos e códigos CUSTOMIZADOS estão conflitando com o código/construtos JSON built-in da Oracle.... E sendo customizado NÂO TEM COMO as tools de migração da Oracle fazerem qquer conversão automáticamente para vc, código CUSTOMIZADO é por definição código DE USUÁRIO, Não-Oracle..... Suas duas alternativas então são : 1. RENOMEAR / reconstruir os objetos E códigos da solução JSON customizada aí presente para que NÃO CONFLITEM com o que o banco 12c em diante (e 19c inclusive, óbvio) já trazem OU 2. recodificar a aplicação para que passe a usar os NOVOS objetos E as novas built-in JSON do Oracle, ao invés de querer implementar o código customizado antigo que simulava os objetos/códigos JSON okdoc ?? OU SEJA, de qquer forma vc VAI TER QUE levantar quem e de que forma criou a solução JSON customizada aí no 11g E DEPOIS analisar se é mais fácil (em termos de esforço) adaptar nomes e objetos dela OU a alterar para usar os built-ins Oracle..... É uma tarefa LOCAL que ninguém pode fazer por você : no máximo, SE os desenvolvedores da solução json 11g optaram por re-usar um código publicamente disponível (como https://sourceforge.net/p/pljson/wiki/Home/ , por exemplo) TALVEZ algum desenvolvedor que já usava o mesmo código público possa te dar umas dicas mais, MAS se na verdade os devs optaram por criar código PRÓPRIO para simular o JSON em 11g aí só ELES é que podem alterar isso.... Abraços, José Laurindo Chiappa Em sábado, 16 de maio de 2020 01:50:47 BRT, Tiago de Assis Pimenta tiagopime...@ymail.com [oracle_br] <oracle_br@yahoogrupos.com.br> escreveu: Chiappa, JSON, XML e qualquer coisa relacionada, não entendo muito, então se eu falar alguma besteira, me desculpe. Pelo que eu entendi até agora, no 11g a empresa criou um "type JSON as object", e os construtores são: constructor function json return self as result,constructor function json(str varchar2) return self as result,constructor function json(str in clob) return self as result,constructor function json(cast json_value) return self as result,constructor function json(l in out nocopy json_list) return self as result Quando abri esse type "JSON", o erro está na linha: "json_data json_value_array," Abrindo o type "JSON_VALUE_ARRAY", o erro está na linha: "CREATE OR REPLACE TYPE "JSON_VALUE_ARRAY" as table of json_value;" O erro é: "Compilation errors for TYPE UMBRELLA.JSON_VALUE_ARRAY Error: PLS-00488: 'JSON_VALUE' must be a typeLine: 1Text: CREATE OR REPLACE TYPE "JSON_VALUE_ARRAY" as table of json_value; Error: PL/SQL: Compilation unit analysis terminatedLine: 1Text: CREATE OR REPLACE TYPE "JSON_VALUE_ARRAY" as table of json_value;" Outra pessoa que está me ajudando nessa jornada, me pediu para criar alguns sinônimos, entre eles, o json_value "create synonym json_value for pljson_value;" E não está criando, pelo que eu entendi, pois existe um type já com esse nome, é isso ?? [ ]s Em sexta-feira, 15 de maio de 2020 19:28:49 BRT, Jose Laurindo Chiappa jlchia...@yahoo.com.br [oracle_br] <oracle_br@yahoogrupos.com.br> escreveu: Ah, e outro detalhe importante : como o datatype JSON foi introduzido no 12c mas sofreu ** várias ** melhorias no 18c e 19c, tenha Certeza de que tudo que vc fizer é com a ÚLTIMA VERSÃO, mais Atualizada possível, do PL/SQL Developer OU então (melhor) use o Oracle SQL DEVELOPER 19.x ou o sql*plus 19..x que veio junbto com o RDBMS Oracle 19c.... Abraços, Chiappa Em sexta-feira, 15 de maio de 2020 19:16:32 BRT, Jose Laurindo Chiappa <jlchia...@yahoo.com.br> escreveu: Blz ? Então, primeira coisa até onde sei no Oracle 11g ** absolutamente Não Existia ** um datatype nativo para JSON, vide https://asktom.oracle.com/pls/apex/asktom.search?tag=converting-json-data-into-oracle-11g .... Pra começarmos a entender a sua situação, plz nos explique QUAL datatype vc usou realmente nas tabelas 11g (provavelmente deve ter sido CLOB, já que um JSON nada mais é do que um texto), e COMO vc fazia a conversão/validação para JSON (no 11g provavelmente vc devia estar usando as packages do APEX, imagino)... Abraços, Chiappa Em sexta-feira, 15 de maio de 2020 14:39:44 BRT, Tiago de Assis Pimenta tiagopime...@ymail.com [oracle_br] <oracle_br@yahoogrupos.com.br> escreveu: Pessoal, boa tarde, tudo bem ??? Na empresa que trabalho, estamos com esse projeto de migrar o database da versão 11.2.0.4.0 para 19.0.0.0.0, porém, estamos com alguns objetos inválidos, acredito eu, por causa do type JSON, que no 11 não era nativo e se não me engano, a partir da versão 12, já é nativo. Dei uma olhada em alguns docs da Oracle sobre a migração do database, mas nenhum ainda que eu vi, fala sobre as diferenças entre o JSON do 11g para o 19c Alguém passou por isso ? Ou que possa me passar o caminho das pedras ? - Dados do Ambiente - SO Desenvolvimento: Windows 10 64bitsPL/SQL Developer: 14.0.0.1961 (64 bit) Banco: Connected to Oracle Database 19c EE Extreme Perf Release 19.0.0.0.0 - Um dos Vários Erros - Compilation errors for TYPE BODY BASE.JSON Error: PLS-00103: Encountered the symbol "." when expecting one of the following: ( Line: 80 Text: insert_value json_value := nvl(pair_value, json_value......makenull); Obrigado. #yiv4939709420 #yiv4939709420 -- #yiv4939709420ygrp-mkp {border:1px solid #d8d8d8;font-family:Arial;margin:10px 0;padding:0 10px;}#yiv4939709420 #yiv4939709420ygrp-mkp hr {border:1px solid #d8d8d8;}#yiv4939709420 #yiv4939709420ygrp-mkp #yiv4939709420hd {color:#628c2a;font-size:85%;font-weight:700;line-height:122%;margin:10px 0;}#yiv4939709420 #yiv4939709420ygrp-mkp #yiv4939709420ads {margin-bottom:10px;}#yiv4939709420 #yiv4939709420ygrp-mkp .yiv4939709420ad {padding:0 0;}#yiv4939709420 #yiv4939709420ygrp-mkp .yiv4939709420ad p {margin:0;}#yiv4939709420 #yiv4939709420ygrp-mkp .yiv4939709420ad a {color:#0000ff;text-decoration:none;}#yiv4939709420 #yiv4939709420ygrp-sponsor #yiv4939709420ygrp-lc {font-family:Arial;}#yiv4939709420 #yiv4939709420ygrp-sponsor #yiv4939709420ygrp-lc #yiv4939709420hd {margin:10px 0px;font-weight:700;font-size:78%;line-height:122%;}#yiv4939709420 #yiv4939709420ygrp-sponsor #yiv4939709420ygrp-lc .yiv4939709420ad {margin-bottom:10px;padding:0 0;}#yiv4939709420 #yiv4939709420actions {font-family:Verdana;font-size:11px;padding:10px 0;}#yiv4939709420 #yiv4939709420activity {background-color:#e0ecee;float:left;font-family:Verdana;font-size:10px;padding:10px;}#yiv4939709420 #yiv4939709420activity span {font-weight:700;}#yiv4939709420 #yiv4939709420activity span:first-child {text-transform:uppercase;}#yiv4939709420 #yiv4939709420activity span a {color:#5085b6;text-decoration:none;}#yiv4939709420 #yiv4939709420activity span span {color:#ff7900;}#yiv4939709420 #yiv4939709420activity span .yiv4939709420underline {text-decoration:underline;}#yiv4939709420 .yiv4939709420attach {clear:both;display:table;font-family:Arial;font-size:12px;padding:10px 0;width:400px;}#yiv4939709420 .yiv4939709420attach div a {text-decoration:none;}#yiv4939709420 .yiv4939709420attach img {border:none;padding-right:5px;}#yiv4939709420 .yiv4939709420attach label {display:block;margin-bottom:5px;}#yiv4939709420 .yiv4939709420attach label a {text-decoration:none;}#yiv4939709420 blockquote {margin:0 0 0 4px;}#yiv4939709420 .yiv4939709420bold {font-family:Arial;font-size:13px;font-weight:700;}#yiv4939709420 .yiv4939709420bold a {text-decoration:none;}#yiv4939709420 dd.yiv4939709420last p a {font-family:Verdana;font-weight:700;}#yiv4939709420 dd.yiv4939709420last p span {margin-right:10px;font-family:Verdana;font-weight:700;}#yiv4939709420 dd.yiv4939709420last p span.yiv4939709420yshortcuts {margin-right:0;}#yiv4939709420 div.yiv4939709420attach-table div div a {text-decoration:none;}#yiv4939709420 div.yiv4939709420attach-table {width:400px;}#yiv4939709420 div.yiv4939709420file-title a, #yiv4939709420 div.yiv4939709420file-title a:active, #yiv4939709420 div.yiv4939709420file-title a:hover, #yiv4939709420 div.yiv4939709420file-title a:visited {text-decoration:none;}#yiv4939709420 div.yiv4939709420photo-title a, #yiv4939709420 div.yiv4939709420photo-title a:active, #yiv4939709420 div.yiv4939709420photo-title a:hover, #yiv4939709420 div.yiv4939709420photo-title a:visited {text-decoration:none;}#yiv4939709420 div#yiv4939709420ygrp-mlmsg #yiv4939709420ygrp-msg p a span.yiv4939709420yshortcuts {font-family:Verdana;font-size:10px;font-weight:normal;}#yiv4939709420 .yiv4939709420green {color:#628c2a;}#yiv4939709420 .yiv4939709420MsoNormal {margin:0 0 0 0;}#yiv4939709420 o {font-size:0;}#yiv4939709420 #yiv4939709420photos div {float:left;width:72px;}#yiv4939709420 #yiv4939709420photos div div {border:1px solid #666666;min-height:62px;overflow:hidden;width:62px;}#yiv4939709420 #yiv4939709420photos div label {color:#666666;font-size:10px;overflow:hidden;text-align:center;white-space:nowrap;width:64px;}#yiv4939709420 #yiv4939709420reco-category {font-size:77%;}#yiv4939709420 #yiv4939709420reco-desc {font-size:77%;}#yiv4939709420 .yiv4939709420replbq {margin:4px;}#yiv4939709420 #yiv4939709420ygrp-actbar div a:first-child {margin-right:2px;padding-right:5px;}#yiv4939709420 #yiv4939709420ygrp-mlmsg {font-size:13px;font-family:Arial, helvetica, clean, sans-serif;}#yiv4939709420 #yiv4939709420ygrp-mlmsg table {font-size:inherit;font:100%;}#yiv4939709420 #yiv4939709420ygrp-mlmsg select, #yiv4939709420 input, #yiv4939709420 textarea {font:99% Arial, Helvetica, clean, sans-serif;}#yiv4939709420 #yiv4939709420ygrp-mlmsg pre, #yiv4939709420 code {font:115% monospace;}#yiv4939709420 #yiv4939709420ygrp-mlmsg * {line-height:1.22em;}#yiv4939709420 #yiv4939709420ygrp-mlmsg #yiv4939709420logo {padding-bottom:10px;}#yiv4939709420 #yiv4939709420ygrp-msg p a {font-family:Verdana;}#yiv4939709420 #yiv4939709420ygrp-msg p#yiv4939709420attach-count span {color:#1E66AE;font-weight:700;}#yiv4939709420 #yiv4939709420ygrp-reco #yiv4939709420reco-head {color:#ff7900;font-weight:700;}#yiv4939709420 #yiv4939709420ygrp-reco {margin-bottom:20px;padding:0px;}#yiv4939709420 #yiv4939709420ygrp-sponsor #yiv4939709420ov li a {font-size:130%;text-decoration:none;}#yiv4939709420 #yiv4939709420ygrp-sponsor #yiv4939709420ov li {font-size:77%;list-style-type:square;padding:6px 0;}#yiv4939709420 #yiv4939709420ygrp-sponsor #yiv4939709420ov ul {margin:0;padding:0 0 0 8px;}#yiv4939709420 #yiv4939709420ygrp-text {font-family:Georgia;}#yiv4939709420 #yiv4939709420ygrp-text p {margin:0 0 1em 0;}#yiv4939709420 #yiv4939709420ygrp-text tt {font-size:120%;}#yiv4939709420 #yiv4939709420ygrp-vital ul li:last-child {border-right:none !important;}#yiv4939709420