<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Blog AgileWorks</title>
	<atom:link href="http://www.agile-works.com/blog/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://www.agile-works.com/blog</link>
	<description>Just another WordPress weblog</description>
	<lastBuildDate>Fri, 06 Aug 2010 23:07:42 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Jugar Mario Bross con los ojos</title>
		<link>http://www.agile-works.com/blog/?p=416</link>
		<comments>http://www.agile-works.com/blog/?p=416#comments</comments>
		<pubDate>Wed, 04 Aug 2010 17:53:58 +0000</pubDate>
		<dc:creator>gmateo</dc:creator>
				<category><![CDATA[links]]></category>
		<category><![CDATA[Control de juegos]]></category>
		<category><![CDATA[Nintendo]]></category>

		<guid isPermaLink="false">http://www.agile-works.com/blog/?p=416</guid>
		<description><![CDATA[Fuente: http://trippletech.com/news/1691&#160;
Un grupo de ingenieros lograron controlar un Nintendo con el movimiento de los ojos.
La idea fue colocar electrodos alrededor de los ojos para monitorear el movimiento de los mismos y luego hacer que el Nintendo acepte estos movimientos como datos de entrada.
]]></description>
			<content:encoded><![CDATA[<p>Fuente: <a href="http://trippletech.com/news/1691">http://trippletech.com/news/1691</a>&nbsp;</p>
<p>Un grupo de ingenieros lograron controlar un Nintendo con el movimiento de los ojos.</p>
<p>La idea fue colocar electrodos alrededor de los ojos para monitorear el movimiento de los mismos y luego hacer que el Nintendo acepte estos movimientos como datos de entrada.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.agile-works.com/blog/?feed=rss2&amp;p=416</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Prototipo de un “Mouse Invisible” &#8211; MIT</title>
		<link>http://www.agile-works.com/blog/?p=401</link>
		<comments>http://www.agile-works.com/blog/?p=401#comments</comments>
		<pubDate>Fri, 09 Jul 2010 20:42:46 +0000</pubDate>
		<dc:creator>gmateo</dc:creator>
				<category><![CDATA[links]]></category>
		<category><![CDATA[MIT]]></category>
		<category><![CDATA[prototipo]]></category>

		<guid isPermaLink="false">http://www.agile-works.com/blog/?p=401</guid>
		<description><![CDATA[Fuente: http://techland.com/2010/07/09/mits-mouseless-project-is-an-invisible-computer-mouse/ 
La idea es simular el efecto de usar un mouse pero sin la necesidad de tener un mouse real.
Para esto se usa dos cámaras infrarrojas capaces de identificar los detalles y la posición de la mano.
El usuario mueve la mano como si estuviera usando un mouse real y las cámaras y el programa [...]]]></description>
			<content:encoded><![CDATA[<p>Fuente: <a href="http://techland.com/2010/07/09/mits-mouseless-project-is-an-invisible-computer-mouse/">http://techland.com/2010/07/09/mits-mouseless-project-is-an-invisible-computer-mouse/ </a></p>
<p>La idea es simular el efecto de usar un mouse pero sin la necesidad de tener un mouse real.</p>
<p>Para esto se usa dos cámaras infrarrojas capaces de identificar los detalles y la posición de la mano.</p>
<p>El usuario mueve la mano como si estuviera usando un mouse real y las cámaras y el programa capturan estos movimientos, los cuales luego son interpretados para generar los cambios de posición y funcionamiento del cursor de la pantalla.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.agile-works.com/blog/?feed=rss2&amp;p=401</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Encontrando las validaciones configuradas en un bean</title>
		<link>http://www.agile-works.com/blog/?p=398</link>
		<comments>http://www.agile-works.com/blog/?p=398#comments</comments>
		<pubDate>Wed, 07 Jul 2010 03:52:14 +0000</pubDate>
		<dc:creator>gmateo</dc:creator>
				<category><![CDATA[java]]></category>
		<category><![CDATA[jsr 303 Bean Validation]]></category>
		<category><![CDATA[bean validation]]></category>
		<category><![CDATA[jsr 303]]></category>

		<guid isPermaLink="false">http://www.agile-works.com/blog/?p=398</guid>
		<description><![CDATA[Código Fuente: Ejemplo 3
A continuación vamos a revisar las clases y los métodos que nos permiten obtener información de las distintas validaciones que han sido configuradas en un bean.
Para tener acceso a las clases necesarias necesitamos usar la referencia del objeto Validator. Recordar que una manera simple de obtener esta referencia es hacer lo siguiente:
 [...]]]></description>
			<content:encoded><![CDATA[<p>Código Fuente: <a href="http://code.google.com/p/javaapuntes/source/browse/#svn/trunk/generics/src/com/aw/jsr303/ejemplo003" target="_blank">Ejemplo 3</a></p>
<p>A continuación vamos a revisar las clases y los métodos que nos permiten obtener información de las distintas validaciones que han sido configuradas en un bean.</p>
<p>Para tener acceso a las clases necesarias necesitamos usar la referencia del objeto Validator. Recordar que una manera simple de obtener esta referencia es hacer lo siguiente:</p>
<div>   <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet">ValidatorFactory validatorFactory = Validation.buildDefaultValidatorFactory();<br />Validator validator = validatorFactory.getValidator();<br /></pre>
</div>
<h3>BeanDescriptor</h3>
<p>Esta es la clase principal desde la cual podemos tener acceso a la información referente a las validaciones configuradas de un bean.</p>
<p>Para tener acceso a este objeto necesitamos llamar al método: “getConstraintsForClass” del “validator” enviando como parámetro la clase del bean del que deseamos obtener la información.</p>
<div>
  <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet">BeanDescriptor puertaBeanDescriptor = validator.getConstraintsForClass(Puerta.<span style="color: #0000ff">class</span>);</pre>
</div>
<div>&#160;</div>
<div>Ya teniendo la referencia al “BeanDescriptor” podemos usar su métodos:</div>
<h4>isBeanConstrained()</h4>
<p>Este método nos indica si el bean tiene o no configurado alguna validación. Por ejemplo, teniendo en cuenta la definición de la clase Puerta</p>
<div>
  <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"><span style="color: #0000ff">public</span> <span style="color: #0000ff">class</span> Puerta {<br />}<br /></pre>
</div>
<p>el método va a devolver false.</p>
<div>
  <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet">BeanDescriptor puertaBeanDescriptor = validator.getConstraintsForClass(Puerta.<span style="color: #0000ff">class</span>);<br />System.out.println(<span style="color: #006080">&quot;Puerta tiene algún constraint:&quot;</span> + puertaBeanDescriptor.isBeanConstrained());<br /></pre>
</div>
<h4>hasConstraints()</h4>
<p>Este método nos indica si existen “constraints” a nivel de clase. Por ejemplo asumiendo la siguiente definición de la clase Carro:</p>
<div>
  <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"><span style="color: #0000ff">public</span> <span style="color: #0000ff">class</span> Carro {<br />    <span style="color: #0000ff">private</span> String codigo;<br />    @NotNull(groups=GrupoBasico.<span style="color: #0000ff">class</span>)<br />    <span style="color: #0000ff">private</span> String numeroPlaca;<br />    @NotNull<br />    <span style="color: #0000ff">private</span> String anio;<br />    @Valid<br />    <span style="color: #0000ff">private</span> Motor motor;<br /><br />}<br /></pre>
</div>
<p>el método va a devolver false:</p>
<div id="codeSnippetWrapper">
  <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet">BeanDescriptor carroBeanDescriptor = validator.getConstraintsForClass(Carro.<span style="color: #0000ff">class</span>);<br />System.out.println(<span style="color: #006080">&quot;Carro tiene algún constraint de Clase:&quot;</span> + carroBeanDescriptor.hasConstraints());<br /></pre>
</div>
<h4>getConstraintDescriptors()</h4>
<p>Este método nos devuelve todos los constraints a nivel de clase que existen, para el caso de la clase Carro nos devolverá un Set de tamaño CERO.</p>
<h4>getConstrainedProperties()</h4>
<p>Nos devuelve todos los constraints aplicados a los atributos que existen en un bean. Por ejemplo para la clase Carro el tamaño del siguiente Set será 3.</p>
<div>
  <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet">Set&lt;PropertyDescriptor&gt; constraintProperties = carroBeanDescriptor.getConstrainedProperties();<br />System.out.println(<span style="color: #006080">&quot;Carro tiene constraints a nivel de Atributos Nro:&quot;</span> + constraintProperties.size());<br /></pre>
</div>
<h4>getConstraintsForProperty(String property)</h4>
<p>Nos devuelve un PropertyDescriptor el cual es un objeto que puede tener uno o más ConstraintDescriptors. Por ejemplo para la clase Carro tendríamos lo siguiente:</p>
<p>Para el atributo “codigo”, este método devolverá null, ya que este atributo no tiene ninguna anotación de validación.</p>
<div>
  <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet">PropertyDescriptor codigoPropertyDescriptor = carroBeanDescriptor.getConstraintsForProperty(<span style="color: #006080">&quot;codigo&quot;</span>);<br />System.out.println(<span style="color: #006080">&quot;Código property descriptor:&quot;</span> + codigoPropertyDescriptor);<br /></pre>
</div>
<p>Pero para el atributo &quot;numeroPlaca&quot; si devolverá un objeto con toda la información de validación de ese atributo.</p>
<div>
  <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet">PropertyDescriptor nroPlacaPropertyDescriptor = carroBeanDescriptor.getConstraintsForProperty(<span style="color: #006080">&quot;numeroPlaca&quot;</span>);<br />System.out.println(<span style="color: #006080">&quot;Número de Placa property descriptor:&quot;</span> + nroPlacaPropertyDescriptor);<br /></pre>
</div>
<h3>PropertyDescriptor</h3>
<p>Contiene toda la información de validación de un atributo de un bean. Comparte varios métodos con el “BeanDescriptor”, ya que ambos implementan la interface:”ElementDescriptor”. </p>
<h4>getConstraintDescriptors()</h4>
<p>Devuelve todos los ContraintDescriptors asociados a un atributo del bean. Por ejemplo, en el siguiente caso devuelve un Set con un ConstraintDescritpor.</p>
<div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper">
  <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet">PropertyDescriptor nroPlacaPropertyDescriptor = carroBeanDescriptor.getConstraintsForProperty(<span style="color: #006080">&quot;numeroPlaca&quot;</span>);<br />System.out.println(<span style="color: #006080">&quot;Número de Placa property descriptor:&quot;</span> + nroPlacaPropertyDescriptor);<br />System.out.println(<span style="color: #006080">&quot;Número de Placa property constraint descriptors:&quot;</span> + nroPlacaPropertyDescriptor.getConstraintDescriptors());<br /></pre></p>
<p></div>
<h3>ConstraintDescriptor</h3>
<p>Es la clase que tiene toda la información del constraint. </p>
<p>Por ejemplo para el atributo “numeroPlaca” podemos obtener este objeto de la siguiente manera:</p>
<div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper">
  <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet">PropertyDescriptor nroPlacaPropertyDescriptor = carroBeanDescriptor.getConstraintsForProperty(<span style="color: #006080">&quot;numeroPlaca&quot;</span>);<br />System.out.println(<span style="color: #006080">&quot;Número de Placa property descriptor:&quot;</span> + nroPlacaPropertyDescriptor);<br />ConstraintDescriptor nroPlacaConstraintDescriptor = nroPlacaPropertyDescriptor.getConstraintDescriptors().iterator().next();</pre></p>
<p></div>
<p>Entre sus principales métodos tenemos:</p>
<h4>getAnnotation()</h4>
<p>Nos devuelve la anotación que usa este constraint.</p>
<h4>getAttributes()</h4>
<p>Devuelve un Map con todos los atributos seteados en la anotación del constraint.</p>
<h4>getGroups()</h4>
<p>Devuelve los grupos a los que pertenece el constraint.</p>
<h4>getPayload()</h4>
<p>Devuelve el payload asociado al constraint.</p>
<h3>A tener en Cuenta</h3>
<p>Para poder encontrar un constraint teniendo en cuenta algunos filtros podemos usar el método “findConstraints()”, tanto en el “BeanDescriptor” como en el “PropertyDescriptor”</p>
<p>Por ejemplo en el siguiente código estamos buscando todos los constraints que estén configurados en el atributo “numeroPlaca”</p>
<div id="codeSnippetWrapper">
  <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet">Set&lt;ConstraintDescriptor&lt;?&gt;&gt; nroPlacaConstraintDescriptors = <br />                nroPlacaPropertyDescriptor.findConstraints().<br />                declaredOn(ElementType.FIELD).<br />                getConstraintDescriptors();<br />System.out.println(<span style="color: #006080">&quot;Número de Placa Constraint Descriptors:&quot;</span>+nroPlacaConstraintDescriptors);<br /></pre>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.agile-works.com/blog/?feed=rss2&amp;p=398</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Creando custom constraints</title>
		<link>http://www.agile-works.com/blog/?p=386</link>
		<comments>http://www.agile-works.com/blog/?p=386#comments</comments>
		<pubDate>Mon, 05 Jul 2010 02:03:35 +0000</pubDate>
		<dc:creator>gmateo</dc:creator>
				<category><![CDATA[java]]></category>
		<category><![CDATA[jsr 303 Bean Validation]]></category>
		<category><![CDATA[bean validation]]></category>
		<category><![CDATA[custom constraints]]></category>
		<category><![CDATA[jsr303]]></category>

		<guid isPermaLink="false">http://www.agile-works.com/blog/?p=386</guid>
		<description><![CDATA[






Código Fuente: Ejemplo 1
Hibernate Validator viene con una serie de constraints ya creados, estos incluyen a los constraints que son parte del jsr303. En el siguiente link podemos encontrar una descripción de estos Constraints.
Por otro lado, nosotros también podemos crear nuestros propios constraints, los pasos necesarios para hacer esto, serán descritos a continuación.
Creando constraints simples
Vamos [...]]]></description>
			<content:encoded><![CDATA[<p><!--wp_fromhtmlpreview_devfmt--></p>
<p><!--wp_fromhtmlpreview_devfmt--></p>
<p><!--wp_fromhtmlpreview_devfmt--></p>
<p><!--wp_fromhtmlpreview_devfmt--></p>
<p><!--wp_fromhtmlpreview_devfmt--></p>
<p><!--wp_fromhtmlpreview_devfmt--></p>
<p><!--wp_fromhtmlpreview_devfmt--></p>
<p>Código Fuente: <a href="http://code.google.com/p/javaapuntes/source/browse/#svn/trunk/generics/src/com/aw/jsr303/ejemplo001" target="_blank">Ejemplo 1</a></p>
<p>Hibernate Validator viene con una serie de constraints ya creados, estos incluyen a los constraints que son parte del jsr303. En el siguiente link podemos encontrar una descripción de estos <a href="http://docs.jboss.org/hibernate/stable/validator/reference/en-US/html/validator-usingvalidator.html#validator-defineconstraints-builtin" target="_blank">Constraints</a>.</p>
<p>Por otro lado, nosotros también podemos crear nuestros propios constraints, los pasos necesarios para hacer esto, serán descritos a continuación.</p>
<h3>Creando constraints simples</h3>
<p>Vamos a crear dos constraints, uno a nivel de atributo y otro a nivel de clase.</p>
<h4>Constraint a nivel de atributo</h4>
<p>Vamos a crear un constraint que valide que un atributo de tipo String sólo tenga letras. Este constraint también debería poderse colocar al “getter” del atributo.</p>
<p>Necesitamos hacer lo siguiente:</p>
<h5>- Crear la anotación que será usada para las validaciones.</h5>
<div id="codeSnippetWrapper">
<div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet">     <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum1">   1:</span> @Target({METHOD, FIELD, ANNOTATION_TYPE})</pre><br />
<!--CRLF--></p>
<p>    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum2">   2:</span> @Retention(RUNTIME)</pre><br />
<!--CRLF--></p>
<p>    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum3">   3:</span> @Constraint(validatedBy = OnlyLettersValidator.<span style="color: #0000ff">class</span>)</pre><br />
<!--CRLF--></p>
<p>    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum4">   4:</span> @Documented</pre><br />
<!--CRLF--></p>
<p>    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum5">   5:</span> <span style="color: #0000ff">public</span> @<span style="color: #0000ff">interface</span> OnlyLetters {</pre><br />
<!--CRLF--></p>
<p>    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum6">   6:</span>     String message() <span style="color: #0000ff">default</span> <span style="color: #006080">&quot;com.aw.jsr303.ejemplo001.constraints.onlyletters&quot;</span>;</pre><br />
<!--CRLF--></p>
<p>    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum7">   7:</span>     Class&lt;?&gt;[] groups() <span style="color: #0000ff">default</span> {};</pre><br />
<!--CRLF--></p>
<p>    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum8">   8:</span>     Class&lt;? <span style="color: #0000ff">extends</span> Payload&gt;[] payload() <span style="color: #0000ff">default</span> {};</pre><br />
<!--CRLF--></p>
<p>    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum9">   9:</span> }</pre><br />
<!--CRLF--></div>
</div>
<p><strong>Línea 1: </strong>Se indica que la anotación puede usarse tanto en atributos, métodos y anotaciones (esto es necesario para crear constraint compuestos).</p>
<p><strong>Línea 3:&#160; </strong>Se define que la anotación será un constraint y que la clase que se encargará de realizar la validación será: “OnlyLettersValidator”</p>
<p><strong>Línea 6: </strong>Se define el mensaje por default que se usará cuando falle esta validación.</p>
<p><strong>Línea 7: </strong>Se define los grupos a los cuales puede pertenecer este constraint.</p>
<p><strong>Línea 8:&#160; </strong>Se define los “payload” que es una manera de agregar mayor información al Constraint, por ejemplo podríamos definir algunas interfaces que indiquen el nivel de severidad del constraint y enviar esta información como payload.</p>
<h5>- Crear la clase que se encargue de ejecutar la validación.</h5>
<div id="codeSnippetWrapper">
<div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet">
    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum1">   1:</span> <span style="color: #0000ff">public</span> <span style="color: #0000ff">class</span> OnlyLettersValidator <span style="color: #0000ff">implements</span> ConstraintValidator&lt;OnlyLetters, String&gt; {</pre><br />
<!--CRLF--></p>
<p>    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum2">   2:</span>     <span style="color: #0000ff">public</span> <span style="color: #0000ff">void</span> initialize(OnlyLetters annotation) {</pre><br />
<!--CRLF--></p>
<p>    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum3">   3:</span>     }</pre><br />
<!--CRLF--></p>
<p>    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum4">   4:</span>     <span style="color: #0000ff">public</span> <span style="color: #0000ff">boolean</span> isValid(String value, ConstraintValidatorContext constraintValidatorContext) {</pre><br />
<!--CRLF--></p>
<p>    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum5">   5:</span>         <span style="color: #0000ff">return</span> allAreLetters(value);</pre><br />
<!--CRLF--></p>
<p>    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum6">   6:</span>     }</pre><br />
<!--CRLF--></p>
<p>    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum7">   7:</span>     <span style="color: #0000ff">private</span> <span style="color: #0000ff">boolean</span> allAreLetters(String str) {</pre><br />
<!--CRLF--></p>
<p>    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum8">   8:</span>         <span style="color: #0000ff">if</span> (str == null) {</pre><br />
<!--CRLF--></p>
<p>    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum9">   9:</span>             <span style="color: #0000ff">return</span> false;</pre><br />
<!--CRLF--></p>
<p>    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum10">  10:</span>         }</pre><br />
<!--CRLF--></p>
<p>    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum11">  11:</span>         <span style="color: #0000ff">int</span> stringSize = str.length();</pre><br />
<!--CRLF--></p>
<p>    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum12">  12:</span>         <span style="color: #0000ff">for</span> (<span style="color: #0000ff">int</span> i = 0; i &lt; stringSize; i++) {</pre><br />
<!--CRLF--></p>
<p>    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum13">  13:</span>             <span style="color: #0000ff">if</span> (Character.isLetter(str.charAt(i)) == false) {</pre><br />
<!--CRLF--></p>
<p>    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum14">  14:</span>                 <span style="color: #0000ff">return</span> false;</pre><br />
<!--CRLF--></p>
<p>    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum15">  15:</span>             }</pre><br />
<!--CRLF--></p>
<p>    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum16">  16:</span>         }</pre><br />
<!--CRLF--></p>
<p>    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum17">  17:</span>         <span style="color: #0000ff">return</span> true;</pre><br />
<!--CRLF--></p>
<p>    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum18">  18:</span>     }</pre><br />
<!--CRLF--></p>
<p>    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum19">  19:</span> }</pre><br />
<!--CRLF--></div>
</div>
<p><strong>Línea 1:</strong> La clase que finalmente realizará la validación debe implementar la interface “ConstraintValidator” y debe poner como tipos, la anotación que usará para el constraint “OnlyLetters” y el tipo de dato que será validado “String” (ConstraintValidator<onlyletters , String>)</p>
<p><strong>Línea 2:</strong> Este método será llamado al inicio para obtener la información que se necesite de la anotación.</p>
<p><strong>Línea 4:</strong> Este método es el que realiza la validación, en este caso va a recibir como parámetro el valor del atributo a ser validado.</p>
<h5>Modo de uso del constraint</h5>
<div id="codeSnippetWrapper">
  <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"><span style="color: #0000ff">public</span> <span style="color: #0000ff">class</span> ComprobanteDePago {<br />    @OnlyLetters<br />    <span style="color: #0000ff">private</span> String codigoInterno;<br /></pre></p>
<p></div>
<h4>Constraint a nivel de clase</h4>
<p>Vamos a crear un constraint a nivel de clase. Se validará que la clase ComprobanteDePago tenga obligatoriamente seteado el RUC siempre y cuando el tipo de documento sea FACTURA.</p>
<p>Necesitamos hacer lo siguiente:</p>
<h5>- Crear la anotación que será usada para las validaciones.</h5>
<div id="codeSnippetWrapper">
<div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet">
    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum1">   1:</span> @Target({TYPE})</pre><br />
<!--CRLF--></p>
<p>    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum2">   2:</span> @Retention(RUNTIME)</pre><br />
<!--CRLF--></p>
<p>    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum3">   3:</span> @Constraint(validatedBy = RucInfoValidator.<span style="color: #0000ff">class</span>)</pre><br />
<!--CRLF--></p>
<p>    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum4">   4:</span> @Documented</pre><br />
<!--CRLF--></p>
<p>    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum5">   5:</span> <span style="color: #0000ff">public</span> @<span style="color: #0000ff">interface</span> RucInfoChecker {</pre><br />
<!--CRLF--></p>
<p>    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum6">   6:</span>     String message() <span style="color: #0000ff">default</span> <span style="color: #006080">&quot;com.aw.jsr303.ejemplo001.constraint.rucinfochecker&quot;</span>;</pre><br />
<!--CRLF--></p>
<p>    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum7">   7:</span>     Class&lt;?&gt;[] groups() <span style="color: #0000ff">default</span> {};</pre><br />
<!--CRLF--></p>
<p>    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum8">   8:</span>     Class&lt;? <span style="color: #0000ff">extends</span> Payload&gt;[] payload() <span style="color: #0000ff">default</span> {};</pre><br />
<!--CRLF--></p>
<p>    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum9">   9:</span> }</pre><br />
<!--CRLF--></div>
</div>
<p><strong>Línea 1: </strong>Se indica que la anotación sólo se puede usar a nivel de clase.</p>
<p><strong>Línea 3:&#160; </strong>Se define que la anotación será un constraint y que la clase que se encargará de realizar la validación será: “RucInfoValidator”</p>
<h5>- Crear la clase que se encargue de ejecutar la validación.</h5>
<div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper">
<div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet">
    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum1">   1:</span> <span style="color: #0000ff">public</span> <span style="color: #0000ff">class</span> RucInfoValidator <span style="color: #0000ff">implements</span> ConstraintValidator&lt;RucInfoChecker, ComprobanteDePago&gt; {</pre><br />
<!--CRLF--></p>
<p>    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum2">   2:</span>     <span style="color: #0000ff">public</span> <span style="color: #0000ff">void</span> initialize(RucInfoChecker annotation) {</pre><br />
<!--CRLF--></p>
<p>    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum3">   3:</span>     }</pre><br />
<!--CRLF--></p>
<p>    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum4">   4:</span>     <span style="color: #0000ff">public</span> <span style="color: #0000ff">boolean</span> isValid(ComprobanteDePago comprobanteDePago, ConstraintValidatorContext constraintValidatorContext) {</pre><br />
<!--CRLF--></p>
<p>    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum5">   5:</span>         <span style="color: #0000ff">if</span> (comprobanteDePago.getTipo() == ComprobanteTipo.FACTURA){</pre><br />
<!--CRLF--></p>
<p>    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum6">   6:</span>             String ruc =comprobanteDePago.getRuc();</pre><br />
<!--CRLF--></p>
<p>    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum7">   7:</span>             <span style="color: #0000ff">return</span> ruc != null &amp;&amp; !<span style="color: #006080">&quot;&quot;</span>.equals(ruc);</pre><br />
<!--CRLF--></p>
<p>    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum8">   8:</span>         }</pre><br />
<!--CRLF--></p>
<p>    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum9">   9:</span>         <span style="color: #0000ff">return</span> true;</pre><br />
<!--CRLF--></p>
<p>    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum10">  10:</span>     }</pre><br />
<!--CRLF--></p>
<p>    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum11">  11:</span> }</pre><br />
<!--CRLF--></div>
</div>
<p><strong>Línea 1:</strong> La clase que finalmente realizará la validación debe implementar la interface “ConstraintValidator” y debe poner como tipos, la anotación que usará para el constraint “RucInfoChecker” y el tipo de dato que será validado “ComprobanteDePago” (ConstraintValidator<rucinfochecker , ComprobanteDePago>)</p>
<p><strong>Línea 2:</strong> Este método será llamado al inicio para obtener la información que se necesite de la anotación.</p>
<p><strong>Línea 4:</strong> Este método es el que realiza la validación, en este caso va a recibir como parámetro la instancia de la clase DocumentoDePago.</p>
<h5>Modo de uso del constraint</h5>
<div id="codeSnippetWrapper">
  <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet">@RucInfoChecker<br /><span style="color: #0000ff">public</span> <span style="color: #0000ff">class</span> ComprobanteDePago {<br /></pre>
</div>
<h3>Creando constraints compuestos</h3>
<p>Los constraints compuestos son aquellos que agrupan más de un constraint. A continuación vamos a crear un constraint que agrupe @NotNull y @OnlyLetters. En estos casos sólo es necesario crear la anotación para el nuevo constraint.</p>
<div id="codeSnippetWrapper">
<div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet">
    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum1">   1:</span> @NotNull</pre><br />
<!--CRLF--></p>
<p>    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum2">   2:</span> @OnlyLetters</pre><br />
<!--CRLF--></p>
<p>    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum3">   3:</span> @Target({METHOD, FIELD})</pre><br />
<!--CRLF--></p>
<p>    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum4">   4:</span> @Retention(RUNTIME)</pre><br />
<!--CRLF--></p>
<p>    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum5">   5:</span> @Constraint(validatedBy = {})</pre><br />
<!--CRLF--></p>
<p>    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum6">   6:</span> @Documented</pre><br />
<!--CRLF--></p>
<p>    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum7">   7:</span> @ReportAsSingleViolation</pre><br />
<!--CRLF--></p>
<p>    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum8">   8:</span> <span style="color: #0000ff">public</span> @<span style="color: #0000ff">interface</span> OnlyLettersNotNull {</pre><br />
<!--CRLF--></p>
<p>    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum9">   9:</span>     String message() <span style="color: #0000ff">default</span> <span style="color: #006080">&quot;com.aw.jsr303.ejemplo001.constraints.onlylettersnotnull&quot;</span>;</pre><br />
<!--CRLF--></p>
<p>    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum10">  10:</span>     Class&lt;?&gt;[] groups() <span style="color: #0000ff">default</span> {};</pre><br />
<!--CRLF--></p>
<p>    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum11">  11:</span>     Class&lt;? <span style="color: #0000ff">extends</span> Payload&gt;[] payload() <span style="color: #0000ff">default</span> {};</pre><br />
<!--CRLF--></p>
<p>    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum12">  12:</span> }</pre><br />
<!--CRLF--></div>
</div>
<p><strong>Línea 1: </strong>Se indica que se incluirá el constraint @NotNull</p>
<p><strong>Línea 2: </strong>Se indica que se incluirá el constraint @OnlyLetters</p>
<p><strong>Línea 5:&#160; </strong>Se define que la anotación será un constraint, no se indica la clase que será encargada de la validación, ya que es un constraint compuesto que en esencia sólo agrupa otros constraints.</p>
<p><strong>Línea 7: </strong>Usando la anotación <a href="mailto:&ldquo;@ReportAsSingleViolation">“@ReportAsSingleViolation</a>” podemos indicar que por más que muchos constraints &#8211; que forman parte de este constraint compuesto – fallen, un sólo error debe ser reportado, sin esta anotación se reportarán todos los errores individuales que se encuentren.</p>
<h4>Modo de uso del constraint</h4>
<div id="codeSnippetWrapper">
  <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"><span style="color: #0000ff">public</span> <span style="color: #0000ff">class</span> Item {<br />    @OnlyLettersNotNull<br />    <span style="color: #0000ff">private</span> String coProducto;<br /></pre>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.agile-works.com/blog/?feed=rss2&amp;p=386</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Validar Beans &#8211; Agrupaci&#243;n de Validaciones</title>
		<link>http://www.agile-works.com/blog/?p=382</link>
		<comments>http://www.agile-works.com/blog/?p=382#comments</comments>
		<pubDate>Sun, 04 Jul 2010 02:31:48 +0000</pubDate>
		<dc:creator>gmateo</dc:creator>
				<category><![CDATA[java]]></category>
		<category><![CDATA[jsr 303 Bean Validation]]></category>
		<category><![CDATA[bean validation]]></category>
		<category><![CDATA[groupsequence]]></category>
		<category><![CDATA[jsr303]]></category>

		<guid isPermaLink="false">http://www.agile-works.com/blog/?p=382</guid>
		<description><![CDATA[Código Fuente: Ejemplo 2
Para poder separar las validaciones de acuerdo a algún criterio debemos usar los grupos (“groups”)
Declaración de Grupos de validación
Normalmente para definir un grupo se usa una interface sin métodos, pero también se pueden usar clases. A continuación declararemos tres grupos de validación.
   public interface TodasLasValidaciones {}public interface ValidacionesPrimerNivel {}public interface [...]]]></description>
			<content:encoded><![CDATA[<p>Código Fuente: <a href="http://code.google.com/p/javaapuntes/source/browse/#svn/trunk/generics/src/com/aw/jsr303/ejemplo002" target="_blank">Ejemplo 2</a></p>
<p>Para poder separar las validaciones de acuerdo a algún criterio debemos usar los grupos (“groups”)</p>
<h3>Declaración de Grupos de validación</h3>
<p>Normalmente para definir un grupo se usa una interface sin métodos, pero también se pueden usar clases. A continuación declararemos tres grupos de validación.</p>
<div id="codeSnippetWrapper">   <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"><span style="color: #0000ff">public</span> <span style="color: #0000ff">interface</span> TodasLasValidaciones {<br />}<br /><span style="color: #0000ff">public</span> <span style="color: #0000ff">interface</span> ValidacionesPrimerNivel {<br />}<br /><span style="color: #0000ff">public</span> <span style="color: #0000ff">interface</span> ValidacionesSegundoNivel {<br />}</pre></p>
<p></div>
<h3>Uso de los grupos de validación</h3>
<p>Una vez definidos los grupos de validación los podemos usar en cualquier anotación. Por ejemplo:</p>
<div id="codeSnippetWrapper">
<div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet">
    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum1">   1:</span> <span style="color: #0000ff">public</span> <span style="color: #0000ff">class</span> Ciudadano {</pre><br />
<!--CRLF--></p>
<p>    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum2">   2:</span>     @NotNull(message = <span style="color: #006080">&quot;Se debe setear el estado civil&quot;</span>, groups = ValidacionesPrimerNivel.<span style="color: #0000ff">class</span>)</pre><br />
<!--CRLF--></p>
<p>    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum3">   3:</span>     <span style="color: #0000ff">private</span> EstadoCivil estadoCivil;</pre><br />
<!--CRLF--></p>
<p>    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum4">   4:</span>     @Min(value = 18, groups = ValidacionesSegundoNivel.<span style="color: #0000ff">class</span>)</pre><br />
<!--CRLF--></p>
<p>    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum5">   5:</span>     <span style="color: #0000ff">private</span> <span style="color: #0000ff">int</span> edad;</pre><br />
<!--CRLF--></p>
<p>    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum6">   6:</span>     @NotNull</pre><br />
<!--CRLF--></p>
<p>    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum7">   7:</span>     <span style="color: #0000ff">private</span> String documentoDeIdentidad;</pre><br />
<!--CRLF--></p>
<p>    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum8">   8:</span> }</pre><br />
<!--CRLF--></div>
</div>
<p><strong>Línea 2-3 :</strong> Acá estamos indicando que la validación de @NotNull pertenece al grupo “ValidacionesPrimerNivel”.</p>
<p><strong>Línea 4-5 :</strong> Acá estamos indicando que la validación de @Min pertenece al grupo “ValidacionesSegundoNivel”.</p>
<p><strong>Línea 6-7 :</strong> Acá estamos indicando que la validación de @NotNull pertenece al grupo “Default”, que es un grupo especial al cual pertenecen todas las validaciones cuyo grupo no ha sido seteado.</p>
<p>También se debe tener en cuenta que el valor de “groups” puede ser un arreglo con varios grupos.</p>
<h3>Validar usando grupos</h3>
<p>Los grupos se pueden usar en cualquiera de los métodos:”validate”, “validateProperty” o “validateValue” de la clase Validator.</p>
<h4>Ejecutando las validaciones por defecto</h4>
<div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper">
<div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet">
    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum1">   1:</span> Validator validator = validatorFactory.getValidator();</pre><br />
<!--CRLF--></p>
<p>    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum2">   2:</span> Ciudadano ciudadano = <span style="color: #0000ff">new</span> Ciudadano();</pre><br />
<!--CRLF--></p>
<p>    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum3">   3:</span> Set&lt;ConstraintViolation&lt;Ciudadano&gt;&gt; errors = validator.validate(ciudadano);</pre><br />
<!--CRLF--></p>
<p>    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum4">   4:</span> System.out.println(<span style="color: #006080">&quot;Errores: Nro:&lt;&quot;</span> + errors.size()+<span style="color: #006080">&quot;&gt;&quot;</span> + errors);</pre><br />
<!--CRLF--></p>
<p>    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum5">   5:</span> Set&lt;ConstraintViolation&lt;Ciudadano&gt;&gt; errorsDefault = validator.validate(ciudadano, Default.<span style="color: #0000ff">class</span>);</pre><br />
<!--CRLF--></p>
<p>    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum6">   6:</span> System.out.println(<span style="color: #006080">&quot;Errores usando Default:Nro:&lt;&quot;</span> +  errorsDefault.size() +<span style="color: #006080">&quot;&gt;&quot;</span> +errorsDefault);</pre><br />
<!--CRLF--></div>
</div>
<p><strong>Línea 3 : </strong>Se llama al método “validate” sin indicar ningún grupo.</p>
<p><strong>Línea 5 : </strong>Se llama al método “validate” enviando como parámetro el grupo “Default”.</p>
<p>Se debe notar que la línea 3 y la línea 5 son equivalente en cuanto realizan la validación de todas las anotaciones que no tienen seteado explícitamente el atributo “groups” </p>
<h4>Ejecutando las validaciones del primer nivel</h4>
<p>Acá se van a ejecutar sólo las validaciones que pertenecen al grupo “ValidacionesPrimerNivel”. </p>
<div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper">
  <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet">Set&lt;ConstraintViolation&lt;Ciudadano&gt;&gt; errorsPrimerNivel = validator.validate(ciudadano,ValidacionesPrimerNivel.<span style="color: #0000ff">class</span>);<br />System.out.println(<span style="color: #006080">&quot;Errores Primer Nivel:Nro:&lt;&quot;</span> + errorsPrimerNivel.size()+<span style="color: #006080">&quot;&gt;&quot;</span>+errorsPrimerNivel);<br /></pre></p>
<p></div>
<p>Podemos ver en el extracto anterior como enviamos el grupo como un parámetro más del método “validate”.</p>
<h4>Ejecutando las validaciones del segundo nivel</h4>
<p>Acá se van a ejecutar sólo las validaciones que pertenecen al grupo “ValidacionesSegundoNivel”. </p>
<div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper">
  <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet">Set&lt;ConstraintViolation&lt;Ciudadano&gt;&gt; errorsSegundoNivel = validator.validate(ciudadano,ValidacionesSegundoNivel.<span style="color: #0000ff">class</span>);<br />System.out.println(<span style="color: #006080">&quot;Errores Segundo Nivel:Nro:&lt;&quot;</span> + errorsSegundoNivel.size()+<span style="color: #006080">&quot;&gt;&quot;</span>+errorsSegundoNivel);<br /></pre></p>
<p></div>
<p>Al igual que en caso anterior tenemos que enviar el grupo como parámetro al método “validate” </p>
<h4>Ejecutar todas las validaciones</h4>
<p>Para ejecutar todas las validaciones necesitamos enviar como parámetros del método “validate” todo los grupos que se han usado, incluyendo el “Default”, como se puede ver en el siguiente extracto:</p>
<div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper">
  <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet">Set&lt;ConstraintViolation&lt;Ciudadano&gt;&gt; errorsTodasLasValidaciones = validator.validate(ciudadano,Default.<span style="color: #0000ff">class</span>,ValidacionesPrimerNivel.<span style="color: #0000ff">class</span>,ValidacionesSegundoNivel.<span style="color: #0000ff">class</span>);<br />System.out.println(<span style="color: #006080">&quot;Todos los Errores:Nro:&lt;&quot;</span> + errorsTodasLasValidaciones.size()+<span style="color: #006080">&quot;&gt;&quot;</span>+errorsTodasLasValidaciones);<br /></pre></p>
<p></div>
<p>Claro que&#160; también podemos crear un grupo que extienda todos los grupos. </p>
<div>
  <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"><span style="color: #0000ff">public</span> <span style="color: #0000ff">interface</span> SuperGrupo <span style="color: #0000ff">extends</span> Default,<br />        ValidacionesPrimerNivel,<br />        ValidacionesSegundoNivel {<br />}<br /></pre>
</div>
<p>y ejecutar la validación usando este nuevo grupo.</p>
<div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper">
  <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet">Set&lt;ConstraintViolation&lt;Ciudadano&gt;&gt; errorsSuperGrupo = validator.validate(ciudadano,SuperGrupo.<span style="color: #0000ff">class</span>);<br />System.out.println(<span style="color: #006080">&quot;Todas las Validaciones :Nro:&lt;&quot;</span> + errorsSuperGrupo.size()+<span style="color: #006080">&quot;&gt;&quot;</span>+errorsSuperGrupo);<br /></pre></p>
<p></div>
<h4>Ejecutar los grupos de validaciones en secuencia</h4>
<p>Acá lo que se desea hacer, es poder ejecutar las validaciones teniendo en cuenta un orden entre los grupos que se desean validar, además de eso se necesita que si un grupo genera errores de validación ya no se ejecute el siguiente grupo de validaciones.</p>
<p>Para poder hacer lo anterior usaremos la anotación: <a href="mailto:&ldquo;@GroupSequence">“@GroupSequence</a>”. Veamos el siguiente ejemplo:</p>
<div>
  <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet">@GroupSequence({Default.<span style="color: #0000ff">class</span>,ValidacionesPrimerNivel.<span style="color: #0000ff">class</span>,ValidacionesSegundoNivel.<span style="color: #0000ff">class</span>})<br /><span style="color: #0000ff">public</span> <span style="color: #0000ff">interface</span> TodasLasValidaciones {<br />}</pre>
</div>
<p>Acá estamos definiendo el grupo: “TodasLasValidaciones” y como estamos usando la anotación <a href="mailto:&ldquo;@GroupSequence">“@GroupSequence</a>” podemos decir que:</p>
<p>-&#160; Este grupo incluye a los grupos: Default, ValidacionesPrimerNivel, ValidacionesSegundoNivel.</p>
<p>- Si fallan las validaciones de uno de los grupos, las validaciones de los siguientes grupos no serán ejecutadas. Por ejemplo si las validaciones del grupo Default fallan, las validaciones de los otros 2 grupos no serán ejecutadas.</p>
<p>Para ejecutar las validaciones de este grupo “TodasLasValidaciones” llamamos al método “validate” enviando como parámetro el grupo.</p>
<div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper">
  <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet">Set&lt;ConstraintViolation&lt;Ciudadano&gt;&gt; errorsTodasLasValidacionesEnSecuencia = validator.validate(ciudadano,TodasLasValidaciones.<span style="color: #0000ff">class</span>);<br />System.out.println(<span style="color: #006080">&quot;Validación en secuencia:Nro:&lt;&quot;</span> + errorsTodasLasValidacionesEnSecuencia.size()+<span style="color: #006080">&quot;&gt;&quot;</span>+errorsTodasLasValidacionesEnSecuencia);<br /></pre></p>
<p></div>
<h4>Modificando la secuencia de grupos de validación por defecto de una clase.</h4>
<p>Para entender esto veamos el siguiente ejemplo:</p>
<p>Teniendo en cuenta la siguiente definición:</p>
<div>
  <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"><span style="color: #0000ff">public</span> <span style="color: #0000ff">class</span> Carro {<br />    @NotNull<br />    <span style="color: #0000ff">private</span> String numeroPlaca;<br /><br />    @NotNull(groups = ValidacionesPrimerNivel.<span style="color: #0000ff">class</span>)<br />    <span style="color: #0000ff">private</span> Integer numeroAsientos;<br /></pre>
</div>
<p>Si ejecutamos lo siguiente:</p>
<div id="codeSnippetWrapper">
  <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet">Carro carro  = <span style="color: #0000ff">new</span>  Carro();<br />Set&lt;ConstraintViolation&lt;Carro&gt;&gt; erroresEnCarro = validator.validate(carro);<br />System.out.println(<span style="color: #006080">&quot;Carro Errores: Nro:&lt;&quot;</span> + erroresEnCarro.size()+<span style="color: #006080">&quot;&gt;&quot;</span> + erroresEnCarro);<br /></pre>
</div>
<p>Solamente se ejecutará la validación del atributo “numeroPlaca” ya que tiene la anotación @NotNull&#160; sin ningún grupo, por lo cual se asume que pertenece al grupo “Default”. La validación sobre “numeroAsientos” no será ejecutada ya que pertenece al grupo “ValidacionPrimerNivel”.</p>
<p>Ahora lo que deseamos es que al llamar a “validator.validate(carro)” se ejecuten tanto las validaciones del grupo “Default” como las del grupo “ValidacionPrimerNivel”. Para poder hacer esto debemos agregar la anotación <a href="mailto:&ldquo;@GroupSequence">“@GroupSequence</a>” a la clase Carro, la cual quedaría así:</p>
<div>
  <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet">@GroupSequence({Carro.<span style="color: #0000ff">class</span>, ValidacionesPrimerNivel.<span style="color: #0000ff">class</span>})<br /><span style="color: #0000ff">public</span> <span style="color: #0000ff">class</span> Carro {<br /></pre>
</div>
<p>De esta manera al llamar a: “validator.validate(carro)”, primero se ejecutarían las validaciones por defecto, y si no hay errores luego se ejecutarían las validaciones del grupo “ValidacionPrimerNivel”.</p>
<div>Se debe notar que en este caso en la anotación <a href="mailto:&ldquo;@GroupSequence">“@GroupSequence</a>” se está usando “Carro.class” para indicar el grupo “Default”.</div>
]]></content:encoded>
			<wfw:commentRss>http://www.agile-works.com/blog/?feed=rss2&amp;p=382</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Validar Beans</title>
		<link>http://www.agile-works.com/blog/?p=380</link>
		<comments>http://www.agile-works.com/blog/?p=380#comments</comments>
		<pubDate>Sat, 03 Jul 2010 01:33:49 +0000</pubDate>
		<dc:creator>gmateo</dc:creator>
				<category><![CDATA[java]]></category>
		<category><![CDATA[jsr 303 Bean Validation]]></category>
		<category><![CDATA[bean validation]]></category>
		<category><![CDATA[jsr303]]></category>

		<guid isPermaLink="false">http://www.agile-works.com/blog/?p=380</guid>
		<description><![CDATA[Código Fuente: Ejemplo 1
Esta especificación considera una sola clase para realizar todas las validaciones. Esta clase es: “Validator” y la manera más simple de tener una referencia a este objeto es hacer lo siguiente:
   ValidatorFactory validatorFactory = Validation.buildDefaultValidatorFactory();Validator validator = validatorFactory.getValidator();

Ahora bien, teniendo en cuenta la siguiente declaración:

  public class ComprobanteDePago { [...]]]></description>
			<content:encoded><![CDATA[<p>Código Fuente: <a href="http://code.google.com/p/javaapuntes/source/browse/#svn/trunk/generics/src/com/aw/jsr303/ejemplo001" target="_blank">Ejemplo 1</a></p>
<p>Esta especificación considera una sola clase para realizar todas las validaciones. Esta clase es: “Validator” y la manera más simple de tener una referencia a este objeto es hacer lo siguiente:</p>
<div id="codeSnippetWrapper">   <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet">ValidatorFactory validatorFactory = Validation.buildDefaultValidatorFactory();<br />Validator validator = validatorFactory.getValidator();<br /></pre>
</div>
<p>Ahora bien, teniendo en cuenta la siguiente declaración:</p>
<div>
  <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"><span style="color: #0000ff">public</span> <span style="color: #0000ff">class</span> ComprobanteDePago {<br />    <span style="color: #0000ff">private</span> Date fechaDeEntrega;<br />    @Future<br />    <span style="color: #0000ff">public</span> Date getFechaDeEntrega() {<br />        <span style="color: #0000ff">return</span> fechaDeEntrega;<br />    }<br />}<br /></pre>
</div>
<p>y teniendo la referencia al objeto Validator podemos llevar a cabo las siguientes validaciones: </p>
<h3>Validar el valor de un atributo </h3>
<div>
  </div>
<p>Si sólo deseamos ejecutar la validación @Future que está marcando el “getter” del atributo “fechaDeEntrega” tendríamos que hacer lo siguiente:</p>
<div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper">
  <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet">Set&lt;ConstraintViolation&lt;ComprobanteDePago&gt;&gt; errorsProperty =  validator.validateProperty(comprobante,<span style="color: #006080">&quot;fechaDeEntrega&quot;</span>);<br />System.out.println(<span style="color: #006080">&quot;Errores del atributo &lt;fechaDeEntrega&gt;:&quot;</span>+ errorsProperty);<br /></pre></p>
<p></div>
<p>Acá estamos llamando al método “validateProperty” del validator, enviándole como parámetros la instancia del objeto y el nombre del atributo que se desea validar.</p>
<h3>Validar si un valor cumple con las restricciones de un atributo</h3>
<p>Si sólo deseamos validar que cierto valor cumple con las restricciones de un atributo, sin tener que setear el valor a la instancia del objeto debemos hacer lo siguiente:</p>
<div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper">
  <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet">Set&lt;ConstraintViolation&lt;ComprobanteDePago&gt;&gt; errorsPropertyValue =  validator.validateValue(ComprobanteDePago.<span style="color: #0000ff">class</span>,<span style="color: #006080">&quot;fechaDeEntrega&quot;</span>,<span style="color: #0000ff">new</span> Date());<br />System.out.println(<span style="color: #006080">&quot;Errores del valor que se quiere setear al atributo &lt;fechaDeEntrega&gt;:&quot;</span>+ errorsPropertyValue);<br /></pre></p>
<p></div>
<p>Acá estamos llamando al método “validateValue” del validator, enviándole como parámetro la clase, el nombre del atributo y el valor que se desea validar.</p>
<h3>Validar todo el objeto</h3>
<p>Para validar todas las restricciones asociadas a un objeto debemos hacer lo siguiente:</p>
<div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper">
  <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet">ComprobanteDePago comprobante = <span style="color: #0000ff">new</span> ComprobanteDePago();<br />Set&lt;ConstraintViolation&lt;ComprobanteDePago&gt;&gt; errors =  validator.validate(comprobante);<br />System.out.println(<span style="color: #006080">&quot;Errores:&quot;</span>+ errors);</pre></p>
<p></div>
<p>Acá estamos llamando al método “validate” del validator y le estamos enviando la instancia del objeto. De esta manera obtendremos todos los errores luego de que todas las restricciones hayan sido revisadas.</p>
<h3>A tener en cuenta</h3>
<p>La anotación <a href="mailto:&ldquo;@Valid">“@Valid</a>” no es tomada en cuenta cuando se usa cualquiera de los métodos: “validateProperty” o “validateValue”.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.agile-works.com/blog/?feed=rss2&amp;p=380</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JSR 303 – Bean Validation</title>
		<link>http://www.agile-works.com/blog/?p=375</link>
		<comments>http://www.agile-works.com/blog/?p=375#comments</comments>
		<pubDate>Fri, 02 Jul 2010 00:06:11 +0000</pubDate>
		<dc:creator>gmateo</dc:creator>
				<category><![CDATA[java]]></category>
		<category><![CDATA[jsr 303 Bean Validation]]></category>
		<category><![CDATA[bean validation]]></category>
		<category><![CDATA[jsr303]]></category>

		<guid isPermaLink="false">http://www.agile-works.com/blog/?p=375</guid>
		<description><![CDATA[Código Fuente: Ejemplo 1
Esta especificación define el API para poder validar JavaBeans tanto en Java EE como en Java SE.
El objetivo de esta especificación es proveer los mecanismos necesarios para poder declarar y validar Beans, así como también proveer de un repositorio de los constraints y un API para hacer las consultas acerca de los [...]]]></description>
			<content:encoded><![CDATA[<p>Código Fuente: <a href="http://code.google.com/p/javaapuntes/source/browse/#svn/trunk/generics/src/com/aw/jsr303/ejemplo001" target="_blank">Ejemplo 1</a></p>
<p>Esta especificación define el API para poder validar JavaBeans tanto en Java EE como en Java SE.</p>
<p>El objetivo de esta especificación es proveer los mecanismos necesarios para poder declarar y validar Beans, así como también proveer de un repositorio de los constraints y un API para hacer las consultas acerca de los constraints existentes.</p>
<h3>Implementaciones</h3>
<p>Actualmente existe 2 implementaciones:</p>
<p>- <a href="http://www.hibernate.org/subprojects/validator.html" target="_blank">Hibernate Validator</a>, que es la primera implementación y</p>
<p>- <a href="http://incubator.apache.org/bval/cwiki/index.html" target="_blank">Apache Bean Validation</a> tiene soporte para la validación de métodos, lo cual no es parte de la especificación 303 pero es algo que está incluido en los anexos de la misma, lo de malo es que recién esta en su versión: 0.1-incubating.</p>
<p>Para ver los detalles usaremos la implementación: Hibernate Validator.</p>
<h3>Declaración de constraints</h3>
<p>Los constraints se pueden declarar usando xml o anotaciones, nosotros nos limitaremos a mostrar el uso utilizando anotaciones.</p>
<p>Se pueden dar los siguientes casos:</p>
<h4>A nivel de atributo</h4>
<p>Sirve para validar que el valor del atributo cumpla ciertos requisitos. Se debe tener en cuenta que el atributo puede tener cualquier nivel de visibilidad (public, prívate, etc), pero no debe ser estático (static).</p>
<div id="codeSnippetWrapper">
<pre id="codeSnippet" style="border-style: none; text-align: left; padding: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible;"><span style="color: #0000ff">public</span> <span style="color: #0000ff">class</span> ComprobanteDePago {
    @OnlyLetters
    <span style="color: #0000ff">private</span> String codigoInterno;
    @NotNull
    <span style="color: #0000ff">private</span> ComprobanteTipo tipo;
</pre><br />
&nbsp;</div>
<h4>A nivel de getters</h4>
<p>Sirve para validar que la propiedad relacionada al “getter” cumpla ciertos requisitos. Al validar se toma en cuenta el valor que retorna el método “getter”.</p>
<div id="codeSnippetWrapper">
<pre id="codeSnippet" style="border-style: none; text-align: left; padding: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible;">@Future
<span style="color: #0000ff">public</span> Date getFechaDeEntrega() {
    <span style="color: #0000ff">return</span> fechaDeEntrega;
}
</pre><br />
&nbsp;</div>
<h4>A nivel de clase o interface</h4>
<p>Sirve para hacer validaciones que incluyan más de un campo, en este caso se tiene la referencia a todos los datos de la instancia. Y se puede validar todas las posibles combinaciones del estado actual de la instancia.</p>
<div id="codeSnippetWrapper">
<pre id="codeSnippet" style="border-style: none; text-align: left; padding: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible;">@RucInfoChecker
<span style="color: #0000ff">public</span> <span style="color: #0000ff">class</span> ComprobanteDePago {
</pre><br />
&nbsp;</div>
<h4>Validación de “graphs of object”.</h4>
<p>Esto nos permite validar objetos de manera recursiva. Para esto se debe usar la anotación @Valid. Veamos el siguiente ejemplo para clarificar la idea:</p>
<div>
<pre id="codeSnippet" style="border-style: none; text-align: left; padding: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible;"><span style="color: #0000ff">public</span> <span style="color: #0000ff">class</span> Cliente {
    @NotNull
    <span style="color: #0000ff">private</span> String nombre;
}

<span style="color: #0000ff">public</span> <span style="color: #0000ff">class</span> ComprobanteDePago {
    @Valid
    @NotNull
    <span style="color: #0000ff">private</span> Cliente cliente;
}</pre>
</div>
<p>Acá podemos ver que la clase “ComprobanteDePago” tiene como atributo la clase “Cliente”, además podemos ver que este atributo tiene 2 anotaciones @Valid, @NotNull, teniendo en cuenta esta configuración al momento de validar la clase: “ComprobanteDePago” también se ejecutará la validación de la clase “Cliente”, por tanto se verificará que el atributo “nombre” sea distinto de null.</p>
<p>Este comportamiento también funciona cuando usamos colecciones, arreglos y en general cualquier campo que implemente “Iterable”. En estos casos se ejecuta la validación de cada uno de los elementos de las colecciones.</p>
<p>Veamos el siguiente ejemplo:</p>
<div>
<pre id="codeSnippet" style="border-style: none; text-align: left; padding: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible;"><span style="color: #0000ff">public</span> <span style="color: #0000ff">class</span> ComprobanteDePago {
    @Valid
    @Size(min=1, max=20)
    <span style="color: #0000ff">private</span> List<Item> items = <span style="color: #0000ff">new</span> ArrayList();</pre>
</div>
<div>&nbsp;</div>
<div>Acá @Valid está siendo usado con una lista (List), esto nos indica que cuando se valide la clase “ComprobanteDePago” se ejecutará también la validación de todos los objetos “Item” que estén en la lista.&nbsp;&nbsp;</div>
<h3>A tener en cuenta:</h3>
<p>a) Los constraints puedes ser usados tanto en clases como en interfaces.</p>
<p>b) Los constraints se heredan, tanto si se usa extend o implement.</p>
<p>c) En caso de que se sobreescriba un método que ya tenía constraints al final se juntan los constraints del método sobreescrito y el método actual.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.agile-works.com/blog/?feed=rss2&amp;p=375</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Generics &#8211; Algunos Apuntes</title>
		<link>http://www.agile-works.com/blog/?p=305</link>
		<comments>http://www.agile-works.com/blog/?p=305#comments</comments>
		<pubDate>Fri, 18 Jun 2010 04:02:17 +0000</pubDate>
		<dc:creator>gmateo</dc:creator>
				<category><![CDATA[generics]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[apuntes]]></category>

		<guid isPermaLink="false">http://www.agile-works.com/blog/?p=305</guid>
		<description><![CDATA[Código Fuente: Ejemplo 8
a) No se puede usar tipos parámetro, para reemplazar a tipos primitivos.
b) Una clase genérica es compartida por todas sus invocaciones:

Set enteros = new HashSet();














Set doubles = new HashSet();














System.out.println("-->"+(enteros.getClass()==doubles.getClass()));
















En este ejemplo se imprime “true”, ya que todas las instancias de una clase genérica tienen la misma clase en tiempo de ejecución sin [...]]]></description>
			<content:encoded><![CDATA[<p>Código Fuente: <a href="http://code.google.com/p/javaapuntes/source/browse/#svn/trunk/generics/src/com/aw/generic/ejemplo008">Ejemplo 8</a></p>
<p>a) No se puede usar tipos parámetro, para reemplazar a tipos primitivos.</p>
<p>b) Una clase genérica es compartida por todas sus invocaciones:</p>
<div>
<pre id="codeSnippet" style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;">Set<Integer> enteros = <span style="color: #0000ff">new</span> HashSet<Integer>();














Set<Double> doubles = <span style="color: #0000ff">new</span> HashSet<Double>();














System.out.println(<span style="color: #006080">"-->"</span>+(enteros.getClass()==doubles.getClass()));














</pre>
</div>
<p>En este ejemplo se imprime “true”, ya que todas las instancias de una clase genérica tienen la misma clase en tiempo de ejecución sin importar el valor del parámetro actual.</p>
<p>c) No se debe usar los tipos de parámetros al hacer “instanceof” ni “cast”.</p>
<div id="codeSnippetWrapper">
<div id="codeSnippet" style="text-align: left; line-height: 12pt; background-color: #f4f4f4; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;">
<pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"><span style="color: #606060" id="lnum1">   1:</span> Set numeros = <span style="color: #0000ff">new</span> HashSet<Integer>();</pre><br />
<!--CRLF--><br />
<pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"><span style="color: #606060" id="lnum2">   2:</span> <span style="color: #008000">//if(numeros instanceof HashSet<Integer>){}</span></pre><br />
<!--CRLF--><br />
<pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"><span style="color: #606060" id="lnum3">   3:</span> Set<Integer> numerosEnteros = (HashSet<Integer>)numeros;</pre><br />
<!--CRLF--></p>
<p><strong>&nbsp;</strong></p>
<p><strong>Línea 2 :</strong> No va a compilar ya que no se puede usar esa expresión con “instanceof”</p>
<p><strong>Línea 3:</strong> Si compila pero es innecesario ya que es equivalente a: “(HashSet) numeros”. Va a generar un “unchecked warning”</p>
<p>d) Desde la versión 5, Class es genérico, por tanto el tipo de “Integer.class” es “Class<integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer><integer></integer>”. De esta manera ahora podemos hacer lo siguiente:</p>
<div id="codeSnippetWrapper">
<div id="codeSnippet" style="text-align: left; line-height: 12pt; background-color: #f4f4f4; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;">
<pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"><span style="color: #606060" id="lnum1">   1:</span> Class<String> stringClass = String.<span style="color: #0000ff">class</span>;</pre><br />
<!--CRLF--><br />
<pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"><span style="color: #606060" id="lnum2">   2:</span> <span style="color: #0000ff">try</span> {</pre><br />
<!--CRLF--><br />
<pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"><span style="color: #606060" id="lnum3">   3:</span>     String nuevoString = stringClass.newInstance();</pre><br />
<!--CRLF--><br />
<pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"><span style="color: #606060" id="lnum4">   4:</span> } <span style="color: #0000ff">catch</span> (Throwable e) {</pre><br />
<!--CRLF--><br />
<pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"><span style="color: #606060" id="lnum5">   5:</span>     e.printStackTrace();</pre><br />
<!--CRLF--><br />
<pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"><span style="color: #606060" id="lnum6">   6:</span> }</pre><br />
<!--CRLF--></div>
<p>Notar que en la línea 3 ya no necesitamos hacer cast.</p></div>
<p>e) Con respecto a la clase Exception tenemos lo siguiete:</p>
<div id="codeSnippetWrapper">
<div id="codeSnippet" style="text-align: left; line-height: 12pt; background-color: #f4f4f4; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;">
<pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"><span style="color: #606060" id="lnum1">   1:</span> <span style="color: #0000ff">public</span> <span style="color: #0000ff">class</span> ExcepcionEspecifica<T <span style="color: #0000ff">extends</span> Throwable> <span style="color: #0000ff">extends</span> Throwable{</pre><br />
<!--CRLF--><br />
<pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"><span style="color: #606060" id="lnum2">   2:</span>     <span style="color: #0000ff">public</span> <span style="color: #0000ff">void</span> prueba() {</pre><br />
<!--CRLF--><br />
<pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"><span style="color: #606060" id="lnum3">   3:</span> <span style="color: #008000">//        try {</span></pre><br />
<!--CRLF--><br />
<pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"><span style="color: #606060" id="lnum4">   4:</span> <span style="color: #008000">//        }catch(T e){</span></pre><br />
<!--CRLF--><br />
<pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"><span style="color: #606060" id="lnum5">   5:</span> <span style="color: #008000">//        }</span></pre><br />
<!--CRLF--><br />
<pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"><span style="color: #606060" id="lnum6">   6:</span>     }</pre><br />
<!--CRLF--><br />
<pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"><span style="color: #606060" id="lnum7">   7:</span>     <span style="color: #0000ff">public</span> <span style="color: #0000ff">void</span> prueba2() <span style="color: #0000ff">throws</span> T{</pre><br />
<!--CRLF--><br />
<pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"><span style="color: #606060" id="lnum8">   8:</span>     }</pre><br />
<!--CRLF--><br />
<pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"><span style="color: #606060" id="lnum9">   9:</span> }</pre><br />
<!--CRLF--></div>
<p><strong>Línea 1 :</strong> Es inválida ya que ninguna clase genérica puede extender de “Throwable”</p>
<p><strong>Línea 4 : </strong>Es inválida ya que no se puede poner un tipo genérico en el catch.</p>
<p><strong>Línea 7:</strong> Si es válido ya que sí se puede colocar un tipo genérico en la zona de “throws”.</p>
<p>f) No se puede crear arrays de tipos genéricos.</p></div>
</div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.agile-works.com/blog/?feed=rss2&amp;p=305</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cómo está implementado el soporte para Generics ?</title>
		<link>http://www.agile-works.com/blog/?p=303</link>
		<comments>http://www.agile-works.com/blog/?p=303#comments</comments>
		<pubDate>Fri, 18 Jun 2010 03:03:01 +0000</pubDate>
		<dc:creator>gmateo</dc:creator>
				<category><![CDATA[generics]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[erasure]]></category>

		<guid isPermaLink="false">http://www.agile-works.com/blog/?p=303</guid>
		<description><![CDATA[Código Fuente: Ejemplo 7
El soporte para generics en Java está implementado como una conversión &#34;front-end&#34; llamada &#34;erasure&#34;. 
De una manera simplista&#160; podemos decir que se realiza una transformación del código fuente que tiene los datos genéricos a una versión sin datos genéricos (en esta versión se incluyen todos las cast que sean necesarios) . Por [...]]]></description>
			<content:encoded><![CDATA[<p>Código Fuente: <a href="http://code.google.com/p/javaapuntes/source/browse/#svn/trunk/generics/src/com/aw/generic/ejemplo007" target="_blank">Ejemplo 7</a></p>
<p>El soporte para generics en Java está implementado como una conversión &quot;front-end&quot; llamada &quot;erasure&quot;. </p>
<p>De una manera simplista&#160; podemos decir que se realiza una transformación del código fuente que tiene los datos genéricos a una versión sin datos genéricos (en esta versión se incluyen todos las cast que sean necesarios) . Por tanto en el virtual machine no hay tipos genéricos, todos los objetos son clases ordinarias.</p>
<p>Por ejemplo:</p>
<div id="codeSnippetWrapper">   <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"><span style="color: #0000ff">public</span> <span style="color: #0000ff">class</span> Contenedor&lt;E&gt; {<br />    <span style="color: #0000ff">public</span> <span style="color: #0000ff">void</span> agregarElementos(E elemento){<br /><br />    }<br />}<br /></pre></p>
<p></div>
<p>Será transformada en:</p>
<div id="codeSnippetWrapper">
  <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"><span style="color: #0000ff">public</span> <span style="color: #0000ff">class</span> Contenedor {<br />    <span style="color: #0000ff">public</span> <span style="color: #0000ff">void</span> agregarElementos(Object elemento){<br /><br />    }<br />}<br /></pre></p>
<p></div>
<p>De esto debemos inferir:</p>
<p>a) Que por más que tengamos: Contenedor&lt;String&gt;, Contenedor&lt;Integer&gt;, etc, al final en el virtual machine sólo tendremos la clase Contenedor.</p>
<p>b) Que es imposible colocar el tipo “E” en atributos o métodos estáticos, ya que el tipo “E” afecta a la instancia y no a la clase en general</p>
<p>Otro ejemplo que podríamos usar sería:</p>
<div>
  <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"><span style="color: #0000ff">public</span> <span style="color: #0000ff">class</span> ManejadorDeCadenas&lt;T <span style="color: #0000ff">extends</span> Appendable &amp; Serializable&gt; {<br />    <span style="color: #0000ff">public</span> <span style="color: #0000ff">void</span> agregar(T subCadena){<br />    }<br />}<br /></pre>
</div>
<p>Que será transformado en:</p>
<div id="codeSnippetWrapper">
  <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"><span style="color: #0000ff">public</span> <span style="color: #0000ff">class</span> ManejadorDeCadenas {<br />    <span style="color: #0000ff">public</span> <span style="color: #0000ff">void</span> agregar(Appendable subCadena){<br />    }<br />}</pre></p>
<p></div>
<div>Acá debemos tener en cuenta que “T” será reemplazado por el tipo que esté más cerca a él en este caso “Appendable”. Obviamente que internamente se generarán todos los cast a “Serializable” que sean necesarios.</div>
]]></content:encoded>
			<wfw:commentRss>http://www.agile-works.com/blog/?feed=rss2&amp;p=303</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ejemplo: Múltiples condiciones que debe cumplir el Tipo</title>
		<link>http://www.agile-works.com/blog/?p=301</link>
		<comments>http://www.agile-works.com/blog/?p=301#comments</comments>
		<pubDate>Fri, 18 Jun 2010 01:23:54 +0000</pubDate>
		<dc:creator>gmateo</dc:creator>
				<category><![CDATA[generics]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[ejemplo]]></category>

		<guid isPermaLink="false">http://www.agile-works.com/blog/?p=301</guid>
		<description><![CDATA[Código Fuente: Ejemplo 6
Se tiene las siguientes interfaces y clases:
   public interface Mamifero {}public interface Cuadrupedo {}public class Mono implements Mamifero{}public class Perro implements Mamifero,Cuadrupedo{}


Se desea crear 2 métodos:
1) Un método que permita contar a todos los mamíferos.
2) Un método que permita contar a todos los que sean mamíferos y a la vez [...]]]></description>
			<content:encoded><![CDATA[<p>Código Fuente: <a href="http://code.google.com/p/javaapuntes/source/browse/#svn/trunk/generics/src/com/aw/generic/ejemplo006" target="_blank">Ejemplo 6</a></p>
<p>Se tiene las siguientes interfaces y clases:</p>
<div>   <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"><span style="color: #0000ff">public</span> <span style="color: #0000ff">interface</span> Mamifero {<br />}<br /><br /><span style="color: #0000ff">public</span> <span style="color: #0000ff">interface</span> Cuadrupedo {<br />}<br /><br /><span style="color: #0000ff">public</span> <span style="color: #0000ff">class</span> Mono <span style="color: #0000ff">implements</span> Mamifero{<br />}<br /><br /><span style="color: #0000ff">public</span> <span style="color: #0000ff">class</span> Perro <span style="color: #0000ff">implements</span> Mamifero,Cuadrupedo{<br />}<br /><br /></pre>
</div>
<div></div>
<p>Se desea crear 2 métodos:</p>
<p>1) Un método que permita contar a todos los mamíferos.</p>
<p>2) Un método que permita contar a todos los que sean mamíferos y a la vez cuadrúpedos. </p>
<div id="codeSnippetWrapper">
<div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet">
    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum1">   1:</span> <span style="color: #0000ff">public</span> <span style="color: #0000ff">class</span> ContadorDeAnimales {</pre><br />
<!--CRLF--></p>
<p>    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum2">   2:</span>     <span style="color: #0000ff">public</span> &lt;T <span style="color: #0000ff">extends</span> Mamifero&gt; <span style="color: #0000ff">int</span> contarMamiferos(List&lt;T&gt; mamiferos){</pre><br />
<!--CRLF--></p>
<p>    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum3">   3:</span>         <span style="color: #0000ff">return</span> mamiferos.size();</pre><br />
<!--CRLF--></p>
<p>    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum4">   4:</span>     }</pre><br />
<!--CRLF--></p>
<p>    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum5">   5:</span>     <span style="color: #0000ff">public</span> &lt;T <span style="color: #0000ff">extends</span> Mamifero &amp; Cuadrupedo&gt; <span style="color: #0000ff">int</span> contarMamiferosYCuadrupedos</pre><br />
<!--CRLF--></p>
<p>    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum6">   6:</span>                                                  (List&lt;T&gt; mamiferosCuadrupedos){</pre><br />
<!--CRLF--></p>
<p>    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum7">   7:</span>         <span style="color: #0000ff">return</span> mamiferosCuadrupedos.size();</pre><br />
<!--CRLF--></p>
<p>    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum8">   8:</span>     }</pre><br />
<!--CRLF--></p>
<p>    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum9">   9:</span> }</pre><br />
<!--CRLF--></div>
</div>
<p>Acá debemos notar el símbolo “&amp;” en la línea 5, esto nos permite señalar más de una condición que debe cumplir el tipo T, en esta línea estamos diciendo que “T” debe ser un subtipo tanto de “Mamifero” como de “Cuadrupedo”.</p>
<div>Y la manera cómo serían invocados sería:</div>
<div>&#160;</div>
<div id="codeSnippetWrapper">
<div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet">
    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum1">   1:</span> List&lt;Perro&gt; perros = <span style="color: #0000ff">new</span> ArrayList();</pre><br />
<!--CRLF--></p>
<p>    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum2">   2:</span> List&lt;Mono&gt; monos = <span style="color: #0000ff">new</span> ArrayList();</pre><br />
<!--CRLF--></p>
<p>    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum3">   3:</span> ContadorDeAnimales contador = <span style="color: #0000ff">new</span> ContadorDeAnimales();</pre><br />
<!--CRLF--></p>
<p>    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum4">   4:</span> contador.contarMamiferos(perros);</pre><br />
<!--CRLF--></p>
<p>    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum5">   5:</span> contador.contarMamiferos(monos);</pre><br />
<!--CRLF--></p>
<p>    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum6">   6:</span> contador.contarMamiferosYCuadrupedos(perros);</pre><br />
<!--CRLF--></p>
<p>    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum7">   7:</span> <span style="color: #008000">//contador.contarMamiferosYCuadrupedos(monos);</span></pre><br />
<!--CRLF--></div>
</div>
<p>La línea 7 no compilará ya que “Mono” no implementa las 2 interfaces necesarias.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.agile-works.com/blog/?feed=rss2&amp;p=301</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
