elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Como proteger una cartera - billetera de Bitcoin


  Mostrar Mensajes
Páginas: 1 ... 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 [64] 65 66 67 68 69 70 71 72 73 74 75 76 77
631  Foros Generales / Foro Libre / Re: Acabo de recibir propaganda electoral para las nuevas elecciones Españolas en: 8 Noviembre 2019, 00:16 am
Díganme que no es cierto.

Yo cuando voté puse un texto así:
Citar
Quiero que el universo mejore, para lo cual creo que sería útil que el sistema de gobierno uruguayo sea más o menos así:

1er semana en que se aplica:
Cada uruguay@ puede proponer una ley o modificación a una (incluyendo el hecho de eliminarla).

2nda:
Igual que la anterior pero con el agregado de que cada uruguay@ puede votar a favor o en contra de una de las propuestas emitidas la semana anterior.

3era y siguentes:
Igual que la anterior pero con el agregado de que, si en la semana anterior hubo una propuesta con más votos positivos que negativos, cada uruguay@ puede votar a favor o en contra de dicha propuesta. Si en esta instancia obtiene más votos positivos que negativos, comenzaría a aplicarse, y sino no se podría proponer de nuevo hasta dentro de un año.

Dicho de otro modo, en cada semana cada uruguay@ podría:
1- Proponer una ley o modificación a una (incluyendo el hecho de eliminarla).
2- Votar a favor o en contra de una de las propuestas emitidas la semana anterior (salvo en la 1er semana de aplicación ya que aún no habría propuestas emitidas).
3- Si en la semana anterior hubo una propuesta con más votos positivos que negativos, cada uruguay@ puede votar a favor o en contra de dicha propuesta. Si en esta instancia obtiene más votos positivos que negativos, comenzaría a aplicarse, y sino no se podría proponer de nuevo hasta dentro de un año.

O:
1- Proponer ley o modificación.
2- Votar a favor o en contra de una propuesta emitida la semana pasada.
3- Votar a favor o en contra de la propuesta que la semana pasada obtuvo más votos.

Entiendo que los puntos 2 y 3 pueden confundirse, pero todo esto tiene un fundamento:
Primero hay que hacer propuestas y dar tiempo para que la gente las analice.
Luego hay que ver cual es la propuesta que más se quiere.
Por último hay que ver si la mayoría está de acuerdo. Esto importa porque en teoría cada persona propondría algo distinto pero si algunos “vivos” se juntan para proponer lo mismo entonces ellos obtendrían más votos aunque a la mayoría le parezca un desastre. Esta “2nda vuelta” se hace para evitar esa posibilidad.
En cuanto a lo de “un año”, quizá no sea lo mejor pero es para evitar la posibilidad de que se esté votando contra las mismas cosas a cada rato.

Está claro que en este sistema no habría tarados o listillos cobrando platales por administrar nuestro país, barrio, etc, como les da la gana, así como nadie en sus cabales paga platales a alguien para que administre su casa, barrio, etc.

Por más información pueden ver el video “No veas este video si vas a votar” y “¿Qué es realmente la democracia?” de Youtube, usuario Whymaps o Whydemocracy.
632  Foros Generales / Foro Libre / Re: Chinos están vendiendo drones asesinos autónomos a Medio Oriente en: 8 Noviembre 2019, 00:10 am
Si es ilegal ¿por qué los representantes de China no van presos, se les obliga a pagar o algo?^
Si es legal ¿por qué no se ilegaliza?
633  Foros Generales / Noticias / Re: Así es el decreto para acabar con la "independencia online" de Cataluña con el.. en: 7 Noviembre 2019, 18:15 pm
Me gustaría ver buenos argumentos contra el independientismo.

Los mejores que he visto son:
1- Es un truco de unos pocos para tener más poder.
2- Por cuestiones históricas, que tomaría mucho explicarte, no debería ocurrir.
3- Sería caótico.

Sin embargo:
1- Tengo entendido que no, que es una gran parte de sus pobladores. Si son guiados por un líder, aunque fuese Hitler, no me interesa; es su territorio y mientras no contaminen el planeta desmedidamente, torturen, construyan bombas nucleares, etc, no veo problema en que vivan como ellos quieran.
2- Por falta de explicación, no me convence.
3- El meter a todos en una lata de sardinas, aunque sea ordenado visto desde arriba, visto desde dentro es caótico. Arréglenlo. Me refiero a ambas cosas, dan independencia si ellos lo quieren, y luego España que se maneje, que no ande creciendo usando a otros como base, pisoteando, o agarrando recursos como vampiro chupa sangre.

Soy de Uruguay, país de América que como muchos otros se independizó de España a base de sablazos. ¿Aún no entienden que el imperialismo es algo malo?

También, dado que me interesa hacer una historia de un juego llamado 8 Eyes que menciona al Imperio Otomano, estuve leyendo al respecto, de cómo los jefes querían que ciertos territorios y gente permanecieran suyos, imponiéndoles sus costumbres, mientras estos semi esclavos luchaban por independizarse. Grecia, Egipto, Rumania, Bulgaria... Muchos. Diría incluso que, entre más cosas administre una persona, peor las administrará (fue un problema en el imperio también). Por lo tanto, pretender que un mismo gobierno de personas administre toda España, me parece menos lógico que que cada pueblo se autoadministre.
Es que, no entiendo cómo aún no se les ha dado por administrar las casas. Impuesto al Sol ya hay creo, lol.

Me parece algo muy claro. No quieren dar independencia porque perderían recursos. Y es imposible que un sitio no los genere, siempre se puede matar a sus habitantes para lograrlo, pero lo que quería decir es que, si tener ese territorio diera más problemas que beneficios, no lo querrían. Son listillos.
634  Programación / Programación General / (Solucionado) Variar números en A arrays. en: 5 Noviembre 2019, 18:29 pm
Esto varía los números en 1 array:
Código:
C = new Array(1, 1, 1);
Max = 10;

// Solcheck
if (C[1]<C[0]) {
    // Sol
    stop ();
}

// Candmod
W = 1;
SenaladordeP = 2;
do {
    if (C[SenaladordeP]<Max) {
        C[SenaladordeP] = C[SenaladordeP]+1;
        W = 0;
    } else {
        C[SenaladordeP] = 1;
        if (0 < SenaladordeP) {
            SenaladordeP = SenaladordeP-1;
        } else {
            // No hay Sol o está más allá del Max.
            stop ();
        }
    }
} while (W==1);
gotoAndPlay (2);

Intentando variar A arrays (en este ejemplo A=2) hice esto:
Código:
C1 = new Array(1, 1, 1);
C2 = new Array(1, 1, 1);
Max = 10;

trace (C1+" "+C2);
// Solcheck
if (C1[0]<C2[0]) {
    // Sol
    stop ();
}

// Candmod
W = 1;
SenaladordeC = 2;
SenaladordeP = 2;
do {
    if (eval("C"+SenaladordeC+"["+SenaladordeP+"]")<Max) {
        trace (eval("C"+SenaladordeC+"["+SenaladordeP+"]"));
        set ("C"+SenaladordeC+"["+SenaladordeP+"]", eval("C"+SenaladordeC+"["+SenaladordeP+"]")+1);
        W = 0;
    } else {
        set ("C"+SenaladordeC+"["+SenaladordeP+"]", 1);
        if (0<SenaladordeP) {
            SenaladordeP = SenaladordeP-1;
        } else {
            SenaladordeP = 2;
            if (1<SenaladordeC) {
                SenaladordeC = SenaladordeC-1;
            } else {
                // No hay Sol o está más allá del Max.
                stop ();
            }
        }
    }
} while (W == 1);
gotoAndPlay (2);
El contenido de los arrays debería variar más o menos así:
Citar
// Cambio 1:
C1 = 1, 1, 1
C2 = 1, 1, 2
// Cambio 2:
C1 = 1, 1, 1
C2 = 1, 1, 3
Como si fuesen 6 cifras, que en vez de ser del 0 al 9 fuesen del 1 al 10.
El problema es que el intérprete o lo que sea, cuando por ejemplo le digo:
set ("C"+SenaladordeC+"["+SenaladordeP+"]", eval("C"+SenaladordeC+"["+SenaladordeP+"]")+1);
...lo que hace es crear variables llamadas C2[SenaladordeP], es decir, C2[2], C2[1] y C2[0]. Más claro:
Citar
Level #0:
  Variable _level0.$version = "WIN 5,0,32,0"
  Variable _level0.C1 = [object #1] [
    0:1,
    1:1,
    2:1
  ]
  Variable _level0.C2 = [object #2] [
    0:1,
    1:1,
    2:1
  ]
  Variable _level0.Max = 10
  Variable _level0.W = 0
  Variable _level0.SenaladordeC = 2
  Variable _level0.SenaladordeP = 2
  Variable _level0.C2[2] = 8
  Variable _level0.C2[1] = 3
  Variable _level0.C2[0] = 1
En vez de variar las partes del array, o sea C2[2], C2[1] y C2[0], me crea y varía variables con esos mismos nombres. No puedo hacer referencia a contenidos de array porque lo interpreta como si fuese referencia a una variable llamada igual que una referencia a array. Pero yo no cree esas variables.

Tal vez el problema es usar set (aunque no hubo problema en el 1er código) o habría que modificar la referencia en el eval (quitar comillas, poner comillas, no sé).

¿Ideas?

El programa es Macromedia Flash 5, que usa una vieja versión de Action Script. Puede que el error sea cosa de dicho programa/lenguaje, aunque imagino que es posible alguna solución que no sea cambiar de programa/lenguaje.

Gracias.
635  Programación / Programación General / Re: S strings variando su contenido. ¿Cómo? en: 5 Noviembre 2019, 18:06 pm
Esto funciona:
Código:
// A~Z pero no Ñ
Chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
C1CharID1 = 0;
C1Largo = 1;
C1 = "A";
C2CharID1 = 0;
C2Largo = 1;
C2 = "A";
C3CharID1 = 0;
C3Largo = 1;
C3 = "A";
Max = "ZZ";
function CandMod () {
    W = 1;
    SenaladordeChar = eval("C"+SenaladordeC+"Largo");
    do {
        if (eval("C"+SenaladordeC+"CharID"+SenaladordeChar)<25) {
            set ("C"+SenaladordeC+"CharID"+SenaladordeChar, eval("C"+SenaladordeC+"CharID"+SenaladordeChar)+1);
            W = 0;
        } else {
            set ("C"+SenaladordeC+"CharID"+SenaladordeChar, 0);
            if (1<SenaladordeChar) {
                SenaladordeChar = SenaladordeChar-1;
            } else {
                set ("C"+SenaladordeC+"Largo", eval("C"+SenaladordeC+"Largo")+1);
                set ("C"+SenaladordeC+"CharID"+eval("C"+SenaladordeC+"Largo"), 0);
                W = 0;
            }
        }
    } while (W == 1);
}

// Solcheck
if (C2<C1) {
    // Sol
    stop ();
} else {
    // Candmod (¿qué Cand variar?)
    W2 = 1;
    SenaladordeC = 3;
    do {
        if (eval("C"+SenaladordeC) != Max) {
            W2 = 0;
            CandMod();
        } else {
            set ("C"+SenaladordeC+"CharID1", 0);
            set ("C"+SenaladordeC+"Largo", 1);
            set ("C"+SenaladordeC, "A");
            if (1<SenaladordeC) {
                SenaladordeC = SenaladordeC-1;
            } else {
                // No hay Sol o está más allá del Max.
                stop ();
            }
        }
    } while (W2 == 1);
}

// Concatenar.
set ("C"+SenaladordeC, "");
SenaladordeChar = 0;
do {
    SenaladordeChar = SenaladordeChar+1;
    set ("C"+SenaladordeC, eval("C"+SenaladordeC)+Chars.charAt(eval("C"+SenaladordeC+"CharID"+SenaladordeChar)));
} while (SenaladordeChar<eval("C"+SenaladordeC+"Largo"));
gotoAndPlay (2);
Me tomaría mucho explicarlo ¨(incluso entenderlo; hace tiempo que no lo toco), el resultado es este:
Citar
A A A
A A B
A A C
A A D
A A E
A A F
A A G
A A H
A A I
A A J
A A K
Hasta A A Z, luego viene A A AA, y aumenta del mismo modo hasta A A ZZ (nótese que a principios del code dice Max="ZZ"), momento en que cambia a A B A.
Se varían 3 textos.

Pueden cerrar el tema, aunque se aceptan mejoras a los códigos expuestos.
636  Programación / Programación General / (Solucionado) S strings variando su contenido. en: 27 Octubre 2019, 05:44 am
Por problemas emocionales me cuesta concentrarme y además esto está difícil.

Esto es variar 1 variable número:
Código:
C = 1;

// Candmod
C = C+1;

gotoAndPlay (2);
Pueden usar do while, en los siguientes también. En estos códigos una línea en blanco representa un paso, como en Basic. En algunos casos uso varios pasos para que ninguno sea especialmente largo (ocurre si tienen do while).

Esto es variar 2 variables número:
Código:
C1 = 1;
C2 = 1;
Max = 10;

    if (C2<Max) {
        C2 = C2+1;
    } else if (C1<Max) {
        C2 = 1;
        C1 = C1+1;
    } else {
        stop ();
    }
}

gotoAndPlay (2);
Aquí hay un tope, pero tengo idea de cómo mejorar eso, no es el tema.

Esto es variar V variables número; en este caso V es 3 (se llama Parte).
Código:
C1 = 1;
C2 = 1;
C3 = 1;
Max = 10;

    Parte = 3;

if (eval("C"+Parte)<Max) {
    // Si el C señalado no está al máximo, aumenta
    set ("C"+Parte, eval("C"+Parte)+1);
    // Listo.
    gotoAndPlay (2);
}

// El C señalado no puede aumentar, se resetea
set ("C"+Parte, 1);
if (1<Parte) {
    // Hay un C anterior, se señala
    Parte = Parte-1;
    // Ver si el C señalado puede aumentar
    gotoAndPlay (3);
} else {
    stop ();
}

Esto es variación de 1 string:
Código:
// A~Z pero no Ñ
Chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
CP1 = -1;
CLargo = 1;

W = 1;
Parte = CLargo;
do {
    if (eval("CP"+Parte)<25) {
        set ("CP"+Parte, eval("CP"+Parte)+1);
        W = 0;
    } else {
        set ("CP"+Parte, 0);
        if (1<Parte) {
            Parte = Parte-1;
        } else {
            CLargo = CLargo+1;
            set ("CP"+CLargo, 0);
            W = 0;
        }
    }
} while (W == 1);

// Concatenar.
C = "";
Parte = 0;
do {
    Parte = Parte+1;
    C = C+Chars.charAt(eval("CP"+Parte));
} while (Parte<CLargo);
gotoAndPlay (2);
Probablemente usarían un array para esto, yo no quiero.

Variación de 2 strings:
Código:
// A~Z pero no Ñ
Chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
C1P1 = 0;
C1Largo = 1;
C1 = "A";
C2P1 = 0;
C2Largo = 1;
C2 = "A";
Max = "ZZ";
function CandMod () {
    W = 1;
    Parte = eval("C"+Up+"Largo");
    do {
        if (eval("C"+Up+"P"+Parte)<25) {
            set ("C"+Up+"P"+Parte, eval("C"+Up+"P"+Parte)+1);
            W = 0;
        } else {
            set ("C"+Up+"P"+Parte, 0);
            if (1<Parte) {
                Parte = Parte-1;
            } else {
                set ("C"+Up+"Largo", eval("C"+Up+"Largo")+1);
                set ("C"+Up+"P"+eval("C"+Up+"Largo"), 0);
                W = 0;
            }
        }
    } while (W == 1);
}

    // ¿qué Cand variar?
    if (C2 != Max) {
        Up = 2;
        CandMod();
    } else if (C1 != Max) {
        C2P1 = 0;
        C2Largo = 1;
        C2 = "A";
        Up = 1;
        CandMod();
    } else {
        stop ();
    }

// Concatenar.
set ("C"+Up, "");
Parte = 0;
do {
    Parte = Parte+1;
    set ("C"+Up, eval("C"+Up)+Chars.charAt(eval("C"+Up+"P"+Parte)));
} while (Parte<eval("C"+Up+"Largo"));
gotoAndPlay (2);

Variación de S strings es lo que estuve pensando (desconcentrándome porque estoy con la cabeza en otro lado) por horas ya.
Básicamente hay que "copiar" el método usado en 3 nums, pero como acá hay muchas más cosas no sé bien cómo. De momento agregué esto:
Código:
C3P1 = 0;
C3Largo = 1;
C3 = "A";
Max = "ZZ";
CtoUp = 3;

Y supongo que en vez de esto:
Código:
   // ¿qué Cand variar?)
    if (C2 != Max) {
        Up = 2;
        CandMod();
    } else if (C1 != Max) {
        C2P1 = 0;
        C2Largo = 1;
        C2 = "A";
        Up = 1;
        CandMod();
    } else {
        stop ();
    }
Debería hacer algo como que si "C"+CtoUp != Max entonces lo dicho aumenta (y ya se produce la variación), sino si CtoUp puede bajar se resetea lo relativo a C, CtoUp baja y el proceso que estoy describiendo debería repetirse, y sino stop.
Puede ser que sea eso. Tal vez, más que la solución o el código, me haría falta algo bastante distinto a como lo hice, o algo para no entreverarme tanto.

Como ven aún no apliqué soluciones a ordenar con Ñ, por ahora no me voy a complicar con eso.

Gracias.
637  Programación / Programación General / ¿Cómo ordenar por abecedario si el lenguaje considera que Z<Ñ? en: 20 Octubre 2019, 17:54 pm
Sólo estoy usando mayúsculas.

Si al programa le doy un texto C y quiero que el programa analice si el texto es mayor (es decir si en el abecedario está después) que "ZY", wait, creo que ya sé:
Z es considerado < Ñ.
Entonces hago:
Código:
Si "ZY" < C
  Si el Char0 de C es "Ñ"
    // C < "ZY"
  sino si el Char0 de C es "Z"
    Si el Char1 de C es "Ñ"
      // C < "ZY"
    sino si el Char1 de C es "Y"
      Si el Char2 de C no es Void/Null/undefined (debo ver cómo le llama mi lenguaje)
        // C == "ZY"
      sino
        // "ZY" < C

O:
Código:
Si "ZY" < C
  Si el Char0 de C es "Ñ"
    // C < "ZY"
  sino si el Char0 de C es "Z"
    Si el Char1 de C es "Ñ"
      // C < "ZY"
    sino si el Char1 de C es "Y"
      Si C == "ZY"
        // C == "ZY"
      sino
        // "ZY" < C

¿Correcto?

Ahora, si en vez de "ZY" fuese un texto variable, así como su cantidad de caracteres ¿cómo haría? Entiendo que debo usar un while pero el hecho de que pueda tener Ñ el texto también me complica un poco.
638  Foros Generales / Sugerencias y dudas sobre el Foro / Las reglas son muy largas. en: 20 Octubre 2019, 17:10 pm
En mi última participación hace como 1 mes dije a mod "luego leo las reglas" y como no tenía ganas de leerlas no he vuelto a participar hasta ahora que quiero hacer una consulta bastante completa, y estaba dispuesto a leer las reglas.

Las busqué en palabras arriba, en la zona que está anterior al foro, en el FAQ del foro, hasta que cansado fui a ver el mensaje del mod del que hablé, el cual las tiene en la firma. Luego vi que estaban en otro lado aunque con unas siglas un tanto extrañas; yo con mis ojos buscaba rápido algo similar a "Reglas del foro" y que estuviera con negrita o algo.
Está aquí
https://foro.elhacker.net/sugerencias_y_dudas_sobre_el_foro-b10.0/
pero entreverado con muchos otros temas que no parecen tan relevantes.

El link "Leer reglas" de simorg me lleva aquí
https://foro.elhacker.net/reglas.htm
que me parece una versión más cómoda de leer. Más rápida en cargarse y demás.

Y así empieza:
"Solamente una vez leído, entendido, aceptada plenamente la declaración (no permitiéndose aceptaciones parciales o condicionales) y cumpliendo todas las condiciones expresadas a continuación se podrá permanecer en esta  web, en caso contrario usted tiene prohibido el acceso a este lugar y el uso de la misma por lo que deberá salir inmediatamente de elhacker.net."

Yo podría hacerme el olvidadizo o despistado, y seguir como si nada, pero quiero ser sincero y blablabla (justo y no sé qué más) y decir que no leeré todo lo demás que está escrito ahí, porque me parece demasiado largo.

¿Entonces...?



 Podrían decir algo como "En caso de que ud no las cumpla, dependiendo de la gravedad de la infracción, sus post pueden ser movidos, borrados, ud baneado o su cuenta eliminada".
Eso daría la opción legal de permanecer sin leerlas y atenerse a las consecuencias, que me imagino no son tan graves, no es "el punto 2000 dice que si hablas a favor de Bill Gates empezaremos a enviarte un virus a cada rato", así que no me preocupan mucho las consecuencias, no soy un santo pero tampoco creo que merezca algo tan malo, ni que las reglas digan que deba recibirlo; confío en el sentido común.

Participo en otro foro donde no hay reglas casi y es un desastre, pero tampoco es que yo sea tan quisquilloso.
639  Foros Generales / Foro Libre / Re: Adivina de dónde es mi avatar. en: 29 Septiembre 2019, 01:08 am
La respuesta está aquí:
https://www.youtube.com/watch?v=StZcUAPRRac
pero el significado para mí es más bien como lo era para Platón, un portador de luz que sale de la caverna, o sino de alguien que tras haber estado en un pozo (con problemas, etc) sale.

Pensé que el del Machacador lo había hecho él mismo, estoy decepcionado :(

¿Beetelljuice malo? Según recuerdo intenta espantar a unos vivos que compraron una casa, para que unos fantasmas puedan seguir viviendo en ella. ¿Qué sería lo bueno, decir: "Señores seres vivos, esta casa está habitada desde hace mucho, por favor busquen otra. Gracias."?

simorg:
No es que no me guste el foro, sólo que un aspecto de él no me gusta, pero si es lo que hay qué le vamos a hacer.
No leí las reglas, en general si un avatar, firma, etc, rompe las normas se dice al momento de intentar ponerlo o tarde o temprano un mod lo quita. Esta además fue una forma de pedir disculpas si me había pasado.
Luego leeré las reglas.
640  Foros Generales / Foro Libre / Re: ¿Creeis en las teorias conspirativas? en: 28 Septiembre 2019, 02:51 am
Machacador:
No hay que generalizar, pero mi cordura y tolerancia tienen ciertos límites que no siempre puedo manejar. Es lo que hay. Y si los ETs nos ven hacer cualquier desastre, es lógico que se mantengan alejados, como nosotros nos mantenemos alejados de los narcos por ejemplo. Aunque haya algunos humanos con quienes sí valdría la pena que hablen y ciertas cosas que sí valdría la pena que enseñen. O quizá no, quizá por ahora lo único importante es la moral. Pero la gente no tiene la culpa de cómo es su sistema de gobierno, por ejemplo.

Quizá he sido demasiado soberbio, pero estarás de acuerdo en que hay muchos peores que yo. Claro que no me conoces, no puedes saberlo, pero yo no quemé el amazonas, por ejemplo. Sí torturé babosas cuando era niño, y ahora las tiro al basurero para que no coman mis plantas, pero siendo adulto no ando "jugando" con caballos, toros, etc, como muchos sí. Em... sí me gusta jugar con un gato, se enoja a veces, pero no creo que yo sea tan malo.

Por otro lado, el perro no tiene la culpa de ser como es, si lo tienen todo el día ahí parece. Pero como digo, la justicia en mi país es lenta o no sé bien qué pasa, de hecho parece que les dieron la razón a ellos, como si pensaran que está bien tener al perro así encerrado y que ladre todo lo que quiera.

Repito, no es realmente que odie a los perros, pero en mi barrio hacen mucho ruido y no veo que aporten, más bien hacen ruido, desconcentran, enojan, enloquecen.
Yo tenía perro, lo quería mucho, entiendo ese cariño de querer abrazarlo y todo, pero si lo usan de alarma y los tienen en un estado casi salvaje, o si en algunas razas (como me dijo la fiscal) no se puede evitar, entonces no creo que esté bien tenerlos, si van a estar así.
Páginas: 1 ... 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 [64] 65 66 67 68 69 70 71 72 73 74 75 76 77
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines