diff --git a/.travis.yml b/.travis.yml
index a37cbe2..62fa15c 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -8,7 +8,7 @@ php:
   - hhvm-nightly
 
 env:
-  - CUBRID_VERSION=9.3.0/CUBRID-9.3.0.0206 CUBRID_PDO_VERSION=9.2.0.0001
+  - CUBRID_VERSION=9.3.0/CUBRID-9.3.0.0206 CUBRID_PDO_VERSION=9.3.0.0001
 
 # run build against hhvm but allow them to fail
 # http://docs.travis-ci.com/user/build-configuration/#Rows-That-are-Allowed-To-Fail
@@ -38,7 +38,7 @@ addons:
 
 install:
   - composer self-update && composer --version
-  - composer global require "fxp/composer-asset-plugin:1.0.0-beta2"
+  - composer global require "fxp/composer-asset-plugin:1.0.0-beta3"
   - export PATH="$HOME/.composer/vendor/bin:$PATH"
 # core framework:
   - composer install --prefer-dist
diff --git a/README.md b/README.md
index a0f4342..661443a 100644
--- a/README.md
+++ b/README.md
@@ -8,16 +8,6 @@ Yii 2 inherits the main spirit behind Yii for being simple, fast and highly exte
 Yii 2 requires PHP 5.4 and embraces the best practices and protocols found in modern Web application development.
 
 
-**Yii 2 is not ready for production use yet.** We may make significant changes without prior notices.
-We expect to make the first stable release of Yii 2 in the middle of 2014.
-
-If you mainly want to learn Yii with no real project development requirement, we highly recommend
-you start with Yii 2 as it will be our main focus for the next few years.
-
-If you have a real project with tight schedule, you should stick to [Yii 1.1](https://github.com/yiisoft/yii)
-which is the latest stable release of Yii.
-
-
 [![Latest Stable Version](https://poser.pugx.org/yiisoft/yii2/v/stable.png)](https://packagist.org/packages/yiisoft/yii2)
 [![Total Downloads](https://poser.pugx.org/yiisoft/yii2/downloads.png)](https://packagist.org/packages/yiisoft/yii2)
 [![Dependency Status](https://www.versioneye.com/php/yiisoft:yii2/dev-master/badge.png)](https://www.versioneye.com/php/yiisoft:yii2/dev-master)
@@ -55,14 +45,11 @@ The minimum requirement by Yii is that your Web server supports PHP 5.4.
 DOCUMENTATION
 -------------
 
-A draft of the [Definitive Guide](docs/guide/README.md) is available.
-
-API docs and a rendering of the definitive guide are currently
-available under the following urls:
+Yii 2.0 has a [Definitive Guide](http://www.yiiframework.com/doc-2.0/guide-index.html) and 
+a [Class Reference](http://www.yiiframework.com/doc-2.0/index.html) which cover every detail of Yii.
 
-- http://www.yiiframework.com/doc-2.0/ API and Definitive Guide (updated daily)
-- http://stuff.cebe.cc/yii2docs/ API and Definitive Guide (updated every 15 minutes)
-- http://stuff.cebe.cc/yii2-guide.pdf The PDF version of the Guide
+There is also a [PDF version](http://stuff.cebe.cc/yii2-guide.pdf) of the Definitive Guide
+and a [Definitive Guide Mirror](http://stuff.cebe.cc/yii2docs/) which update every 15 minutes.
 
 For 1.1 users, you may refer to [Upgrading from Yii 1.1](docs/guide/intro-upgrade-from-v1.md)
 to have a general idea of what has changed in 2.0.
diff --git a/apps/advanced/README.md b/apps/advanced/README.md
index 44a1584..2c2e80a 100644
--- a/apps/advanced/README.md
+++ b/apps/advanced/README.md
@@ -74,7 +74,7 @@ at [getcomposer.org](http://getcomposer.org/doc/00-intro.md#installation-nix).
 You can then install the application using the following command:
 
 ~~~
-php composer.phar global require "fxp/composer-asset-plugin:1.0.0-beta2"
+php composer.phar global require "fxp/composer-asset-plugin:1.0.0-beta3"
 php composer.phar create-project --prefer-dist --stability=dev yiisoft/yii2-app-advanced advanced
 ~~~
 
diff --git a/apps/basic/README.md b/apps/basic/README.md
index 61cb4a1..36c3ec9 100644
--- a/apps/basic/README.md
+++ b/apps/basic/README.md
@@ -55,7 +55,7 @@ at [getcomposer.org](http://getcomposer.org/doc/00-intro.md#installation-nix).
 You can then install this application template using the following command:
 
 ~~~
-php composer.phar global require "fxp/composer-asset-plugin:1.0.0-beta2"
+php composer.phar global require "fxp/composer-asset-plugin:1.0.0-beta3"
 php composer.phar create-project --prefer-dist --stability=dev yiisoft/yii2-app-basic basic
 ~~~
 
diff --git a/build/controllers/views/translation/report_html.php b/build/controllers/views/translation/report_html.php
index 8a58bfd..c12a4d6 100644
--- a/build/controllers/views/translation/report_html.php
+++ b/build/controllers/views/translation/report_html.php
@@ -1,5 +1,7 @@
 <?php
+
 use yii\helpers\Html;
+
 ?><!doctype html>
 <html>
     <head>
@@ -27,21 +29,21 @@ use yii\helpers\Html;
         </style>
     </head>
     <body>
-        <h1><?php echo Html::encode($title)?></h1>
+        <h1><?= Html::encode($title) ?></h1>
 
         <ul>
-            <li><strong>Source:</strong> <?php echo Html::encode($sourcePath)?></li>
-            <li><strong>Translation:</strong> <?php echo Html::encode($translationPath)?></li>
+            <li><strong>Source:</strong> <?= Html::encode($sourcePath) ?></li>
+            <li><strong>Translation:</strong> <?= Html::encode($translationPath) ?></li>
         </ul>
 
-        <?php foreach($results as $name => $result):?>
-            <h2 class="<?php echo empty($result['errors']) ? 'ok' : 'errors'?>"><?php echo $name?></h2>
-            <?php foreach($result['errors'] as $error):?>
-                <p><?php echo Html::encode($error)?></p>
+        <?php foreach($results as $name => $result): ?>
+            <h2 class="<?= empty($result['errors']) ? 'ok' : 'errors' ?>"><?= $name ?></h2>
+            <?php foreach($result['errors'] as $error): ?>
+                <p><?= Html::encode($error) ?></p>
             <?php endforeach ?>
-            <?php if(!empty($result['diff'])):?>
-                <code class="diff"><pre><?php echo $this->context->highlightDiff($result['diff'])?></pre></code>
-            <?php endif?>
+            <?php if (!empty($result['diff'])): ?>
+                <code class="diff"><pre><?= $this->context->highlightDiff($result['diff']) ?></pre></code>
+            <?php endif ?>
         <?php endforeach ?>
     </body>
 </html>
\ No newline at end of file
diff --git a/composer.json b/composer.json
index c986846..f6fbb8f 100644
--- a/composer.json
+++ b/composer.json
@@ -77,7 +77,7 @@
         "lib-pcre": "*",
         "yiisoft/yii2-composer": "*",
         "ezyang/htmlpurifier": "4.6.*",
-        "cebe/markdown": "0.9.*",
+        "cebe/markdown": "~1.0.0",
         "bower-asset/jquery": "2.1.*@stable | 1.11.*@stable",
         "bower-asset/jquery.inputmask": "3.1.*",
         "bower-asset/punycode": "1.3.*",
diff --git a/docs/documentation_style_guide.md b/docs/documentation_style_guide.md
index 99861f5..1444f98 100644
--- a/docs/documentation_style_guide.md
+++ b/docs/documentation_style_guide.md
@@ -27,6 +27,8 @@ Blocks use the Markdown `> Type: `. There are four block types:
 * `Info`, general information (an aside); not as strong as a "Note"
 * `Tip`, pro tips, extras, can be useful but may not be needed by everyone all the time
 
+The sentence after the colon should begin with a capital letter.
+
 ## References
 
 * Yii 2.0 or Yii 2 (not Yii2 or Yii2.0)
diff --git a/docs/guide-es/README.md b/docs/guide-es/README.md
index 8fe1a9f..816f5b7 100644
--- a/docs/guide-es/README.md
+++ b/docs/guide-es/README.md
@@ -1,7 +1,7 @@
 Guía Definitiva de Yii 2.0
 ==========================
 
-Este tutorial se publica con arreglo a los [Términos de Documentación Yii](http://www.yiiframework.com/doc/terms/).
+Este tutorial se publica bajo los [Términos de Documentación Yii](http://www.yiiframework.com/doc/terms/).
 
 Todos los derechos reservados.
 
@@ -40,7 +40,7 @@ Estructura de una aplicación
 * [Filtros](structure-filters.md)
 * [Widgets](structure-widgets.md)
 * [Módulos](structure-modules.md)
-* **TBD** [Recursos](structure-assets.md)
+* **TBD** [Assets](structure-assets.md)
 * **TBD** [Extensiones](structure-extensions.md)
 
 
@@ -50,9 +50,9 @@ Gestión de las peticiones
 * [Información general](runtime-overview.md)
 * [Bootstrapping](runtime-bootstrapping.md)
 * [Routing](runtime-routing.md)
-* **TBD** [Peticiones](runtime-requests.md)
-* **TBD** [Respuestas](runtime-responses.md)
-* **TBD** [Sesiones y Cookies](runtime-sessions-cookies.md)
+* [Peticiones (Requests)](runtime-requests.md)
+* [Respuestas (Responses)](runtime-responses.md)
+* [Sesiones (Sessions) y Cookies](runtime-sessions-cookies.md)
 * **TBD** [Procesamiento y generación de las URL](runtime-url-handling.md)
 * **TBD** [Gestión de errores](runtime-handling-errors.md)
 * **TBD** [Registro de anotaciones](runtime-logging.md)
diff --git a/docs/guide-es/caching-data.md b/docs/guide-es/caching-data.md
index 27f3275..4dfb90e 100644
--- a/docs/guide-es/caching-data.md
+++ b/docs/guide-es/caching-data.md
@@ -1,22 +1,17 @@
-Almacenamiento de Datos en Caché
+Almacenamiento de Datos en Caché
 ================================
 
-El almacenamiento de datos en caché trata del almacenamiento de alguna variable PHP en caché y recuperarla más tarde del
-mismo. También es la base de algunas de las características avanzadas de almacenamiento en caché, tales como
-[el almacenamiento en caché de consultas a la base de datos](#query-caching) y
-[el almacenamiento en caché de contenido](caching-content.md).
+El almacenamiento de datos en caché trata del almacenamiento de alguna variable PHP en caché y recuperarla más tarde del mismo. También es la base de algunas de las características avanzadas de almacenamiento en caché, tales como [el almacenamiento en caché de consultas a la base de datos](#query-caching) y [el almacenamiento en caché de contenido](caching-content.md).
 
-El siguiente código muestra el típico patrón de uso para el almacenamiento en caché, donde la variable `$cache` se
-refiere al [componente caché](#cache-components):
+El siguiente código muestra el típico patrón de uso para el almacenamiento en caché, donde la variable `$cache` se refiere al [componente caché](#cache-components):
 
 ```php
-// probar de recuerar $data del caché
+// probar de recuperar $data del caché
 $data = $cache->get($key);
 
 if ($data === false) {
 
     // $data no ha sido encontrada en caché, calcularla desde cero
-
     // guardar $data en caché para así recuperarla la próxima vez
     $cache->set($key, $data);
 }
@@ -24,13 +19,12 @@ if ($data === false) {
 // $data está disponible aquí
 ```
 
-
 ## Componentes de Caché <a name="cache-components"></a>
 
 El almacenamiento de datos en caché depende de los llamados *cache components* (componentes de caché) los cuales
 representan diferentes tipos de almacenamiento en caché, como por ejemplo en memoria, en archivos o en base de datos.
 
-Los Componentes de Caché estan normalmente registrados como componentes de la aplicación para que de esta forma puedan
+Los Componentes de Caché están normalmente registrados como componentes de la aplicación para que de esta forma puedan
 ser configurados y accesibles globalmente. El siguiente código muestra cómo configurar el componente de aplicación
 `cache` para usar [memcached](http://memcached.org/) con dos servidores caché:
 
@@ -60,7 +54,6 @@ Debido a que todos los componentes de caché soportan el mismo conjunto de APIs,
 subyacente por otro diferente mediante su reconfiguración en la configuración de la aplicación sin tener que modificar
 el código que utiliza el caché. Por ejemplo, podrías modificar la configuración anterior para usar [[yii\caching\ApcCache|APC cache]]:
 
-
 ```php
 'components' => [
     'cache' => [
@@ -69,71 +62,42 @@ el código que utiliza el caché. Por ejemplo, podrías modificar la configuraci
 ],
 ```
 
-> Nota: Puedes registrar multiples componentes de aplicación de caché. El componente llamado `cache` es usado por defecto
-  por muchas caché-dependiente clases (e.g. [[yii\web\UrlManager]]).
-
+> Nota: Puedes registrar múltiples componentes de aplicación de caché. El componente llamado `cache` es usado por defecto por muchas caché-dependiente clases (e.g. [[yii\web\UrlManager]]).
 
 ### Almacenamientos de Caché Soportados <a name="supported-cache-storage"></a>
 
 Yii proporciona varios componentes de caché que pueden almacenar datos en diferentes medios. A continuación
 se muestra un listado con los componentes de caché disponibles:
 
-* [[yii\caching\ApcCache]]: utiliza la extensión de PHP [APC](http://php.net/manual/en/book.apc.php). Esta opción puede
-  ser considerada como la más rápida de entre todas las disponibles para una aplicación centralizada. (p. ej. un servidor,
-  no dedicado balance de carga, etc).
-* [[yii\caching\DbCache]]: utiliza una tabla de base de datos para almacenar los datos. Por defecto, se creará y usará
-  como base de datos [SQLite3](http://sqlite.org/) en el directorio runtime. Se puede especificar explicitamente que base
-  de datos va a ser utilizada configurando la propiedad `db`.
-* [[yii\caching\DummyCache]]: dummy cache (caché tonta) que no almacena en caché nada. El propósito de este componente
-  es simplificar el código necesario para chequear la disponibilidad de caché. Por ejemplo, durante el desarrollo o
-  si el servidor no tiene soporte de caché actualmente, puede utilizarse este componente de caché. Cuando este disponible
-  un soporte en caché, puede cambiarse el componente correspondiente. En ambos casos, puede utilizarse el mismo código
-  `Yii::$app->cache->get($key)` para recuperar un dato sin la preocupación de que `Yii::$app->cache` pueda ser `null`.
-* [[yii\caching\FileCache]]: utiliza un fichero estándar para almacenar los datos. Esto es adecuado para almacenar
-  grandes bloques de datos (como páginas).
-* [[yii\caching\MemCache]]: utiliza las extensiones de PHP [memcache](http://php.net/manual/en/book.memcache.php)
-  y [memcached](http://php.net/manual/en/book.memcached.php). Esta opción puede ser considerada como la más rápida
-  cuando la caché es manejada en una aplicación distribuida (p. ej. con varios servidores, con balance de carga, etc..)
-* [[yii\redis\Cache]]: implementa un componente de caché basado en [Redis](http://redis.io/) que almacenan pares
-  clave-valor (requiere la versión 2.6.12 de redis).
-* [[yii\caching\WinCache]]: utiliza la extensión de PHP [WinCache](http://iis.net/downloads/microsoft/wincache-extension)
-  ([ver también](http://php.net/manual/en/book.wincache.php)).
+* [[yii\caching\ApcCache]]: utiliza la extensión de PHP [APC](http://php.net/manual/en/book.apc.php). Esta opción puede ser considerada como la más rápida de entre todas las disponibles para una aplicación centralizada. (p. ej. un servidor,no dedicado balance de carga, etc).
+* [[yii\caching\DbCache]]: utiliza una tabla de base de datos para almacenar los datos. Por defecto, se creará y usará como base de datos [SQLite3](http://sqlite.org/) en el directorio runtime. Se puede especificar explícitamente que base de datos va a ser utilizada configurando la propiedad `db`.
+* [[yii\caching\DummyCache]]: dummy cache (caché tonta) que no almacena en caché nada. El propósito de este componente es simplificar el código necesario para chequear la disponibilidad de caché. Por ejemplo, durante el desarrollo o si el servidor no tiene soporte de caché actualmente, puede utilizarse este componente de caché. Cuando este disponible un soporte en caché, puede cambiarse el componente correspondiente. En ambos casos, puede utilizarse el mismo código `Yii::$app->cache->get($key)` para recuperar un dato sin la preocupación de que `Yii::$app->cache` pueda ser `null`.
+* [[yii\caching\FileCache]]: utiliza un fichero estándar para almacenar los datos. Esto es adecuado para almacenar grandes bloques de datos (como páginas).
+* [[yii\caching\MemCache]]: utiliza las extensiones de PHP [memcache](http://php.net/manual/en/book.memcache.php) y [memcached](http://php.net/manual/en/book.memcached.php). Esta opción puede ser considerada como la más rápida cuando la caché es manejada en una aplicación distribuida (p. ej. con varios servidores, con balance de carga, etc..)
+* [[yii\redis\Cache]]: implementa un componente de caché basado en [Redis](http://redis.io/) que almacenan pares clave-valor (requiere la versión 2.6.12 de redis).
+* [[yii\caching\WinCache]]: utiliza la extensión de PHP [WinCache](http://iis.net/downloads/microsoft/wincache-extension) ([ver también](http://php.net/manual/en/book.wincache.php)).
 * [[yii\caching\XCache]]: utiliza la extensión de PHP [XCache](http://xcache.lighttpd.net/).
-* [[yii\caching\ZendDataCache]]: utiliza
-  [Zend Data Cache](http://files.zend.com/help/Zend-Server-6/zend-server.htm#data_cache_component.htm)
-  como el medio fundamental de caché.
+* [[yii\caching\ZendDataCache]]: utiliza [Zend Data Cache](http://files.zend.com/help/Zend-Server-6/zend-server.htm#data_cache_component.htm) como el medio fundamental de caché.
 
-> Nota: Puedes utililizar diferentes tipos de almacenamiento de caché en la misma aplicación. Una estrategia común es la
-  de usar almacenamiento de caché en memoria par almacenar datos que son pequeños pero que son utilizados constantemente
-  (por ejemplo, datos estadísticos), y utilizar el almacenamiento de caché en archivos o en base de datos para guardar
-  datos que son grandes y utilizados con menor frecuencia (por ejemplo, contenido de página).
+> Nota: Puedes utilizar diferentes tipos de almacenamiento de caché en la misma aplicación. Una estrategia común es la de usar almacenamiento de caché en memoria par almacenar datos que son pequeños pero que son utilizados constantemente (por ejemplo, datos estadísticos), y utilizar el almacenamiento de caché en archivos o en base de datos para guardar datos que son grandes y utilizados con menor frecuencia (por ejemplo, contenido de página).
 
 ## API de Caché <a name="cache-apis"></a>
 
-Todos los componentes de almacenamiento de caché provienen de la misma clase "padre" [[yii\caching\Cache]] y por lo tanto
-soportan la siguiente API:
+Todos los componentes de almacenamiento de caché provienen de la misma clase "padre" [[yii\caching\Cache]] y por lo tanto soportan la siguiente API:
 
 * [[yii\caching\Cache::get()|get()]]: recupera un elemento de datos de la memoria caché con una clave especificada.
-  Un valor nulo será devuelto si el elemento de datos no ha sido encontrado en la memoria caché o si ha expirado o ha sido
-  invalidado.
+  Un valor nulo será devuelto si el elemento de datos no ha sido encontrado en la memoria caché o si ha expirado o ha sido invalidado.
 * [[yii\caching\Cache::set()|set()]]: almacena un elemento de datos identificado por una clave en la memoria caché.
-* [[yii\caching\Cache::add()|add()]]: almacena un elemento de datos identificado por una clave en la memoria caché si la
-  clave no se encuentra en la memoria caché.
+* [[yii\caching\Cache::add()|add()]]: almacena un elemento de datos identificado por una clave en la memoria caché si la clave no se encuentra en la memoria caché.
 * [[yii\caching\Cache::mget()|mget()]]: recupera varios elementos de datos de la memoria caché con las claves especificadas.
-* [[yii\caching\Cache::mset()|mset()]]: almacena múltiples elementos de datos en la memoria caché. Cada elemento se
-  identifica por una clave.
-* [[yii\caching\Cache::madd()|madd()]]: stores multiple data items in cache. Each item is identified by a key.
-  If a key already exists in the cache, the data item will be skipped.
-* [[yii\caching\Cache::exists()|exists()]]: devuelve un valor que indica si la clave especificada se encuentra en la
-  memoria caché.
+* [[yii\caching\Cache::mset()|mset()]]: almacena múltiples elementos de datos en la memoria caché. Cada elemento se identifica por una clave.
+* [[yii\caching\Cache::madd()|madd()]]: almacena múltiples elementos de datos en la memoria cache. Cada elemento se identifica don una clave. Si una clave ya existe en la cache, el elemento será omitido.
+* [[yii\caching\Cache::exists()|exists()]]: devuelve un valor que indica si la clave especificada se encuentra en la memoria caché.
 * [[yii\caching\Cache::delete()|delete()]]: elimina un elemento de datos identificado por una clave de la caché.
 * [[yii\caching\Cache::flush()|flush()]]: elimina todos los elementos de datos de la cache.
 
-Algunos sistemas de almacenamiento de caché, como por ejemplo MemCache, APC, pueden recuperar multiples valores
-almacenados en modo de lote (batch), lo que puede reducir considerablemente la sobrecarga que implica la recuperación
-de datos almacenados en el caché. Las API [[yii\caching\Cache::mget()|mget()]] y  [[yii\caching\Cache::madd()|madd()]]
-se proporcionan para utilizar esta característia. En el caso de que el sistema de memoria caché no lo soportara, ésta
-sería simulada.
+Algunos sistemas de almacenamiento de caché, como por ejemplo MemCache, APC, pueden recuperar múltiples valores almacenados en modo de lote (batch), lo que puede reducir considerablemente la sobrecarga que implica la recuperación de datos almacenados en el caché. Las API [[yii\caching\Cache::mget()|mget()]] y  [[yii\caching\Cache::madd()|madd()]]
+se proporcionan para utilizar esta característica. En el caso de que el sistema de memoria caché no lo soportara, ésta sería simulada.
 
 Puesto que [[yii\caching\Cache]] implementa `ArrayAccess`, un componente de caché puede ser usado como una matriz (array).
 El siguiente código muestra unos ejemplos:
@@ -143,19 +107,13 @@ $cache['var1'] = $value1;  // equivalente a: $cache->set('var1', $value1);
 $value2 = $cache['var2'];  // equivalente a: $value2 = $cache->get('var2');
 ```
 
-
 ### Claves de Caché <a name="cache-keys"></a>
 
-Cada elemento de datos almacenado en caché se identifica por una clave. Cuando se almacena un elemento de datos en la
-memoria caché, se debe especificar una clave. Más tarde, cuando se recupera el elemento de datos de la memoria caché,
-se debe proporcionar la tecla correspondiente.
+Cada elemento de datos almacenado en caché se identifica por una clave. Cuando se almacena un elemento de datos en la memoria caché, se debe especificar una clave. Más tarde, cuando se recupera el elemento de datos de la memoria caché, se debe proporcionar la tecla correspondiente.
 
-Puedes utilizar una cadena o un valor arbitrario como una clave de caché. Cuando una clave no es una cadena de texto,
-ésta será automáticamente serializada en una cadena.
+Puedes utilizar una cadena o un valor arbitrario como una clave de caché. Cuando una clave no es una cadena de texto, ésta será automáticamente serializada en una cadena.
 
-Una estrategia común para definir una clave de caché es incluir en ella todos los factores determinantes en términos de
-una matriz. Por ejemplo, [[yii\db\Schema]] utiliza la siguiente clave para almacenar en caché la información del esquema
-de una tabla de base de datos:
+Una estrategia común para definir una clave de caché es incluir en ella todos los factores determinantes en términos de una matriz. Por ejemplo, [[yii\db\Schema]] utiliza la siguiente clave para almacenar en caché la información del esquema de una tabla de base de datos:
 
 ```php
 [
@@ -166,35 +124,24 @@ de una tabla de base de datos:
 ];
 ```
 
-Como puedes ver, la clave incluye toda la información necesaria para especificar de una forma exclusiva una tabla de
-base de datos.
+Como puedes ver, la clave incluye toda la información necesaria para especificar de una forma exclusiva una tabla de base de datos.
 
-Cuando el un mismo almacenamiento en caché es utilizado por diferentes aplicaciones, se debería especificar un prefijo
-único para las claves de de caché por cada una de las aplicaciones para así evitar conflictos. Esto puede hacerse
-mediante la configuración de la propiedad [[yii\caching\Cache::keyPrefix]]. Por ejemplo, en la configuración de la
-aplicación podrías escribir el siguiente código:
+Cuando el un mismo almacenamiento en caché es utilizado por diferentes aplicaciones, se debería especificar un prefijo único para las claves de de caché por cada una de las aplicaciones para así evitar conflictos. Esto puede hacerse mediante la configuración de la propiedad [[yii\caching\Cache::keyPrefix]]. Por ejemplo, en la configuración de la aplicación podrías escribir el siguiente código:
 
 ```php
 'components' => [
     'cache' => [
         'class' => 'yii\caching\ApcCache',
-        'keyPrefix' => 'myapp',       // un prefixo de clave de caché único
+        'keyPrefix' => 'myapp',       // un prefijo de clave de caché único
     ],
 ],
 ```
 
 Para garantizar la interoperabilidad, deberían utilizarse sólo caracteres alfanuméricos.
 
-
 ### Caducidad de Caché <a name="cache-expiration"></a>
 
-Un elemento de datos almacenado en la memoria caché permanecerá en ella para siempre, a menos que sea removida de alguna
-manera debido a alguna directiva de caché (por ejemplo, el espacio de almacenamiento en caché está lleno y los datos
-más antiguos se eliminan). Para cambiar este comportamiento, podrías proporcionar un parámetro de caducidad al llamar
-[[yii\caching\Cache::set()|set()]] para guardar el elemento de datos. El parámetro nos indica por cuántos segundos el
-elemento se mantendrá válido en memoria caché. Cuando llames [[yii\caching\Cache::get()|get()]] para recuperar el
-elemento, si el tiempo de caducidad ha pasado, el método devolverá `false`, indicando que el elemento de datos no ha
-sido encontrado en la memoria caché. Por ejemplo,
+Un elemento de datos almacenado en la memoria caché permanecerá en ella para siempre, a menos que sea removida de alguna manera debido a alguna directiva de caché (por ejemplo, el espacio de almacenamiento en caché está lleno y los datos más antiguos se eliminan). Para cambiar este comportamiento, podrías proporcionar un parámetro de caducidad al llamar [[yii\caching\Cache::set()|set()]] para guardar el elemento de datos. El parámetro nos indica por cuántos segundos el elemento se mantendrá válido en memoria caché. Cuando llames [[yii\caching\Cache::get()|get()]] para recuperar el elemento, si el tiempo de caducidad ha pasado, el método devolverá `false`, indicando que el elemento de datos no ha sido encontrado en la memoria caché. Por ejemplo,
 
 ```php
 // guardar los datos en memoria caché al menos 45 segundos
@@ -208,19 +155,11 @@ if ($data === false) {
 }
 ```
 
+### Dependencias de Caché <a name="cache-dependencies"></a>
 
-### Dependecias de Caché <a name="cache-dependencies"></a>
-
-Además de configurar el tiempo de expiración, los datos almacenados en caché pueden también ser invalidados conforme
-a algunos cambios en las dependencias (cache dependencies). Por ejemplo, [[yii\caching\FileDependency]] representa
-la dependencia del tiempo de modificación del archivo. Cuando esta dependencia cambia, significa que el archivo
-correspondiente ha cambiado. Como resultado, cualquier contenido anticuado que sea encontrado en el caché debería
-ser invalidado y la llamada a [[yii\caching\Cache::get()|get()]] debería devolver `null`.
-
-Una dependencia es representada como una instancia de [[yii\caching\Dependency]] o su clase hija. Cuando llamas
-[[yii\caching\Cache::set()|set()]] para almacenar un elemento de datos en el caché, puedes pasar el objeto de dependencia
-asociado. Por ejemplo,
+Además de configurar el tiempo de expiración, los datos almacenados en caché pueden también ser invalidados conforme a algunos cambios en la caché de dependencias. Por ejemplo, [[yii\caching\FileDependency]] representa la dependencia del tiempo de modificación del archivo. Cuando esta dependencia cambia, significa que el archivo correspondiente ha cambiado. Como resultado, cualquier contenido anticuado que sea encontrado en el caché debería ser invalidado y la llamada a [[yii\caching\Cache::get()|get()]] debería devolver `null`.
 
+Una dependencia es representada como una instancia de [[yii\caching\Dependency]] o su clase hija. Cuando llamas [[yii\caching\Cache::set()|set()]] para almacenar un elemento de datos en el caché, puedes pasar el objeto de dependencia asociado. Por ejemplo,
 
 ```php
 // Crear una dependencia sobre el tiempo de modificación del archivo example.txt.
@@ -232,7 +171,7 @@ $cache->set($key, $data, 30, $dependency);
 
 // El caché chequeará si los datos han expirado.
 // También chequeará si la dependencia ha cambiado.
-// Devolerá false si se encuentran algunas de esas condiciones.
+// Devolverá false si se encuentran algunas de esas condiciones.
 $data = $cache->get($key);
 ```
 
@@ -251,8 +190,7 @@ Aquí abajo se muestra un sumario de las dependencias disponibles:
 Las consultas en caché es una característica especial de caché construido sobre el almacenamiento de caché de datos. Se
 proporciona para almacenar en caché el resultado de consultas a la base de datos.
 
-Las consultas en caché requieren una [[yii\db\Connection|conexión a BD]] y un componente de aplicación
-caché válido. El uso básico de las consultas en memoria caché es el siguiente, asumiendo `db` es una instancia [[yii\db\Connection]]:
+Las consultas en caché requieren una [[yii\db\Connection|conexión a BD]] y un componente de aplicación caché válido. El uso básico de las consultas en memoria caché es el siguiente, asumiendo `db` es una instancia [[yii\db\Connection]]:
 
 ```php
 $duration = 60;     // guardar en caché el resultado de la consulta por 60 segundos.
@@ -266,33 +204,23 @@ $db->endCache();
 ```
 
 Como puedes ver, cualquier consulta SQL entre las llamadas `beginCache()` y `endCache()` serán guardadas en la memoria caché.
-Si el resultado de la misma consulta se encuentra vigente en la memoria caché, la consulta se omitirá y el resultado
-se servirá de la memoria caché en su lugar.
+Si el resultado de la misma consulta se encuentra vigente en la memoria caché, la consulta se omitirá y el resultado se servirá de la memoria caché en su lugar.
 
 El almacenamiento en caché de consultas se puede usar para [DAO](db-dao.md), así como para [ActiveRecord](db-active-record.md).
 
-> Nota: Algunos DBMS (por ejemplo, [MySQL](http://dev.mysql.com/doc/refman/5.1/en/query-cache.html)) también soporta
-  el almacenamiento en caché desde el mismo servidor de la BD. Puedes optar por utilizar cualquiera de los mecanismos
-  de memoria caché. El almacenamiento en caché de consultas previamente descrito tiene la ventaja que de que se puede
-  especificar dependencias de caché de una forma flexible y son potencialmente mucho más eficientes.
+> Nota: Algunos DBMS (por ejemplo, [MySQL](http://dev.mysql.com/doc/refman/5.1/en/query-cache.html)) también soporta el almacenamiento en caché desde el mismo servidor de la BD. Puedes optar por utilizar cualquiera de los mecanismos de memoria caché. El almacenamiento en caché de consultas previamente descrito tiene la ventaja que de que se puede especificar dependencias de caché de una forma flexible y son potencialmente mucho más eficientes.
 
 ### Configuraciones <a name="query-caching-configs"></a>
 
-Las consultas en caché tienen dos opciones configurables a traves de [[yii\db\Connection]]:
+Las consultas en caché tienen dos opciones configurables a través de [[yii\db\Connection]]:
 
-* [[yii\db\Connection::queryCacheDuration|queryCacheDuration]]: esto representa el número de segundos que un resultado
-  de la consulta permanecerá válido en la memoria caché. La duración será sobrescrita si se llama a
-  [[yii\db\Connection::beginCache()]] con un parámetro explícito de duración.
+* [[yii\db\Connection::queryCacheDuration|queryCacheDuration]]: esto representa el número de segundos que un resultado de la consulta permanecerá válido en la memoria caché. La duración será sobrescrita si se llama a [yii\db\Connection::beginCache()]] con un parámetro explícito de duración.
 * [[yii\db\Connection::queryCache|queryCache]]: representa el ID del componente de aplicación de caché.
-  Por defecto es `'cache'`. El almacenamiento en caché de consultas se habilita sólo cuando hay un componente de la
-  aplicación de caché válido.
+  Por defecto es `cache`. El almacenamiento en caché de consultas se habilita sólo cuando hay un componente de la aplicación de caché válido.
 
 ### Limitaciones <a name="query-caching-limitations"></a>
 
 El almacenamiento en caché de consultas no funciona con los resultados de consulta que contienen controladores de recursos.
-Por ejemplo, cuando se utiliza el tipo de columna `BLOB` en algunos DBMS, el resultado de la consulta devolverá un recurso
-para manejar los datos de la columna.
+Por ejemplo, cuando se utiliza el tipo de columna `BLOB` en algunos DBMS, el resultado de la consulta devolverá un recurso para manejar los datos de la columna.
 
-Algunos sistemas de almacenamiento caché tienen limitación de tamaño. Por ejemplo, memcache limita el tamaño máximo
-de cada entrada a 1MB. Por lo tanto, si el tamaño de un resultado de la consulta excede ese límite, el almacenamiento
-en caché fallará.
+Algunos sistemas de almacenamiento caché tienen limitación de tamaño. Por ejemplo, memcache limita el tamaño máximo de cada entrada a 1MB. Por lo tanto, si el tamaño de un resultado de la consulta excede ese límite, el almacenamiento en caché fallará.
diff --git a/docs/guide-es/runtime-requests.md b/docs/guide-es/runtime-requests.md
new file mode 100644
index 0000000..7282287
--- /dev/null
+++ b/docs/guide-es/runtime-requests.md
@@ -0,0 +1,108 @@
+Peticiones
+==========
+Las peticiones(requests) hechas a una aplicación son representadas como objetos [[yii\web\Request]] que proporcionan información como parámetros de la petición, cabeceras HTTP, cookies, etc. Dada una petición, se puede acceder al objeto request correspondiente a través del [componente de aplicación](structure-application-components.md) `request` que, por defecto, es una instancia de [[yii\web\Request]]. En esta sección se describirá como hacer uso de este componente en las aplicaciones.
+
+## Parámetros de Request <a name="request-parameters"></a>
+
+Para obtener los parámetros de la petición, se puede llamar a los métodos [[yii\web\Request::get()|get()]] y [[yii\web\Request::post()|post()]] del componente `request`. Estos devuelven los valores de `$_GET` y `$_POST`, respectivamente. Por ejemplo:
+
+```php
+$request = Yii::$app->request;
+
+$get = $request->get(); 
+// equivalente a: $get = $_GET;
+
+$id = $request->get('id');
+// equivalente a: $id = isset($_GET['id']) ? $_GET['id'] : null;
+
+$id = $request->get('id', 1);
+// equivalente a: $id = isset($_GET['id']) ? $_GET['id'] : 1;
+
+$post = $request->post(); 
+// equivalente a: $post = $_POST;
+
+$name = $request->post('name');
+// equivalente a: $name = isset($_POST['name']) ? $_POST['name'] : null;
+
+$name = $request->post('name', '');
+// equivalente a: $name = isset($_POST['name']) ? $_POST['name'] : '';
+```
+
+>Info: En lugar de acceder directamente a `$_GET` y `$_POST` para obtener los parámetros de la petición, es recomendable que se obtengan mediante el componente `request` como en el ejemplo anterior. Esto facilitará la creación de tests ya que se puede simular una componente de request con datos de peticiones personalizados.
+
+Cuando se implementan [APIs RESTful](rest-quick-start.md), a menudo se necesita obtener parámetros enviados desde el formulario a través de PUT, PATCH u otros [métodos de request](runtime-requests.md#request-methods). Se pueden obtener estos parámetros llamando a los métodos [[yii\web\Request::getBodyParam()]]. Por ejemplo:
+
+```php
+$request = Yii::$app->request;
+
+// devuelve todos los parámetros
+$params = $request->bodyParams;
+
+// devuelve el parámetro "id"
+$param = $request->getBodyParam('id');
+```
+
+>Info: A diferencia de los parámetros `GET`, los parámetros enviados desde el formulario a través de `POST`, `PUT`, `PATCH`, etc. se envían en el cuerpo de la petición. El componente `request` convierte los parámetros cuando se acceda a él a través de los métodos descritos anteriormente. Se puede personalizar la manera en como los parámetros se convierten configurando la propiedad [[yii\web\Request::parsers]].
+
+## Métodos de Request <a name="request-methods"></a>
+
+Se puede obtener el método HTTP usado por la petición actual a través de la expresión `Yii::$app->request->method`. Se proporcionan un conjunto de propiedades booleanas para comprobar si el método actual es de un cierto tipo. Por ejemplo:
+
+```php
+$request = Yii::$app->request;
+
+if ($request->isAjax) { // la request es una request AJAX }
+if ($request->isGet)  { // el método de la request es GET }
+if ($request->isPost) { // el método de la request es POST }
+if ($request->isPut)  { // el método de la request es PUT }
+```
+
+## URLs de Request <a name="request-urls"></a>
+
+El componente `request` proporciona muchas maneras de inspeccionar la URL solicitada actualmente.
+
+Asumiendo que la URL que se está solicitando es `http://example.com/admin/index.php/product?id=100`, se pueden obtener varias partes de la URL explicadas en los siguientes puntos:
+
+* [[yii\web\Request::url|url]]: devuelve `/admin/index.php/product?id=100`, que es la URL sin la parte de información del host.
+* [[yii\web\Request::absoluteUrl|absoluteUrl]]: devuelve `http://example.com/admin/index.php/product?id=100`, que es la URL entera, incluyendo la parte de información del host.
+* [[yii\web\Request::hostInfo|hostInfo]]: devuelve `http://example.com`, que es la parte de información del host dentro de la URL.
+* [[yii\web\Request::pathInfo|pathInfo]]: devuelve `/product`, que es la parte posterior al script de entrada y anterior al interrogante (query string)
+* [[yii\web\Request::queryString|queryString]]: devuelve `id=100`, que es la parte posterior al interrogante.
+* [[yii\web\Request::baseUrl|baseUrl]]: devuelve `/admin`, que es la parte posterior a la información del host y anterior al nombre de script de entrada.
+* [[yii\web\Request::scriptUrl|scriptUrl]]: devuelve `/admin/index.php`, que es la URL sin la información del la ruta ni la query string.
+* [[yii\web\Request::serverName|serverName]]: devuelve `example.com`, que es el nombre del host dentro de la URL.
+* [[yii\web\Request::serverPort|serverPort]]: devuelve 80, que es el puerto que usa el servidor web.
+
+## Cabeceras HTTP <a name="http-headers"></a> 
+
+Se pueden obtener la información de las cabeceras HTTP a través de [[yii\web\HeaderCollection|header collection]] devueltas por la propiedad [[yii\web\Request::headers]]. Por ejemplo:
+
+```php
+// $headers es un objeto de yii\web\HeaderCollection 
+$headers = Yii::$app->request->headers;
+
+// devuelve el valor Accept de la cabecera
+$accept = $headers->get('Accept');
+
+if ($headers->has('User-Agent')) { // la cabecera contiene un User-Agent }
+```
+
+El componente `request` también proporciona soporte para acceder rápidamente a las cabeceras usadas más comúnmente, incluyendo:
+
+* [[yii\web\Request::userAgent|userAgent]]: devuelve el valor de la cabecera `User-Agen`.
+* [[yii\web\Request::contentType|contentType]]: devuelve el valor de la cabecera `Content-Type` que indica el tipo MIME de los datos del cuerpo de la petición.
+* [[yii\web\Request::acceptableContentTypes|acceptableContentTypes]]: devuelve los tipos de contenido MIME aceptado por los usuarios, ordenados por puntuación de calidad. Los que tienen mejor puntuación, se devolverán primero.
+* [[yii\web\Request::acceptableLanguages|acceptableLanguages]]: devuelve los idiomas aceptados por el usuario. Los idiomas devueltos son ordenados según su orden de preferencia. El primer elemento representa el idioma preferido.
+
+Si la aplicación soporta múltiples idiomas y se quiere mostrar las páginas en el idioma preferido por el usuario, se puede usar el método de negociación de idioma [[yii\web\Request::getPreferredLanguage()]]. Este método obtiene una lista de idiomas soportados por la aplicación, comparados con [[yii\web\Request::acceptableLanguages|acceptableLanguages]], y devuelve el idioma más apropiado.
+
+>Consejo: También se puede usar el filtro [[yii\filters\ContentNegotiator|ContentNegotiator]] para determinar diatónicamente el content type y el idioma que debe usarse en la respuesta. El filtro implementa la negociación de contenido en la parte superior de las propiedades y métodos descritos anteriormente.
+
+## Información del cliente <a name="client-information"></a>
+
+Se puede obtener el nombre del host y la dirección IP de la máquina cliente a través de [[yii\web\Request::userHost|userHost]] y [[yii\web\Request::userIP|userIP]], respectivamente. Por ejemplo:
+
+```php
+$userHost = Yii::$app->request->userHost;
+$userIP = Yii::$app->request->userIP;
+```
diff --git a/docs/guide-es/runtime-responses.md b/docs/guide-es/runtime-responses.md
new file mode 100644
index 0000000..9774575
--- /dev/null
+++ b/docs/guide-es/runtime-responses.md
@@ -0,0 +1,203 @@
+Respuestas
+==========
+
+Cuando una aplicación finaliza la gestión de una [petición (request)](runtime-requests.md), genera un objeto [[yii\web\Response|response]] y lo envía al usuario final. El objeto response contiene información tal como el código de estado (status code) HTTP, las cabeceras (headers) HTTP y el cuerpo (body). El objetivo final del desarrollo de una aplicación Web es esencialmente construir objetos response para varias peticiones.
+
+En la mayoría de casos principalmente se debe tratar con [componentes de aplicación](structure-application-components.md) de tipo `response` que, por defecto, son una instancia de [[yii\web\Response]]. Sin embargo, Yii permite crear sus propios objetos `response` y enviarlos al usuario final tal y como se explica a continuación.
+
+En esta sección, se describirá como generar y enviar respuestas a usuarios finales.
+
+## Códigos de Estado <a name="status-code"></a>
+
+Una de las primeras cosas que debería hacerse cuando se genera una respuesta es indicar si la petición se ha gestionado correctamente. Esto se indica asignando la propiedad [[yii\web\Response::statusCode]] a la que se le puede asignar cualquier valor válido dentro de los [códigos de estado HTTP](http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html). Por ejemplo, para indicar que la petición se ha gestionado correctamente, se puede asignar el código de estado a 200, como en el siguiente ejemplo:
+
+```php
+Yii::$app->response->statusCode = 200;
+```
+
+Sin embargo, en la mayoría de casos nos es necesario asignar explícitamente el código de estado. Esto se debe a que el valor por defecto de [[yii\web\Response::statusCode]] es 200. Y si se quiere indicar que la petición ha fallado, se puede lanzar una excepción HTTP apropiada como en el siguiente ejemplo:
+
+```php
+throw new \yii\web\NotFoundHttpException;
+```
+
+Cuando el [error handler](runtime-handling-errors.md) captura una excepción, obtendrá el código de estado de la excepción y lo asignará a la respuesta. En el caso anterior, la excepción [[yii\web\NotFoundHttpException]] está asociada al estado HTTP 404. En Yii existen las siguientes excepciones predefinidas.
+
+* [[yii\web\BadRequestHttpException]]: código de estado 400.
+* [[yii\web\ConflictHttpException]]: código de estado 409.
+* [[yii\web\ForbiddenHttpException]]: código de estado 403.
+* [[yii\web\GoneHttpException]]: código de estado 410.
+* [[yii\web\MethodNotAllowedHttpException]]: código de estado 405.
+* [[yii\web\NotAcceptableHttpException]]: código de estado 406. 
+* [[yii\web\NotFoundHttpException]]: código de estado 404.
+* [[yii\web\ServerErrorHttpException]]: código de estado 500.
+* [[yii\web\TooManyRequestsHttpException]]: código de estado 429.
+* [[yii\web\UnauthorizedHttpException]]: código de estado 401.
+* [[yii\web\UnsupportedMediaTypeHttpException]]: código de estado 415.
+
+Si la excepción que se quiere lanzar no se encuentra en la lista anterior, se puede crear una extendiendo [[yii\web\HttpException]], o directamente lanzando un código de estado, por ejemplo:
+
+```php
+throw new \yii\web\HttpException(402);
+```
+
+## Cabeceras HTTP <a name="http-headers"></a> 
+
+Se puede enviar cabeceras HTTP modificando el [[yii\web\Response::headers|header collection]] en el componente `response`. Por ejemplo:
+
+```php
+$headers = Yii::$app->response->headers;
+
+// añade una cabecera Pragma. Las cabeceras Pragma existentes NO se sobrescribirán.
+$headers->add('Pragma', 'no-cache');
+
+// asigna una cabecera Pragma. Cualquier cabecera Pragma existente será descartada.
+$headers->add('Pragma', 'no-cache');
+
+// Elimina las cabeceras Pragma y devuelve los valores de las eliminadas en un array
+$values = $headers->remove('Pragma');
+```
+
+>Información: Los nombres de las cabeceras case insensitive, es decir, no discriminan entre mayúsculas y minúsculas. Además, las nuevas cabeceras registradas no se enviarán al usuario hasta que se llame al método [[yii\web\Response::send()]].
+
+## Cuerpo de la Respuesta<a name="response-body"></a>
+
+La mayoría de las respuestas deben tener un cuerpo que contenga el contenido que se quiere mostrar a los usuarios finales.
+
+Si ya se tiene un texto de cuerpo con formato, se puede asignar a la propiedad [[yii\web\Response::content]] del response. Por ejemplo:
+
+```php
+Yii::$app->response->content = 'hello world!';
+```
+
+Si se tiene que dar formato a los datos antes de enviarlo al usuario final, se deben asignar las propiedades [[yii\web\Response::format|format]] y [[yii\web\Response::data|data]]. La propiedad [[yii\web\Response::format|format]] especifica que formato debe tener [[yii\web\Response::data|data]]. Por ejemplo:
+
+```php
+$response = Yii::$app->response;
+$response->format = \yii\web\Response::FORMAT_JSON;
+$response->data = ['message' => 'hello world'];
+```
+
+Yii soporta a los siguientes formatos de forma predeterminada, cada uno de ellos implementado por una clase [[yii\web\ResponseFormatterInterface|formatter]]. Se pueden personalizar los formatos o añadir nuevos sobrescribiendo la propiedad [[yii\web\Response::formatters]].
+
+* [[yii\web\Response::FORMAT_HTML|HTML]]: implementado por [[yii\web\HtmlResponseFormatter]].
+* [[yii\web\Response::FORMAT_XML|XML]]: implementado por [[yii\web\XmlResponseFormatter]].
+* [[yii\web\Response::FORMAT_JSON|JSON]]: implementado por [[yii\web\JsonResponseFormatter]].
+* [[yii\web\Response::FORMAT_JSONP|JSONP]]: implementado por [[yii\web\JsonResponseFormatter]].
+
+Mientras el cuerpo de la respuesta puede ser mostrado de forma explicita como se muestra a en el anterior ejemplo, en la mayoría de casos se puede asignar implícitamente por el valor de retorno de los métodos de [acción](structure-controllers.md). El siguiente, es un ejemplo de uso común:
+
+```php
+public function actionIndex()
+{
+    return $this->render('index');
+}
+```
+
+La acción `index` anterior, devuelve el resultado renderizado de la vista `index`. el valor devuelto será recogido por el componente `response`, se le aplicará formato y se enviará al usuario final.
+
+Por defecto, el formato de respuesta es [[yii\web\Response::FORMAT_HTML|HTML]], sólo se debe devolver un string en un método de acción.  Si se quiere usar un formato de respuesta diferente, se debe asignar antes de devolver los datos. por ejemplo:
+
+```php
+public function actionInfo()
+{
+    \Yii::$app->response->format = \yii\web\Response::FORMAT_JSON;
+    return [
+        'message' => 'hello world',
+        'code' => 100,
+    ];
+}
+```
+
+Como se ha mencionado, además de usar el componente de aplicación `response` predeterminado, también se pueden crear objetos response propios y enviarlos a los usuarios finales. Se puede hacer retornando un objeto en el método de acción, como en el siguiente ejemplo:
+
+```php
+public function actionInfo()
+{
+    return \Yii::createObject([
+        'class' => 'yii\web\Response',
+        'format' => \yii\web\Response::FORMAT_JSON,
+        'data' => [
+            'message' => 'hello world',
+            'code' => 100,
+        ],
+    ]);
+}
+```
+
+>Nota: Si se crea un objeto response propio, no se podrán aprovechar las configuraciones asignadas para el componente `response` en la configuración de la aplicación. Sin embargo, se puede usar la [inyección de dependencias](concept-di-container.md) para aplicar la configuración común al nuevo objeto response.
+
+## Redirección del Navegador <a name="browser-redirection"></a>
+
+La redirección del navegador se basa en el envío de la cabecera HTTP `Location`. Debido a que esta característica se usa comúnmente, Yii proporciona soporte especial para ello.
+
+Se puede redirigir el navegador a una URL llamando al método [[yii\web\Response::redirect()]]. El método asigna la cabecera de `Location` apropiada con la URL proporcionada y devuelve el objeto response él mismo. En un método de acción, se puede acceder a él mediante el acceso directo [[yii\web\Controller::redirect()]] como en el siguiente ejemplo:
+
+```php
+public function actionOld()
+{
+    return $this->redirect('http://example.com/new', 301);
+}
+```
+
+En el ejemplo anterior, el método de acción devuelve el resultado del método `redirect()`. Como se ha explicado antes, el objeto response devuelto por el método de acción se usará como respuesta enviándola al usuario final.
+
+En otros sitios que no sean los métodos de acción, se puede llamar a [[yii\web\Response::redirect()]] directamente seguido por una llamada al método [[yii\web\Response::send()]] para asegurar que no habrá contenido extra en la respuesta.
+
+```php
+\Yii::$app->response->redirect('http://example.com/new', 301)->send();
+```
+
+> Información: De forma predeterminada, el método [[yii\web\Response::redirect()]] asigna el estado de respuesta al código de estado 302 que indica al navegador que recurso solicitado está *temporalmente* alojado en una URI diferente. Se puede enviar un código de estado 301 para expresar que el recurso se ha movido de forma *permanente*.
+
+Cuando la petición actual es de una petición AJAX, el hecho de enviar una cabecera `Location` no causará una redirección del navegador automática. Para resolver este problema, el método [[yii\web\Response::redirect()]] asigna una cabecera `X-Redirect` con el valor de la URL de redirección. En el lado del cliente se puede escribir código JavaScript para leer la esta cabecera y redireccionar el navegador como corresponda.
+
+> Información: Yii contiene el archivo JavaScript `yii.js` que proporciona un conjunto de utilidades comunes de JavaScript, incluyendo la redirección de navegador basada en la cabecera `X-Redirect`. Por tanto, si se usa este fichero JavaScript (registrándolo *asset bundle* [[yii\web\YiiAsset]]), no se necesitará escribir nada más para tener soporte en redirecciones AJAX.
+
+## Enviar Archivos <a name="sending-files"></a>
+
+Igual que con la redirección, el envío de archivos es otra característica que se basa en cabeceras HTTP especificas. Yii proporciona un conjunto de métodos para dar soporte a varias necesidades del envío de ficheros. Todos ellos incorporan soporte para el rango de cabeceras HTTP.
+
+* [[yii\web\Response::sendFile()]]: envía un fichero existente al cliente.
+* [[yii\web\Response::sendContentAsFile()]]: envía un string al cliente como si fuera un archivo .
+* [[yii\web\Response::sendStreamAsFile()]]: envía un *file stream* existente al cliente como si fuera un archivo.
+
+Estos métodos tienen la misma firma de método con el objeto response como valor de retorno. Si el archivo que se envía es muy grande, se debe considerar usar [[yii\web\Response::sendStreamAsFile()]] porque es más efectivo en términos de memoria. El siguiente ejemplo muestra como enviar un archivos en una acción de controlador.
+
+```php
+public function actionDownload()
+{
+    return \Yii::$app->response->sendFile('ruta/del/fichero.txt');
+}
+```
+
+Si se llama al método de envío de ficheros fuera de un método de acción, también se debe llamar al método [[yii\web\Response::send()]] después para asegurar que no se añada contenido extra a la respuesta.
+
+```php
+\Yii::$app->response->sendFile('ruta/del/fichero.txt')->send();
+```
+
+Algunos servidores Web tienen un soporte especial para enviar ficheros llamado *X-Sendfile*. La idea es redireccionar la petición para un fichero a un servidor Web que servirá el fichero directamente. Como resultado, la aplicación Web puede terminar antes mientras el servidor Web envía el fichero. Para usar esta funcionalidad, se puede llamar a [[yii\web\Response::xSendFile()]]. La siguiente lista resume como habilitar la característica `X-Sendfile` para algunos servidores Web populares.
+
+- Apache: [X-Sendfile](http://tn123.org/mod_xsendfile)
+- Lighttpd v1.4: [X-LIGHTTPD-send-file](http://redmine.lighttpd.net/projects/lighttpd/wiki/X-LIGHTTPD-send-file)
+- Lighttpd v1.5: [X-Sendfile](http://redmine.lighttpd.net/projects/lighttpd/wiki/X-LIGHTTPD-send-file)
+- Nginx: [X-Accel-Redirect](http://wiki.nginx.org/XSendfile)
+- Cherokee: [X-Sendfile and X-Accel-Redirect](http://www.cherokee-project.com/doc/other_goodies.html#x-sendfile)
+
+## Enviar la Respuesta <a name="sending-response"></a>
+
+El contenido en una respuesta no se envía al usuario hasta que se llama al método [[yii\web\Response::send()]]. De forma predeterminada, se llama a este método automáticamente al final de [[yii\base\Application::run()]]. Sin embargo, se puede llamar explícitamente a este método forzando el envío de la respuesta inmediatamente.
+
+El método [[yii\web\Response::send()]] sigue los siguientes pasos para enviar una respuesta:
+
+1. Lanza el evento [[yii\web\Response::EVENT_BEFORE_SEND]].
+2. Llama a [[yii\web\Response::prepare()]] para convertir el [[yii\web\Response::data|response data]] en [[yii\web\Response::content|response content]].
+3. Lanza el evento [[yii\web\Response::EVENT_AFTER_PREPARE]].
+4. Llama a [[yii\web\Response::sendHeaders()]] para enviar las cabeceras HTTP registradas.
+5. Llama a [[yii\web\Response::sendContent()]] para enviar el contenido del cuerpo de la respuesta.
+6. Lanza el evento [[yii\web\Response::EVENT_AFTER_SEND]].
+
+Después de llamar a [[yii\web\Response::send()]] por primera vez, cualquier llamada a este método será ignorada. Esto significa que una vez se envíe una respuesta, no se le podrá añadir más contenido.
+
+Como se puede observar, el método [[yii\web\Response::send()]] lanza varios eventos útiles. Al responder a estos eventos, es posible ajustar o decorar la respuesta.
diff --git a/docs/guide-es/runtime-sessions-cookies.md b/docs/guide-es/runtime-sessions-cookies.md
new file mode 100644
index 0000000..8913f78
--- /dev/null
+++ b/docs/guide-es/runtime-sessions-cookies.md
@@ -0,0 +1,291 @@
+Sesiones (Sessions) y Cookies
+=============================
+
+Las sesiones y las cookies permiten la persistencia de datos a través de múltiples peticiones de usuario. En PHP plano, debes acceder a ellos a través de las variables globales `$_SESSION` y `$_COOKIE`, respectivamente. Yii encapsula las sesiones y las cookies como objetos y por lo tanto te permite acceder a ellos de manera orientada a objetos con estupendas mejoras adicionales.
+
+
+## Sesiones <a name="sessions"></a>
+
+Como las [peticiones](runtime-requests.md) y las [respuestas](runtime-responses.md), puedes acceder a las sesiones vía el [componente de la aplicación](structure-application-components.md) `session`  el cual es una instancia de [[yii\web\Session]], por defecto.
+
+
+### Abriendo y cerrando sesiones <a name="opening-closing-sessions"></a>
+
+Para abrir y cerrar una sesión, puedes hacer lo siguiente:
+
+```php
+$session = Yii::$app->session;
+
+// comprueba si una sesión está ya abierta
+if ($session->isActive) ...
+
+// abre una sesión
+$session->open();
+
+// cierra una sesión
+$session->close();
+
+// destruye todos los datos registrados por la sesión.
+$session->destroy();
+```
+
+Puedes llamar a [[yii\web\Session::open()|open()]] y [[yii\web\Session::close()|close()]] múltiples veces sin causar errores. Esto ocurre porque internamente los métodos verificarán primero si la sesión está ya abierta.
+
+
+### Accediendo a los datos de sesión <a name="access-session-data"></a>
+
+Para acceder a los datos almacenados en sesión, puedes hacer lo siguiente:
+
+```php
+$session = Yii::$app->session;
+
+// devuelve una variable de sesión. Los siguientes usos son equivalentes:
+$language = $session->get('language');
+$language = $session['language'];
+$language = isset($_SESSION['language']) ? $_SESSION['language'] : null;
+
+// inicializa una variable de sesión. Los siguientes usos son equivalentes:
+$session->set('language', 'en-US');
+$session['language'] = 'en-US';
+$_SESSION['language'] = 'en-US';
+
+// remueve la variable de sesión. Los siguientes usos son equivalentes:
+$session->remove('language');
+unset($session['language']);
+unset($_SESSION['language']);
+
+// comprueba si una variable de sesión existe. Los siguientes usos son equivalentes:
+if ($session->has('language')) ...
+if (isset($session['language'])) ...
+if (isset($_SESSION['language'])) ...
+
+// recorre todas las variables de sesión. Los siguientes usos son equivalentes:
+foreach ($session as $name => $value) ...
+foreach ($_SESSION as $name => $value) ...
+```
+
+> Información: Cuando accedas a los datos de sesión a través del componente `session`, una sesión será automáticamente abierta si no lo estaba antes. Esto es diferente accediendo a los datos de sesión a través de `$_SESSION`, el cual requiere llamar explícitamente a `session_start()`.
+
+Cuando trabajas con datos de sesiones que son arrays, el componte `session` tiene una limitación que te previene directamente de modificar un elemento del array. Por ejemplo,
+
+```php
+$session = Yii::$app->session;
+
+// el siguiente código no funciona
+$session['captcha']['number'] = 5;
+$session['captcha']['lifetime'] = 3600;
+
+// el siguiente código funciona:
+$session['captcha'] = [
+    'number' => 5,
+    'lifetime' => 3600,
+];
+
+// el siguiente código también funciona:
+echo $session['captcha']['lifetime'];
+```
+
+Puedes usar las siguientes soluciones para arreglar este problema:
+
+```php
+$session = Yii::$app->session;
+
+// directamente usando $_SESSION (asegura te de que Yii::$app->session->open() ha sido llamado)
+$_SESSION['captcha']['number'] = 5;
+$_SESSION['captcha']['lifetime'] = 3600;
+
+// devuelve el valor del array, lo modifica y a continuación lo guarda
+$captcha = $session['captcha'];
+$captcha['number'] = 5;
+$captcha['lifetime'] = 3600;
+$session['captcha'] = $captcha;
+
+// usa un ArrayObject en vez de un array
+$session['captcha'] = new \ArrayObject;
+...
+$session['captcha']['number'] = 5;
+$session['captcha']['lifetime'] = 3600;
+
+// almacena los datos en un array con un prefijo común para las claves
+$session['captcha.number'] = 5;
+$session['captcha.lifetime'] = 3600;
+```
+
+Para un mejor rendimiento y legibilidad del código, recomendamos la última solución. Es decir, en vez de almacenar un array como una única variable de sesión, almacena cada elemento del array como una variable de sesión que comparta el mismo prefijo clave con otros elementos del array.
+
+
+### Personalizar el almacenamiento de sesión <a name="custom-session-storage"></a>
+
+Por defecto la clase [[yii\web\Session]] almacena los datos de sesión como ficheros en el servidor. Yii también provee de las siguientes clases de sesión que implementan diferentes almacenamientos de sesión:
+
+* [[yii\web\DbSession]]: almacena los datos de sesión en una tabla en la base de datos.
+* [[yii\web\CacheSession]]: almacena los datos de sesión en una caché con la ayuda de la configuración del [componente caché](caching-data.md#cache-components).
+* [[yii\redis\Session]]: almacena los datos de sesión usando [redis](http://redis.io/) como medio de almacenamiento.
+* [[yii\mongodb\Session]]: almacena los datos de sesión en [MongoDB](http://www.mongodb.org/).
+
+Todas estas clases de sesión soportan los mismos métodos de la API. Como consecuencia, puedes cambiar el uso de diferentes almacenamientos de sesión sin la necesidad de modificar el código de tu aplicación que usa sesiones.
+
+> Nota: si quieres acceder a los datos de sesión vía `$_SESSION` mientras estás usando un almacenamiento de sesión personalizado, debes asegurar te que la sesión está ya empezada por [[yii\web\Session::open()]]. Esto ocurre porque los manipuladores de almacenamiento de sesión personalizado son registrados sin este método.
+
+Para aprender como configurar y usar estas clases de componentes, por favor consulte la documentación de la API. Abajo está un ejemplo que muestra como configurar [[yii\web\DbSession]] en la configuración de la aplicación para usar una tabla en la base de datos como almacenamiento de sesión:
+
+```php
+return [
+    'components' => [
+        'session' => [
+            'class' => 'yii\web\DbSession',
+            // 'db' => 'mydb',  // el identificador del componente de aplicación DB connection. Por defecto'db'.
+            // 'sessionTable' => 'my_session', // nombre de la tabla de sesión. Por defecto 'session'.
+        ],
+    ],
+];
+```
+
+También es necesario crear la siguiente tabla de la base de datos para almacenar los datos de sesión:
+
+```sql
+CREATE TABLE session
+(
+    id CHAR(40) NOT NULL PRIMARY KEY,
+    expire INTEGER,
+    data BLOB
+)
+```
+
+donde 'BLOB' se refiere al BLOB-type de tu DBMS preferida. Abajo está el tipo BLOB que puedes usar para algunos DBMS populares:
+
+- MySQL: LONGBLOB
+- PostgreSQL: BYTEA
+- MSSQL: BLOB
+
+> Nota: De acuerdo con la configuración de php.ini `session.hash_function`, puedes necesitar ajustar el tamaño de la columna `id`. Por ejemplo, si `session.hash_function=sha256`, deberías usar el tamaño 64 en vez de 40.
+
+
+### Flash Data <a name="flash-data"></a>
+
+Flash data es una clase especial de datos de sesión que, una vez se inicialice en la primera petición, estará sólo disponible durante la siguiente petición y automáticamente se borrará después. Flash data es comúnmente usado para implementar mensajes que deberían ser mostrados una vez a usuarios finales, tal como mostrar un mensaje de confirmación después de que un usuario envíe un formulario con éxito.
+
+Puedes inicializar y acceder a flash data a través del componente de aplicación `session`. Por ejemplo,
+
+```php
+$session = Yii::$app->session;
+
+// Petición #1
+// inicializa el mensaje flash nombrado como "postDeleted"
+$session->setFlash('postDeleted', 'You have successfully deleted your post.');
+
+// Petición #2
+// muestra el mensaje flash nombrado "postDeleted"
+echo $session->getFlash('postDeleted');
+
+// Petición #3
+// $result será false ya que el mensaje flash ha sido borrado automáticamente
+$result = $session->hasFlash('postDeleted');
+```
+
+Al igual que los datos de sesión regulares, puede almacenar datos arbitrarios como flash data.
+
+Cuando llamas a [yii\web\Session::setFlash()]], sobrescribirá cualquier Flash data que tenga el mismo nombre.
+Para añadir un nuevo flash data a el/los existes con el mismo nombre, puedes llamar a [[yii\web\Session::addFlash()]].
+Por ejemplo,
+
+```php
+$session = Yii::$app->session;
+
+// Petición #1
+// añade un pequeño mensaje flash bajo el nombre de "alerts"
+$session->addFlash('alerts', 'You have successfully deleted your post.');
+$session->addFlash('alerts', 'You have successfully added a new friend.');
+$session->addFlash('alerts', 'You are promoted.');
+
+// Petición #2
+// $alerts es un array de mensajes flash bajo el nombre de "alerts"
+$alerts = $session->getFlash('alerts');
+```
+
+> Nota: Intenta no usar a la vez [[yii\web\Session::setFlash()]] con [[yii\web\Session::addFlash()]] para flash data
+  del mismo nombre. Esto ocurre porque el último método elimina el flash data dentro del array así que puedes añadir un nuevo flash data con el mismo nombre. Como resultado, cuando llamas a [[yii\web\Session::getFlash()]], puedes encontrarte algunas veces que te está devolviendo un array mientras que otras veces te está devolviendo un string, esto depende del orden que invoques a estos dos métodos.
+
+
+## Cookies <a name="cookies"></a>
+
+Yii representa cada cookie como un objeto de [[yii\web\Cookie]]. Tanto [[yii\web\Request]] como [[yii\web\Response]]
+mantienen una colección de cookies vía la propiedad de llamada `cookies`. La colección de cookie en la antigua representación son enviadas en una petición, mientras la colección de cookie en esta última representa las cookies que van a ser enviadas al usuario.
+
+
+### Leyendo Cookies <a name="reading-cookies"></a>
+
+Puedes recuperar las cookies en la petición actual usando el siguiente código:
+
+```php
+// devuelve la colección de cookie (yii\web\CookieCollection) del componente "request"
+$cookies = Yii::$app->request->cookies;
+
+// devuelve el valor "language" de la cookie. Si la cookie no existe, retorna "en" como valor por defecto.
+$language = $cookies->getValue('language', 'en');
+
+// una manera alternativa de devolver el valor "language" de la cookie
+if (($cookie = $cookies->get('language')) !== null) {
+    $language = $cookie->value;
+}
+
+// puedes también usar $cookies como un array
+if (isset($cookies['language'])) {
+    $language = $cookies['language']->value;
+}
+
+// comprueba si hay una cookie con el valor "language"
+if ($cookies->has('language')) ...
+if (isset($cookies['language'])) ...
+```
+
+
+### Enviando Cookies <a name="sending-cookies"></a>
+
+Puedes enviar cookies a usuarios finales usando el siguiente código:
+
+```php
+// devuelve la colección de cookie (yii\web\CookieCollection) del componente "response"
+$cookies = Yii::$app->response->cookies;
+
+// añade una nueva cookie a la respuesta que se enviará
+$cookies->add(new \yii\web\Cookie([
+    'name' => 'language',
+    'value' => 'zh-CN',
+]));
+
+// remueve una cookie
+$cookies->remove('language');
+// equivalente a lo siguiente
+unset($cookies['language']);
+```
+
+Además de [[yii\web\Cookie::name|name]], [[yii\web\Cookie::value|value]] las propiedades que se muestran en los anteriores ejemplos, la clase [[yii\web\Cookie]] también define otras propiedades para representar toda la información posible de las cookies, tal como [[yii\web\Cookie::domain|domain]], [[yii\web\Cookie::expire|expire]]. Puedes configurar estas propiedades según sea necesario para preparar una cookie y luego añadirlo a la colección de cookies de la respuesta.
+
+> Nota: Para mayor seguridad, el valor por defecto de [[yii\web\Cookie::httpOnly]] es true. Esto ayuda a mitigar el riesgo del acceso a la cookie protegida por script desde el lado del cliente (si el navegador lo soporta). Puedes leer el [httpOnly wiki article](https://www.owasp.org/index.php/HttpOnly) para más detalles.
+
+
+### Validación de la Cookie <a name="cookie-validation"></a>
+
+Cuando estás leyendo y enviando cookies a través de los componentes `request` y `response` como mostramos en las dos últimas subsecciones, cuentas con el añadido de seguridad de la validación de cookies el cual protege las cookies de ser modificadas en el lado del cliente. Esto se consigue con la firma de cada cookie con una cadena hash, el cual permite a la aplicación saber si una cookie ha sido modificada en el lado del cliente o no. Si es así, la cookie no será accesible a través de [[yii\web\Request::cookies|cookie collection]] del componente `request`.
+
+> Información: Si falla la validación de una cookie, aún puedes acceder a la misma a través de `$_COOKIE`. Esto sucede porque librerías de terceros pueden manipular de forma propia las cookies, lo cual no implica la validación de las mismas.
+
+La validación de cookies es habilitada por defecto. Puedes desactivar lo ajustando la propiedad [[yii\web\Request::enableCookieValidation]] a false, aunque se recomienda encarecidamente que no lo haga.
+
+> Nota: Las cookies que son directamente leídas/enviadas vía `$_COOKIE` y `setcookie()` no serán validadas.
+
+Cuando estás usando la validación de cookie, puedes especificar una [[yii\web\Request::cookieValidationKey]] el cual se usará para generar los strings hash mencionados anteriormente. Puedes hacerlo mediante la configuración del componente `request` en la configuración de la aplicación:
+
+```php
+return [
+    'components' => [
+        'request' => [
+            'cookieValidationKey' => 'fill in a secret key here',
+        ],
+    ],
+];
+```
+
+> Información: [[yii\web\Request::cookieValidationKey|cookieValidationKey]] es crítico para la seguridad de tu aplicación.
+  Sólo debería ser conocido por personas de confianza. No lo guardes en sistemas de control de versiones.
diff --git a/docs/guide-fr/README.md b/docs/guide-fr/README.md
index 80eed47..642d348 100644
--- a/docs/guide-fr/README.md
+++ b/docs/guide-fr/README.md
@@ -31,7 +31,7 @@ Structure Application
 ---------------------
 
 * [Vue d'ensemble](structure-overview.md)
-* [Script d'entrée](structure-entry-scripts.md)
+* [Scripts d'entrée](structure-entry-scripts.md)
 * [Applications](structure-applications.md)
 * [Composants application](structure-application-components.md)
 * [Contrôleurs](structure-controllers.md)
diff --git a/docs/guide-fr/structure-entry-scripts.md b/docs/guide-fr/structure-entry-scripts.md
new file mode 100644
index 0000000..760a28f
--- /dev/null
+++ b/docs/guide-fr/structure-entry-scripts.md
@@ -0,0 +1,117 @@
+Scripts d'entrée
+=============
+
+Les scripts d'entrée sont la première chaîne dans le processus de d'amorçage de l'application. Une application (qu'elle
+soit une application Web ou une application console) a un unique script de démarrage. Les utilisateurs font des 
+requêtes au scripts de démarrage qui instancient des instances d'application et leur transmettent les requêtes.
+
+Les scripts d'entrée pour application Web doivent être placés dans des dossiers accessibles par le Web pour que les 
+utilisateurs puissent y accéder. Ils sont souvent nommés `index.php`, mais peuvent également avoir tout autre nom,
+du moment que les serveurs Web peuvent les trouver.
+
+Les scripts d'entrée pour les applications console sont généralement placés dans le [répertoire de base](structure-applications.md)
+des applications et sont nommés `yii` (avec le suffixe `.php`). Ils doivent être rendus exécutables afin que les 
+utilisateurs puissent lancer des applications console grâce à la commande `./yii <route> [arguments] [options]`.
+
+Les scipts de démarrage effectuent principalement les tâches suivantes :
+
+* Définir des constantes globales;
+* Enregistrer l'[autoloader Composer](http://getcomposer.org/doc/01-basic-usage.md#autoloading);
+* Inclure le fichier de classe de [[Yii]];
+* Charger la configuration de l'application;
+* Créer et configurer une instance d'[application](structure-applications.md);
+* Appeler [[yii\base\Application::run()]] pour traiter la requête entrante.
+
+
+## Applications Web <a name="web-applications"></a>
+
+Ce qui suit est le code du script de démarrage du [Modèle Basique d'Application Web](start-installation.md).
+
+```php
+<?php
+
+defined('YII_DEBUG') or define('YII_DEBUG', true);
+defined('YII_ENV') or define('YII_ENV', 'dev');
+
+// register Composer autoloader
+require(__DIR__ . '/../vendor/autoload.php');
+
+// include Yii class file
+require(__DIR__ . '/../vendor/yiisoft/yii2/Yii.php');
+
+// load application configuration
+$config = require(__DIR__ . '/../config/web.php');
+
+// create, configure and run application
+(new yii\web\Application($config))->run();
+```
+
+
+## Applications Console <a name="console-applications"></a>
+
+De même, le code qui suit est le code du script de démarrage d'une application console :
+
+```php
+#!/usr/bin/env php
+<?php
+/**
+ * Yii console bootstrap file.
+ *
+ * @link http://www.yiiframework.com/
+ * @copyright Copyright (c) 2008 Yii Software LLC
+ * @license http://www.yiiframework.com/license/
+ */
+
+defined('YII_DEBUG') or define('YII_DEBUG', true);
+
+// fcgi doesn't have STDIN and STDOUT defined by default
+defined('STDIN') or define('STDIN', fopen('php://stdin', 'r'));
+defined('STDOUT') or define('STDOUT', fopen('php://stdout', 'w'));
+
+// register Composer autoloader
+require(__DIR__ . '/vendor/autoload.php');
+
+// include Yii class file
+require(__DIR__ . '/vendor/yiisoft/yii2/Yii.php');
+
+// load application configuration
+$config = require(__DIR__ . '/config/console.php');
+
+$application = new yii\console\Application($config);
+$exitCode = $application->run();
+exit($exitCode);
+```
+
+
+## Définir des Constantes <a name="defining-constants"></a>
+
+Les scripts de démarrage sont l'endroit idéal pour définir des constantes globales. Yii supporte les trois constantes suivantes :
+
+* `YII_DEBUG` : spécifie si une application tourne en mode de débogage. Si elle est en mode de débogage, une 
+  application loguera plus d'informations, et révélera des piles d'appels d'erreurs détaillées si des exceptions
+  sont lancées. C'est pour cette raison que le mode de débogage doit être utilisé principalement pendant la phase
+  de développement. La valeur par défaut de `YII_DEBUG` est faux.
+* `YII_ENV` : spécifie sur quel environnement l'application est en train de tourner. Cela a été décrit plus en détails
+  dans la section [Configurations](concept-configurations.md#environment-constants). La valeur par défaut de `YII_ENV` 
+  est `'prod'`, ce qui signifie que l'application tourne en environnement de production.
+* `YII_ENABLE_ERROR_HANDLER` : spécifie si le gestionnaire d'erreurs fourni par Yii doit être activé. La valeur par 
+  défaut de cette constantes est vrai.
+
+Quand on définit une constant, on utilise souvent le code suivant :
+
+```php
+defined('YII_DEBUG') or define('YII_DEBUG', true);
+```
+
+qui est l'équivalent du code suivant :
+
+```php
+if (!defined('YII_DEBUG')) {
+    define('YII_DEBUG', true);
+}
+```
+
+Clairement, le premier est plus succinct et plus aisé à comprendre.
+
+Les définitions de constantes doit être faite au tout début d'un script de démarrage pour qu'elles puissent prendre 
+effet quand d'autres fichiers PHP sont inclus.
diff --git a/docs/guide-it/intro-upgrade-from-v1.md b/docs/guide-it/intro-upgrade-from-v1.md
new file mode 100644
index 0000000..1476375
--- /dev/null
+++ b/docs/guide-it/intro-upgrade-from-v1.md
@@ -0,0 +1,529 @@
+Aggiornare dalla versione 1.1
+=============================
+
+Ci sono molte differenze tra la versione 1.1 e la 2.0 di Yii, dato che il framework è stato completamente riscritto.
+Di conseguenza l'aggiornamento dalla versione 1.1 non è così semplice come passare da una versione minore all'altra. In questa guida
+troverai le differenze principali tra le due versioni.
+
+Se non hai mai usato Yii 1.1 puoi ignorare questa sezione e passare direttamente a "[Come inizare](start-installation.md)".
+
+Considera che Yii 2.0 introduce più funzionalità di quelle descritte in questo riepilogo. Ti consigliamo di leggere tutta la 
+guida definitiva per apprenderle tutte. C'è la possibilità che alcune funzionalità che prima dovevi sviluppare da solo sono state
+implementate nel codice principale.
+
+
+Installazione
+-------------
+
+Yii 2.0 usa [Composer](https://getcomposer.org/), lo standard di fatto per la gestione dei pacchetti PHP. L'installazione del
+framework di base, così come delle estensioni, sono gestite da Composer. Per favore leggi la guida [Installare Yii](start-installation.md)
+per comprendere come installare Yii 2.0. Se vuoi creare una nuova estensione, o trasformarne una sviluppata per 1.1 a 2.0, fai riferimento
+alla sezione [Creazione estensioni](structure-extensions.md#creating-extensions).
+
+
+Richieste PHP
+-------------
+
+Yii 2.0 richiede PHP 5.4 o superiore, il che è un passaggio notevole rispetto alla richiesta di PHP 5.2 di Yii 1.1.
+Di conseguenza ci sono diverse differenze a livello di linguaggio a cui devi fare attenzione.
+Di seguito un riepilogo delle principali differenze relative a PHP:
+
+- [Namespace](http://php.net/manual/en/language.namespaces.php).
+- [Funzioni anonime](http://php.net/manual/en/functions.anonymous.php).
+- La sintassi breve per gli array `[...elementi...]` è utilizzabile invece di `array(...elementi...)`.
+- Le tag brevi per le echo `<?=` sono utilizzabili nei file delle viste. Il loro utilizzo è sicuro da PHP 5.4.
+- [Interfacce e classi SPL](http://php.net/manual/en/book.spl.php).
+- [Late Static Bindings](http://php.net/manual/en/language.oop5.late-static-bindings.php).
+- [Data e ora](http://php.net/manual/en/book.datetime.php).
+- [Trait](http://php.net/manual/en/language.oop5.traits.php).
+- [intl](http://php.net/manual/en/book.intl.php). Yii 2.0 utilizza l'estensione PHP `intl` per le funzionalità di 
+  internazionalizzazione.
+
+
+Namespace
+---------
+
+Il cambiamento più evidente in Yii 2.0 è l'uso dei namespace. Praticamente tutte le classi del codice 
+principale sono sotto namespace, ad esempio `yii\web\Request`. Il prefisso "C" non è più utilizzato nei nomi delle classi.
+Lo schema dei nomi segue la struttura delle directory. Per esempio `yii\web\Request` indica che il file corrispondente per quella
+classe si trova in `web/Request.php` nella directory principale del framework Yii.
+
+(Puoi utilizzare qualunque classe del core di Yii senza dover includere il file relativo, grazie al loader delle classi di Yii.)
+
+
+Componenti ed oggetti
+---------------------
+
+Yii2 divide la classe `CComponent` della versione 1.1 in due classi: [[yii\base\Object]] and [[yii\base\Component]].
+La classe [[yii\base\Object|Object]] è una classe leggera da usare come base, che consente la definizione di 
+[proprietà dell'oggetto](concept-properties.md) tramite *geters* e *setters*. La classe [[yii\base\Component|Component]] estende
+[[yii\base\Object|Object]] e supporta [eventi](concept-events.md) e [behavior](concept-behaviors.md).
+
+Se la tua classe non ha necessità di usare eventi o behavior conviene usare [[yii\base\Object|Object]] come classe base.
+Di solito viene impiegata per classi che rappresentano strutture di dati semplici.
+
+
+Configurazione oggetti
+----------------------
+
+La classe [[yii\base\Object|Object]] introduce un metodo uniforme per la configurazione degli oggetti. 
+Ogni classe figlia di [[yii\base\Object|Object]] dovrebbe dichiarare il suo costruttore (se necessario) in questo modo, così da essere 
+configurato correttamente:
+
+```php
+class MyClass extends \yii\base\Object
+{
+    public function __construct($param1, $param2, $config = [])
+    {
+        // ... inizializzazione prima della configurazione
+
+        parent::__construct($config);
+    }
+
+    public function init()
+    {
+        parent::init();
+
+        // ... inizializzazione dopo la configurazione
+    }
+}
+```
+
+Nell'esempio sopra, l'ultimo parametro del costruttore riceve l'array di configurazione che contiene coppie di nome-valore per
+inizializzare le proprietà alla fine del costruttore.
+Puoi sovrascrivere il metodo [[yii\base\Object::init()|init()]] per eseguire operazioni dopo che la configurazione è stata applicata.
+
+Seguendo questa convenzione potrai creare e configurare nuovi oggetti usando un array di configurazione:
+
+```php
+$object = Yii::createObject([
+    'class' => 'MyClass',
+    'proprieta1' => 'abc',
+    'proprieta2' => 'cde',
+], [$param1, $param2]);
+```
+
+Maggiori dettagli sulla configurazione si trovano nella sezione [Configurazione oggetti](concept-configurations.md).
+
+
+Eventi
+------
+
+In Yii 1 gli eventi venivano creati definendo un metodo `on`-qualcosa (ad es. `onBeforeSave`). In Yii 2 ora puoi usare un qualunque
+nome per l'evento. Puoi scatenare un evento chiamando il metodo [[yii\base\Component::trigger()|trigger()]]:
+
+```php
+$event = new \yii\base\Event;
+$component->trigger($eventName, $event);
+```
+
+Per collegare un metodo ad un evento usa il metodo [[yii\base\Component::on()|on()]]:
+
+```php
+$component->on($eventName, $handler);
+// Per scollegare il metodo dall'evento, usa:
+// $component->off($eventName, $handler);
+```
+
+Ci sono molti miglioramenti sulle funzionalità degli eventi. Per maggiori dettagli fai riferimento alla sezione
+[Eventi](concept-events.md).
+
+
+Alias percorsi
+--------------
+
+Yii 2.0 espande l'utilizzo degli alias di percorso (Path alias, in inglese) a file e directory sia locali che remoti (URL). Yii 2.0
+richiede ora che un percorso alias inizi con il carattere `@`, per differenziarli da normali percorsi o URL.
+Per esempio, l'alias `@yii` si riferisce alla directory di installazione di Yii. Gli alias di percorso sono supportati nella maggior
+parte del codice base di Yii. Per esempio, [[yii\caching\FileCache::cachePath]] può ricevere sia un alias che un percorso normale ad 
+una directory.
+
+Un alias di percorso è strettamente legato al namespace della classe. Si saccomanda di definire un alias per ogni namespace root, 
+consentendo così di usare le funzioni di autoload di Yii senza configurazioni aggiuntive. Per esempio, visto che `@yii` si riferisce
+alla directory di instllazione di Yii, una classe come `yii\web\Request` può essere caricata automaticamente. Se usi una libreria di terze
+parti, come ad esempio il framework Zend, puoi definire un alias `@Zend` che si riferisce alla sua directory di installazione. Fatto
+questo, Yii sarà in grado di caricare automaticamente qualunque classe della libreria Zend.
+
+Maggiori informazioni sugli alias di percorso nella sezione [Aliase](concept-aliases.md).
+
+
+Viste
+-----
+
+Il cambiamento più evidente riguardante le viste è che in Yii 2 la variabile speciale `$this` in una vista non si riferisce più
+al controller o al widget corrente. Invece `$this` si riferisce ora all'oggetto *view*, un nuovo concetto introdotto nella versione 2.0.
+L'oggetto *view* è di tipo [[yii\web\View]], che rappresenta la parte della vista nel modello MVC. Per accedere al controller o al 
+widget dalla vista, puoi usare `$this->context`.
+
+Per effettuare il render di una vista parzioale all'interno di un'altra vista devi usare `$this->render()`, non `$this->renderPartial()`. 
+La chiamata a `render` deve essere ora esplicitamente mandata in output (tramite `echo`), dato che ora il metodo `render()` restituisce
+il risultato dell'elaborazione della vista piuttosto che visualizzarlo. Per esempio:
+
+```php
+echo $this->render('_item', ['item' => $item]);
+```
+
+Oltre ad usare PHP come linguaggio principale di template, Yii 2.0 supporta ufficialmente anche altri due motori di template:
+Smarty e Twig. Il motore Prado non è più supportato.
+Per usare questi engine devi configurare il componente `view` impostando la proprietà [[yii\base\View::$renderers|View::$renderers]]. 
+Fai riferimento alla sezione [Template Engine](tutorial-template-engines.md) per maggiori dettagli.
+
+
+Modelli
+-------
+
+Yii 2.0 usa [[yii\base\Model]] come modello base, simile a `CModel` di 1.1.
+La classe `CFormModel` è stata rimossa. In Yii 2 invece devi estendere [[yii\base\Model]] per creare un modello da impiegare in un form.
+
+Yii 2.0 introduce il nuovo metodo [[yii\base\Model::scenarios()|scenarios()]] per dichiarare gli scenari supportati, e per indicare
+in quale scenario devono essere validati gli attributi, se devono essere considerati *safe* o no, e così via. PEr esempio:
+
+```php
+public function scenarios()
+{
+    return [
+        'backend' => ['email', 'role'],
+        'frontend' => ['email', '!role'],
+    ];
+}
+```
+
+Nell'esempio sopra sono stati definiti due scenari: `backend` e `frontend`. Per lo scenario `backend` sono considerati sicuri (`safe`)
+entrambi gli attributi `email` e `role`, e possono essere assegnati massivamente. Per lo scenario `frontend` l'`email` può essere
+assegnata in sicurezza mentre il `role` no. Entrambi i campi dovrebbero essere validati usando regole opportune.
+
+Viene ancora usato il metodo [[yii\base\Model::rules()|rules()]] per definire le regole di validazione. Nota che in conseguenza 
+dell'introduzione del metodo [[yii\base\Model::scenarios()|scenarios()]] non esiste più la validazione `unsafe`.
+
+Nella maggior parte dei casi non avrai la necessità di sovrascrivere [[yii\base\Model::scenarios()|scenarios()]] se il metodo
+[[yii\base\Model::rules()|rules()]] specifica già tutti gli scenari esistenti, e se non hai necessità di dichiarare attributi `unsafe`.
+
+Per apprendere più dettagli in merito ai modelli, fare riferimento alla sezione [Modelli](structure-models.md).
+
+
+Controller
+----------
+
+Yii 2.0 use [[yii\web\Controller]] come classe base per i controller, che è simile a `CController` di Yii 1.1.
+[[yii\base\Action]] è la classe base per le classi di azioni.
+
+L'impatto più ovvio di questi cambiamenti nel tuo codice è che l'azione di un controller deve tornare il contenuto da visualizzare, invece
+di emetterlo direttamente:
+
+```php
+public function actionView($id)
+{
+    $model = \app\models\Post::findOne($id);
+    if ($model) {
+        return $this->render('view', ['model' => $model]);
+    } else {
+        throw new \yii\web\NotFoundHttpException;
+    }
+}
+```
+
+Fai riferimento alla sezione [Controller](structure-controllers.md) per maggiori dettagli in merito.
+
+
+Widget
+------
+
+Yii 2.0 use [[yii\base\Widget]] come classe base per i widget, simile a `CWidget` di Yii 1.1.
+
+Per ottenere un supporto migliore al framework usando le IDE, Yii 2.0 introduce una nuova sintassi per l'utilizzo dei widget. Sono stati
+introdotti i metodi statici [[yii\base\Widget::begin()|begin()]], [[yii\base\Widget::end()|end()]], e [[yii\base\Widget::widget()|widget()]]
+da usare così:
+
+```php
+use yii\widgets\Menu;
+use yii\widgets\ActiveForm;
+
+// Nota che devi emettere a video ("echo") il risultato per visualizzarlo
+echo Menu::widget(['items' => $items]);
+
+// Passaggio di un array per inizializzare le proprietà dell'oggetto
+$form = ActiveForm::begin([
+    'options' => ['class' => 'form-horizontal'],
+    'fieldConfig' => ['inputOptions' => ['class' => 'input-xlarge']],
+]);
+... campi di input del form ...
+ActiveForm::end();
+```
+
+Fai riferimento alla sezione [Widget](structure-widgets.md) per maggiori dettagli.
+
+
+Temi
+----
+
+I temi sono completamente diversi nella versione 2.0. Ora sono basati su un meccanismo di mappatura dei percorsi, in modo da 
+creare una corrispondenza tra il percorso di un file vista sorgente e il percorso di un file di vista del tema. Per esempio se la mappa
+è `['/web/views' => '/web/themes/basic']`, la versione personalizzata del tema del file 
+`/web/views/site/index.php` sarà `/web/themes/basic/site/index.php`. Per questo motivo ora i temi possono essere applicati a qualunque
+file di vista, anche per una vista elaborata al di fuori del contesto di un controller o di un widget.
+
+Inoltre non c'è più il componente`CThemeManager`. Esiste invece una proprietà configurabile `theme` del componente `view`.
+
+Fai rfierimento alla sezione [Temi](output-theming.md) per maggiori dettagli.
+
+
+Applicazioni da console
+-----------------------
+
+Le applicazioni da console (linea di comando) sono ora organizzate come controller, come le applicazioni web. I controller devono quindi
+estendere [[yii\console\Controller]], simile alla classe `CConsoleCommand` della versione 1.1.
+
+Per eseguire un comando da terminale usare `yii <route>`, dove `<route>` rappresenta la rotta di un controller
+(es. `sitemap/index`). I parametri anonimi aggiuntivi vengono passati come parametri al relativo metodo dell'azione nel controller, mentre
+i parametri specifici (con nome) vengono processati secondo le specifiche di [[yii\console\Controller::options()]].
+
+Yii 2.0 supporta la generazione automatica dell'help dei comandi prelevando le informazioni dai blocchi di commento.
+
+Fai riferimento alla sezione [Console Commands](tutorial-console.md) per ulteriori dettagli.
+
+
+I18N
+----
+
+Yii 2.0 ha rimosso la formattazione interna di date e numeri in favore del [modulo PECL di PHP](http://pecl.php.net/package/intl).
+
+La traduzione dei messaggi viene effettuata dal componente `i18n`.
+Questo componente gestisce una serie di sorgenti di messaggi, il che ti consente di usare diverse sorgenti di messaggio basate sulle
+categorie.
+
+Fai riferimento alla sezione [Internazionalizzazione](tutorial-i18n.md) per maggiori dettagli.
+
+
+Filtri azioni
+-------------
+
+I filtri sulle azioni vengono ora implementati tramite i *behavior*. Per definire un nuovo filtro personalizzato devi estendere da 
+[[yii\base\ActionFilter]]. Per usare un filtro collega la relativa classe ai *behavior* del controller. Per esempio, per usare 
+il filtro [[yii\filters\AccessControl]] dovrai avere questo codice nel controller:
+
+```php
+public function behaviors()
+{
+    return [
+        'access' => [
+            'class' => 'yii\filters\AccessControl',
+            'rules' => [
+                ['allow' => true, 'actions' => ['admin'], 'roles' => ['@']],
+            ],
+        ],
+    ];
+}
+```
+
+Fai riferimento alla sezione [Filtri](structure-filters.md) per maggiori dettagli.
+
+
+Asset
+-----
+
+Yii 2.0 introduce un nuovo concetto chiamato *asset bundle* che rimpiazza il concetto dei pacchetti di script di Yii 1.1.
+
+Un *asset bundle* è una collezione di file di asset (ad es. file Javascript, CSS, immagini...) all'interno di una directory.
+Ogni *asset bundle* è rappresentato da una classe che estende [[yii\web\AssetBundle]].
+Registrando un *asset bundle* tramite il metodo [[yii\web\AssetBundle::register()]], renderai disponibile gli asset di quel pachetto
+disponibili via web. Diversamente da Yii 1.1 la pagina che registra il pacchetto conterrà automaticamente le referenze ai file Javascript
+e CSS specificati al suo interno.
+
+Fai riferimento alla sezione [Gestione asset](structure-assets.md) per maggiori informazioni.
+
+
+Helper
+------
+
+Yii 2.0 introduce molte classi statiche di uso comune, tra cui:
+
+* [[yii\helpers\Html]]
+* [[yii\helpers\ArrayHelper]]
+* [[yii\helpers\StringHelper]]
+* [[yii\helpers\FileHelper]]
+* [[yii\helpers\Json]]
+
+Fai riferimento alla sezione [Panoramica sugli Helper](helper-overview.md) per maggiori dettagli.
+
+Form
+----
+
+Yii 2.0 introduce il concetto di *campo* per la costruzione dei form usando [[yii\widgets\ActiveForm]]. Un campo è un
+contentitore costituito da un'etichetta, un input, un messaggio di errore e/o un testo di suggerimento.
+Un campo è rappresentato come un oggetto [[yii\widgets\ActiveField|ActiveField]].
+Usando i campi potrai creare un form in un modo molto più pulito che in precedenza:
+
+```php
+<?php $form = yii\widgets\ActiveForm::begin(); ?>
+    <?= $form->field($model, 'username') ?>
+    <?= $form->field($model, 'password')->passwordInput() ?>
+    <div class="form-group">
+        <?= Html::submitButton('Login') ?>
+    </div>
+<?php yii\widgets\ActiveForm::end(); ?>
+```
+
+Fai riferimento alla sezione [Creazione form](input-forms.md) per maggiori dettagli.
+
+
+Query Builder
+-------------
+
+In 1.1 la costruzione di query era dispersa in diverse classi, inclusa `CDbcommand`, 
+`CDbCriteria`, e `CDbCommandBuilder`. Yii 2.0 gestisce le query mediante un oggetto [[yii\db\Query|Query]] 
+che può essere trasformato in un comando SQL con l'aiuto di [[yii\db\QueryBuilder|QueryBuilder]] dietro le quinte.
+Per esempio:
+
+```php
+$query = new \yii\db\Query();
+$query->select('id, nome')
+      ->from('user')
+      ->limit(10);
+
+$comando = $query->createCommand();
+$sql = $command->sql;
+$righe = $command->queryAll();
+```
+
+Ma la cosa migliore di tutte è che gli stessi metodi di costruzione delle query possono essere usati con oggetti di
+tipo [Active Record](db-active-record.md).
+
+Fai riferimento alla sezione [Query Builder](db-query-builder.md) per maggiori dettagli.
+
+
+Active Record
+-------------
+
+Yii 2.0 introduce molti cambiamenti agli [Active Record](db-active-record.md). I due più evidenti riguardano la costruzione delle
+query e la gestione delle relazioni.
+
+La classe `CDbCriteria` della versione 1.1 è stata rimpiazzata da [[yii\db\ActiveQuery]]. Questa classe estende [[yii\db\Query]], e
+ne eredita quindi tutti i metodi di costruzione delle query. Per iniziare la costruzione di una query devi chiamare 
+[[yii\db\ActiveRecord::find()]]:
+
+```php
+// Per ottenere tutti i clienti *attivi* e ordinarli per ID:
+$clienti = Clienti::find()
+    ->where(['stato' => $attivo])
+    ->orderBy('id')
+    ->all();
+```
+
+Per dichiarare una relazione devi semplicemente definire una *getter* che ritorna un oggetto [[yii\db\ActiveQuery|ActiveQuery]].
+Il nome della proprietà definito dalla *getter* rappresenta il nome della relazione. Ad esempio il codice qui di seguito dichiara
+una relazione `ordini` (in 1.1 avresti dovuto farlo nel metodo `relations()`):
+
+```php
+class Cliente extends \yii\db\ActiveRecord
+{
+    public function getOrdini()
+    {
+        return $this->hasMany('Ordine', ['cliente_id' => 'id']);
+    }
+}
+```
+
+Ora puoi usare `$cliente->ordini` per accedere agli ordini del cliente nella tabella collegata. Puoi usare anche questo codice
+per effettuare una query relazionale al volo con una condizione di ricerca personalizzata:
+
+```php
+$ordini = $cliente->getOrdini()->andWhere('stato=1')->all();
+```
+
+Quando si usa il caricamento immediato di una relazione, Yii 2.0 si comporta diversamente rispetto alla versione precedente. In
+particolare, Yii 1.1 creava una query con JOIN con sia il record primario che la relazione. In Yii 2.0 vengono invece eseguite due
+query SQL distinte, senza JOIN: la prima carica le righe della tabella primaria e la seconda recupera le righe della tabella in relazione
+basandosi sulle chiavi ottenute dalla prima.
+
+Invece di tornare oggetti [[yii\db\ActiveRecord|ActiveRecord]], puoi sfruttare il metodo [[yii\db\ActiveQuery::asArray()|asArray()]]
+in caso di query che tornano un cospicuo numero di risultati. In questo modo i risultati saranno in formato di array, il che consente
+di risparmiare l'utilizzo di CPU e memoria in caso di grandi volumi di record. Per esempio:
+
+```php
+$clienti = Cliente::find()->asArray()->all();
+```
+
+Un'altra differenza è che non puoi più definire valori predefiniti per gli attributi tramite proprietà pubbliche.
+Se ti servono li puoi impostare nel metodo `init` della tua classe ActiveRecord.
+
+```php
+public function init()
+{
+    parent::init();
+    $this->stato = self::STATO_NUOVO;
+}
+```
+
+Nella versione precedente c'erano problemi nell'override del costruttore di un ActiveRecord. Questi problemi sono stati risolti 
+in questa versione. Tieni presente che se devi aggiungere parametri al costruttore devi probabilmente sovrascrivere 
+[[yii\db\ActiveRecord::instantiate()]].
+
+Ci sono molti altri cambiamenti e miglioramenti sugli Active Record. Fai riferimento alla sezione
+[Active Record](db-active-record.md) per maggiori dettagli.  
+
+
+Behavior di Active Record 
+-------------------------
+
+Nella 2.0 è stata rimossa la classe base `CActiveRecordBehavior`. Per creare un nuovo behavior devi estendere direttamente
+`yii\base\Behavior`. Se la classe deve gestire degli eventi dell'*owner*, devi sovrascrivere il metodo `events()` come qui di seguito:
+
+```php
+namespace app\components;
+
+use yii\db\ActiveRecord;
+use yii\base\Behavior;
+
+class MioBehavior extends Behavior
+{
+    // ...
+
+    public function events()
+    {
+        return [
+            ActiveRecord::EVENT_BEFORE_VALIDATE => 'beforeValidate',
+        ];
+    }
+
+    public function beforeValidate($event)
+    {
+        // ...
+    }
+}
+```
+
+
+Utenti e IdentityInterface
+--------------------------
+
+La classe `CWebUser` di Yii 1.1 è stata rimpiazzata da [[yii\web\User]], e non esiste più la 
+`CUserIdentity`. In Yii 2.0 devi implementare [[yii\web\IdentityInterface]] che risulterà molto più immediata da usare.
+Il template dell'applicazione avanzata fornisce un esempio di implementazione di quella libreria.
+
+Fai riferimento alle sezioni [Autenticazione](security-authentication.md), [Autorizzazione](security-authorization.md) e 
+[Template applicazione avanzata](tutorial-advanced-app.md) per maggiori informazioni.
+
+
+Gestione degli URL
+------------------
+
+La gestione degli URL è molto simile a quella implementata in Yii 1.1. Uno dei miglioramenti più rilevanti è che ora sono supportati
+i parametri. Per esempio, una regola dichiarata come qui di seguito prenderà sia `post/popolari` che `post/1/popolari`. Nella 1.1
+ci sarebbero volute due regole per lo stesso risultato.
+
+```php
+[
+    'pattern' => 'post/<page:\d+>/<tag>',
+    'route' => 'post/index',
+    'defaults' => ['page' => 1],
+]
+```
+
+Fai riferimento alla sezione [Url manager](runtime-url-handling.md) per ulteriori dettagli.
+
+Usare Yii 1.1 e 2.x insieme
+---------------------------
+
+Se hai del vecchio codice scritto per Yii 1.1 che vuoi usare insieme a Yii 2.0, fai riferimento alla sezione
+[Usare Yii 1.1 e 2.0 insieme](tutorial-yii-integration.md).
+
diff --git a/docs/guide-it/start-installation.md b/docs/guide-it/start-installation.md
new file mode 100644
index 0000000..7745175
--- /dev/null
+++ b/docs/guide-it/start-installation.md
@@ -0,0 +1,210 @@
+Installare Yii
+==============
+
+Puoi installare Yii in due modi, usando [Composer](http://getcomposer.org/) o scaricando un archivio.
+Il metodo preferito è il primo, perché ti consente di installare [estensioni](structure-extensions.md) o aggiornare il core di Yii 
+semplicemente eseguendo un comando.
+
+> Nota: diversamente da Yii 1, le installazioni standard di Yii 2 comportano il download e l'installazione sia del framework che dello scheletro dell'applicazione
+
+
+Installazione via Composer <a name="installing-via-composer"></a>
+--------------------------
+
+Se non hai già installato Composer puoi farlo seguendo le istruzioni al sito 
+[getcomposer.org](https://getcomposer.org/download/). Su Linux e Mac OS X puoi installare Composer con questo comando:
+
+    curl -s http://getcomposer.org/installer | php
+    mv composer.phar /usr/local/bin/composer
+
+Su Windows devi scaricare ed eseguire [Composer-Setup.exe](https://getcomposer.org/Composer-Setup.exe).
+
+Fai riferimento alla [documentazione di Composer](https://getcomposer.org/doc/) in casodi errori o se vuoi apprendere maggiori
+informazioni sull'uso di Composer.
+
+Se hai già Composer installato assicurati di avere una versione aggiornata. Puoi aggiornare Composer con il comando
+`composer self-update`.
+
+Una volta installato Composer, puoi installare Yii eseguendo questo comando in una directory accessbile via web:
+
+    composer global require "fxp/composer-asset-plugin:1.0.0-beta2"
+    composer create-project --prefer-dist yiisoft/yii2-app-basic basic
+
+Il primo comando installa il [plugin composer asset](https://github.com/francoispluchino/composer-asset-plugin/)
+che consente di gestire le dipendenze di bower e npm tramite Composer. Devi eseguire questo comando solo una volta. Il secondo 
+installa Yii in una directory di nome `basic`. Puoi scegliere un nome diverso, se preferisci.
+
+> Nota: durante l'installazione potrebbe essere che Composer ti chieda le credenziali di Github, per superato limite di utilizzo
+> delle API di Github. Questa situazione è normale perché Composer deve scaricare molte informazioni per tutti i pacchetti da Github.
+> Accedendo a Github aumenterà il limite di utilizzo delle API, consentendo a Composer di completare il suo lavoro. Per maggiori 
+> dettagli fai riferimento alla 
+> [documentazione di Composer](https://getcomposer.org/doc/articles/troubleshooting.md#api-rate-limit-and-oauth-tokens).
+
+> Suggerimento: se vuoi installare l'ultima versione di sviluppo di Yii, puoi usare questo comando che aggiunge una 
+> [opzione di stabilità](https://getcomposer.org/doc/04-schema.md#minimum-stability):
+>
+>     composer create-project --prefer-dist --stability=dev yiisoft/yii2-app-basic basic
+>
+> Considera che la versione di sviluppo di Yii non dovrebbe essere utilizzata per siti di produzione perché potrebbe rendere instabile
+> il tuo codice.
+
+
+Installazione da un archivio <a name="installing-from-archive-file"></a>
+----------------------------
+
+L'installazione da un archivio compresso comporta tre passaggi:
+
+1. Scaricare l'archivio da [yiiframework.com](http://www.yiiframework.com/download/).
+2. Scompattare l'archivio in una directory accessible via web.
+3. Modificare il file `config/web.php` inserendo una chiave segreta per il parametro di configurazione `cookieValidationKey` 
+   (questa operazione viene fatta automaticamente se installi tramite Composer):
+
+   ```php
+   // !!! insert a secret key in the following (if it is empty) - this is required by cookie validation
+   'cookieValidationKey' => 'enter your secret key here',
+   ```
+
+
+Altre modalità di installazione <a name="other-installation-options"></a>
+-------------------------------
+
+Le istruzioni sopra elencate mostrano come installare Yii, e creano inoltre un'applicazione web base funzionante.
+Questo approccio è un ottimo punto di partenza per progetti minori, o se stai imparando Yii.
+
+Ma ci sono altre opzioni disponibili per l'installazione:
+
+* se vuoi installare solo il core e costruire l'applocazione da zero puoi seguire le istruzioni della sezione
+  [costruire un'applicazione da zero](tutorial-start-from-scratch.md).
+* se vuoi avviare un'applicazione più sofisticata, che meglio si sposa per uno sviluppo di gruppo, puoi considerare l'insallazione del
+  [template di applicazione avanzata](tutorial-advanced-app.md).
+
+
+Verifica dell'installazione <a name="verifying-installation"></a>
+---------------------------
+
+Dopo l'installazione puoi usare il tuo browser per accedere all'applicazione Yii installata con l'URL seguente:
+
+```
+http://localhost/basic/web/index.php
+```
+
+Questo indirizzo assume che hai installato Yii in una directory di nome `basic`, direttamente nella *root* del tuo webserver,
+e che il webserver è in esecuzione sulla tua macchina locale (`localhost`). Potresti doverlo modificare a seconda del tuo ambiente
+di installazione.
+
+![Installazione di Yii completata con successo](images/start-app-installed.png)
+
+Dovresti vedere la pagina sopra di congratulazioni. In caso contrario verifica se la tua installazione di PHP soddisfa i requisiti minimi
+di Yii. Puoi verificare le richieste in due modi:
+
+* accedere all'indirizzo `http://localhost/basic/requirements.php` tramite browser;
+* lanciando questi comandi:
+
+  ```
+  cd basic
+  php requirements.php
+  ```
+
+Devi configurare la tua installazione di PHP in modo che soddisfi le richieste minime di Yii. E' molto importante che tu stia usando 
+PHP 5.4 o successivo. Devi inoltre installare le [estensioni PDO di PHP](http://www.php.net/manual/en/pdo.installation.php) e un driver
+di database di PDO (come ad esempio `pdo_mysql` per i database MySQL), se la tua applicazione richiede un database.
+
+
+Configurazione del webserver <a name="configuring-web-servers"></a>
+----------------------------
+
+> Informazione: puoi saltare questa parte per ora se stai solo provando Yii e non hai intenzione di installarlo su un server di produzione.
+
+L'applicazione installata secondo le istruzioni sopra dovrebbe funzionare senza problemi su un server 
+[Apache](http://httpd.apache.org/) o [Nginx](http://nginx.org/), su Windows, Mac OS X, or Linux equipaggiati con PHP 5.4 o successivo. 
+Yii 2.0 è anche compatibile con le librerie [HHVM](http://hhvm.com/) di Facebook, tuttavia ci sono alcuni casi limite dove HHVM si
+comporta diversamente dal PHP nativo, quindi devi avere maggiore cura se intendi usare HHVM.
+
+Su un server di produzione vorrai probabilmente che la tua applicazione sia accessibile tramite l'url 
+`http://www.example.com/index.php` invece di `http://www.example.com/basic/web/index.php`. Questo risultato richiede che punti la
+*document root* del tuo webserver nella directory `basic/web`. Vorrai magari anche nascondere `index.php` dall'URL, come descritto
+nella sezione [analizzare e generare URL](runtime-url-handling.md).
+In questa parte vedrai configurare il tuo server Apache o Nginx per ottenere questo risultato.
+
+> Informazione: impostando `basic/web` come *document root* impedisci agli utenti finali di accedere al codice e a file/informazioni
+riservate memorizzate nelle directory superiori a `basic/web`. Negare l'accesso a queste altre cartelle è sicuramente un vantaggio
+per la sicurezza.
+
+> Informazione: se la tua applicazione andrà installata su un servizio di hosting condiviso non avrai il permesso di modificare la
+configurazione del webserver, ma dovrai comunque correggere la struttura della tua applicazione per migliorare la sicurezza. Fai 
+riferimento alla sezione [ambienti di hosting condiviso](tutorial-shared-hosting.md) per maggiori dettagli.
+
+
+### Configurazione consigliata di Apache <a name="recommended-apache-configuration"></a>
+
+Usa questa configurazione nel file `httpd.conf` di Apache o nella definizione del tuo *VirtualHost*. Tieni presente che dovrai
+modificare `path/to/basic/web` con il percorso reale della tua `basic/web`.
+
+```
+# Imposta *DocumentRoot* per essere "basic/web"
+DocumentRoot "path/to/basic/web"
+
+<Directory "path/to/basic/web">
+    # usa mod_rewrite per gli url SEF
+    RewriteEngine on
+    # If a directory or a file exists, use the request directly
+    RewriteCond %{REQUEST_FILENAME} !-f
+    RewriteCond %{REQUEST_FILENAME} !-d
+    # Otherwise forward the request to index.php
+    RewriteRule . index.php
+
+    # ...altre impostazioni...
+</Directory>
+```
+
+
+### Configurazione consigliata di Nginx <a name="recommended-nginx-configuration"></a>
+
+Devi aver installato PHP con il demone [FPM](http://php.net/install.fpm) per usare [Nginx](http://wiki.nginx.org/).
+Usa questa configurazione per Nginx, sostituendo `path/to/basic/web` con il percorso reale di `basic/web` e `mysite.local` con
+il nome reale del server web.
+
+```
+server {
+    charset utf-8;
+    client_max_body_size 128M;
+
+    listen 80; ## listen for ipv4
+    #listen [::]:80 default_server ipv6only=on; ## listen for ipv6
+
+    server_name mysite.local;
+    root        /path/to/basic/web;
+    index       index.php;
+
+    access_log  /path/to/basic/log/access.log main;
+    error_log   /path/to/basic/log/error.log;
+
+    location / {
+        # Redirect everything that isn't a real file to index.php
+        try_files $uri $uri/ /index.php?$args;
+    }
+
+    # uncomment to avoid processing of calls to non-existing static files by Yii
+    #location ~ \.(js|css|png|jpg|gif|swf|ico|pdf|mov|fla|zip|rar)$ {
+    #    try_files $uri =404;
+    #}
+    #error_page 404 /404.html;
+
+    location ~ \.php$ {
+        include fastcgi.conf;
+        fastcgi_pass   127.0.0.1:9000;
+        #fastcgi_pass unix:/var/run/php5-fpm.sock;
+        try_files $uri =404;
+    }
+
+    location ~ /\.(ht|svn|git) {
+        deny all;
+    }
+}
+```
+
+Usando questa configurazione dovresti anche impostare `cgi.fix_pathinfo=0` in `php.ini` per evitare molte chiamate di sistema `stat()` 
+inutili.
+
+Inoltre considera che nel caso di server HTTPS dovrai aggiungere `fastcgi_param HTTPS on;` così che Yii possa correttamente rilevare
+se la connessione è sicura.
diff --git a/docs/guide-ja/README.md b/docs/guide-ja/README.md
new file mode 100644
index 0000000..ef111fe
--- /dev/null
+++ b/docs/guide-ja/README.md
@@ -0,0 +1,201 @@
+Yii 2.0 公式ガイド
+==================
+
+このチュートリアルは [Yii ドキュメンテーション規約](http://www.yiiframework.com/doc/terms/) の下に
+リリースされています。
+
+All Rights Reserved.
+
+2014 (c) Yii Software LLC.
+
+
+前書き
+------
+
+* [Yii について](intro-yii.md)
+* [バージョン 1.1 からのアップグレード](intro-upgrade-from-v1.md)
+
+
+始めよう
+--------
+
+* [Yii をインストールする](start-installation.md)
+* [アプリケーションを走らせる](start-workflow.md)
+* [ハローと言う](start-hello.md)
+* [フォームを扱う](start-forms.md)
+* [データベースを扱う](start-databases.md)
+* [Gii でコードを生成する](start-gii.md)
+* [この先を見る](start-looking-ahead.md)
+
+
+アプリケーションの構造
+----------------------
+
+* [概要](structure-overview.md)
+* [エントリースクリプト](structure-entry-scripts.md)
+* [アプリケーション](structure-applications.md)
+* [アプリケーションコンポーネント](structure-application-components.md)
+* [コントローラ](structure-controllers.md)
+* [モデル](structure-models.md)
+* [ビュー](structure-views.md)
+* [モジュール](structure-modules.md)
+* [フィルター](structure-filters.md)
+* [ウィジェット](structure-widgets.md)
+* [アセット](structure-assets.md)
+* [エクステンション](structure-extensions.md)
+
+
+リクエストの処理
+----------------
+
+* [概要](runtime-overview.md)
+* [ブートストラッピング](runtime-bootstrapping.md)
+* [ルーティング](runtime-routing.md)
+* [リクエスト](runtime-requests.md)
+* [レスポンス](runtime-responses.md)
+* [セッションとクッキー](runtime-sessions-cookies.md)
+* [URL の解析と生成](runtime-url-handling.md)
+* [エラー処理](runtime-handling-errors.md)
+* [ログ](runtime-logging.md)
+
+
+鍵となる概念
+------------
+
+* [コンポーネント](concept-components.md)
+* [プロパティ](concept-properties.md)
+* [イベント](concept-events.md)
+* [ビヘイビア](concept-behaviors.md)
+* [設定](concept-configurations.md)
+* [エイリアス](concept-aliases.md)
+* [クラスのオートロード](concept-autoloading.md)
+* [サービスロケータ](concept-service-locator.md)
+* [依存性注入コンテナ](concept-di-container.md)
+
+
+データベースの取り扱い
+----------------------
+
+* [データアクセスオブジェクト](db-dao.md): データベースへの接続、基本的なクエリ、トランザクション、および、スキーマ操作
+* [クエリビルダ](db-query-builder.md): シンプルな抽象レイヤを使ってデータベースに対してクエリを行う
+* [アクティブレコード](db-active-record.md): アクティブレコード ORM、レコードの読み出しと操作、リレーションの定義
+* [マイグレーション](db-migrations.md): チーム開発環境においてデータベースにバージョンコントロールを適用
+* **TBD** [Sphinx](db-sphinx.md)
+* **TBD** [Redis](db-redis.md)
+* **TBD** [MongoDB](db-mongodb.md)
+* **TBD** [ElasticSearch](db-elasticsearch.md)
+
+
+ユーザからのデータ取得
+----------------------
+
+* [フォームを作成する](input-forms.md)
+* [入力を検証する](input-validation.md)
+* [ファイルをアップロードする](input-file-upload.md)
+* **TBD** [複数モデルのためのデータ取得](input-multiple-models.md)
+
+
+データの表示
+------------
+
+* [データの書式設定](output-formatter.md)
+* **TBD** [ページネーション](output-pagination.md)
+* **TBD** [並べ替え](output-sorting.md)
+* [データプロバイダ](output-data-providers.md)
+* [データウィジェット](output-data-widgets.md)
+* [クライアントスクリプトを使う](output-client-scripts.md)
+* [テーマを使う](output-theming.md)
+
+
+セキュリティ
+------------
+
+* [認証](security-authentication.md)
+* [権限](security-authorization.md)
+* [パスワードを扱う](security-passwords.md)
+* **TBD** [Auth クライアント](security-auth-clients.md)
+* **TBD** [最善の慣行](security-best-practices.md)
+
+
+キャッシュ
+----------
+
+* [概要](caching-overview.md)
+* [データキャッシュ](caching-data.md)
+* [断片キャッシュ](caching-fragment.md)
+* [ページキャッシュ](caching-page.md)
+* [HTTP Caching](caching-http.md)
+
+
+RESTful ウェブサービス
+----------------------
+
+* [クイックスタート](rest-quick-start.md)
+* [リソース](rest-resources.md)
+* [コントローラ](rest-controllers.md)
+* [ルーティング](rest-routing.md)
+* [レスポンスの書式設定](rest-response-formatting.md)
+* [認証](rest-authentication.md)
+* [速度制限](rest-rate-limiting.md)
+* [バージョン管理](rest-versioning.md)
+* [エラー処理](rest-error-handling.md)
+
+
+開発ツール
+----------
+
+* [デバッグツールバーとデバッガ](tool-debugger.md)
+* [Gii を使ってコードを生成する](tool-gii.md)
+* **TBD** [API ドキュメンテーションを生成する](tool-api-doc.md)
+
+
+テスト
+------
+
+* [概要](test-overview.md)
+* [テスト環境の構築](test-environment-setup.md)
+* [ユニットテスト](test-unit.md)
+* [機能テスト](test-functional.md)
+* [承認テスト](test-acceptance.md)
+* [フィクスチャ](test-fixtures.md)
+
+
+スペシャルトピック
+------------------
+
+* [アドバンストアプリケーションテンプレート](tutorial-advanced-app.md)
+* [アプリケーションを一から構築する](tutorial-start-from-scratch.md)
+* [コンソールコマンド](tutorial-console.md)
+* [コアのバリデータ](tutorial-core-validators.md)
+* [国際化](tutorial-i18n.md)
+* [メール](tutorial-mailing.md)
+* [パフォーマンスチューニング](tutorial-performance-tuning.md)
+* **TBD** [共有ホスト環境](tutorial-shared-hosting.md)
+* [テンプレートエンジン](tutorial-template-engines.md)
+* [サードパーティのコードを扱う](tutorial-yii-integration.md)
+
+
+ウィジェット
+------------
+
+* GridView: link to demo page
+* ListView: link to demo page
+* DetailView: link to demo page
+* ActiveForm: link to demo page
+* Pjax: link to demo page
+* Menu: link to demo page
+* LinkPager: link to demo page
+* LinkSorter: link to demo page
+* [Bootstrap ウィジェット](widget-bootstrap.md)
+* [Jquery UI ウィジェット](widget-jui.md)
+
+
+ヘルパー
+--------
+
+* [概要](helper-overview.md)
+* **TBD** [ArrayHelper](helper-array.md)
+* **TBD** [Html](helper-html.md)
+* **TBD** [Url](helper-url.md)
+* **TBD** [Security](helper-security.md)
+
diff --git a/docs/guide-ja/intro-yii.md b/docs/guide-ja/intro-yii.md
new file mode 100644
index 0000000..fd1adc8
--- /dev/null
+++ b/docs/guide-ja/intro-yii.md
@@ -0,0 +1,56 @@
+Yii とは何か
+============
+
+Yii は現代的なウェブアプリケーションを迅速に開発するための、高性能な、コンポーネントベースの PHP フレームワークです。
+Yii という名前 (`イー` すなわち `[ji:]` と発音します) は、中国語で「単純かつ進展的」であることを意味します。
+また **Yes It Is** の省略形であると考えることも出来ます。
+
+
+Yii は何に向いているか
+----------------------
+
+Yii は汎用的なウェブプログラミングフレームワークです。
+つまり、あらゆる種類のウェブアプリケーションを PHP を使って開発するときに、Yii を使用することが出来ます。
+コンポーネントベースのアーキテクチャと洗練されたキャッシュサポートを持っているため、Yii は大規模なアプリケーション、たとえば、ポータル、フォーラム、コンテンツマネージメントシステム (CMS)、電子商取引プロジェクト、RESTful ウェブサービス、等々を開発するのに特に適しています。
+
+
+Yii を他のフレームワークと比べるとどうか?
+-----------------------------------------
+
+あなたが既に他のフレームワークに親しんでいる場合は、Yii を比較するとどうなるのかを知りたいと思うでしょう:
+
+- ほとんどの PHP フレームワーク同様、Yii は MVC (Model-View-Controller) デザインパターンを実装し、このパターンに基いたコードの組織化を促進しています。
+- Yii は、コードはシンプルかつエレガントに書かれるべきである、という哲学を採用しています。
+  Yii は、何らかのデザインパターンを厳密に守ることを主たる目的として大袈裟な設計をすることは、決してしようとしません。
+- Yii は、検証済みで直ちに使える多数の機能を提供するフル装備のフレームワークです:
+  リレーショナルデータベースと NoSQL データベースの両方のためのクエリビルダとアクティブレコード; RESTful API 開発サポート; 多層構成のキャッシュサポート; その他諸々。
+- Yii は極めて拡張性の高いフレームワークです。あなたはコアのコードのほとんど全ての要素をカスタマイズしたり置き換えたりすることが出来ます。
+また、Yii の堅固なエクステンションアーキテクチャを利用して、再配布可能なエクステンションを使用したり開発したりすることも出来ます。
+- 高性能であることは常に Yii の主たる目的の一つです。
+
+Yii は「独演会」ではありません。Yii は [強力なコア開発チーム][] および Yii 開発に間断なく貢献してくれるプロフェッショナルの大きなコミュニティーに支えられたプロジェクトです。
+Yii 開発チームは最新のウェブ開発の潮流や、他のフレームワークやプロジェクトに見られる最善の慣行と機能から目を離しません。
+他のところで見られる関連性の高い最善の慣行と機能は定期的にコアフレームワークに組み込まれ、シンプルかつエレガントなインターフェイスを通じて公開されます。
+
+[強力なコア開発チーム]: http://www.yiiframework.com/about/
+
+Yii のバージョン
+----------------
+
+Yii は現在、利用可能な二つのメジャーバージョン、すなわち 1.1 と 2.0 を持っています。
+バージョン 1.1 は古い世代のもので、現在はメンテナンスモードにあります。
+バージョン 2.0 は、最新のテクノロジーとプロトコル、例えば、Composer、PSR、名前空間、トレイトなどを採用して、Yii を完全に書き直したものです。
+バージョン 2.0 がこのフレームワークの現在の世代を表すものであり、今後数年間にわたって主要な開発努力の対象となるものです。
+このガイドは主としてバージョン 2.0 について述べます。
+
+
+必要条件と前提条件
+------------------
+
+Yii 2.0 は PHP 5.4.0 以上を必要とします。
+個別の機能に対するさらに詳細な必要条件は、全ての Yii リリースに含まれている必要条件チェッカーを走らせることによって知ることが出来ます。
+
+Yii は純粋なオブジェクト指向のフレームワークですので、Yii を使うためにはオブジェクト指向プログラミング (OOP) の基本的な知識が必要とされます。
+また、Yii 2.0 は [名前空間](http://php.net/manual/ja/language.namespaces.php) や [トレイト](http://php.net/manual/ja/language.oop5.traits.php) のような PHP の最新の機能を利用しています。
+これらの概念を理解することは、Yii 2.0 を採用することをより一層容易にするでしょう。
+
diff --git a/docs/guide-pt-BR/README.md b/docs/guide-pt-BR/README.md
index d932b9f..e9b626d 100644
--- a/docs/guide-pt-BR/README.md
+++ b/docs/guide-pt-BR/README.md
@@ -23,9 +23,9 @@ Primeiros Passos
 * [Executando Aplicações](start-workflow.md)
 * [Como Fazer um "Hello World"](start-hello.md)
 * [Trabalhando com Formulários](start-forms.md)
-* [Trabalhando com Banco de Dados](start-databases.md)
+* [Trabalhando com Bancos de Dados](start-databases.md)
 * [Gerando Código com Gii](start-gii.md)
-* [Visão Geral](start-looking-ahead.md)
+* [Seguindo em Frente](start-looking-ahead.md)
 
 
 Estrutura de uma Aplicação
diff --git a/docs/guide-pt-BR/images/advanced-app-configs.graphml b/docs/guide-pt-BR/images/advanced-app-configs.graphml
new file mode 100644
index 0000000..05a053e
--- /dev/null
+++ b/docs/guide-pt-BR/images/advanced-app-configs.graphml
@@ -0,0 +1,436 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<graphml xmlns="http://graphml.graphdrawing.org/xmlns" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:y="http://www.yworks.com/xml/graphml" xmlns:yed="http://www.yworks.com/xml/yed/3" xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns http://www.yworks.com/xml/schema/graphml/1.1/ygraphml.xsd">
+  <!--Created by yFiles for Java 2.11-->
+  <key for="graphml" id="d0" yfiles.type="resources"/>
+  <key for="port" id="d1" yfiles.type="portgraphics"/>
+  <key for="port" id="d2" yfiles.type="portgeometry"/>
+  <key for="port" id="d3" yfiles.type="portuserdata"/>
+  <key attr.name="url" attr.type="string" for="node" id="d4"/>
+  <key attr.name="description" attr.type="string" for="node" id="d5"/>
+  <key for="node" id="d6" yfiles.type="nodegraphics"/>
+  <key attr.name="Beschreibung" attr.type="string" for="graph" id="d7"/>
+  <key attr.name="url" attr.type="string" for="edge" id="d8"/>
+  <key attr.name="description" attr.type="string" for="edge" id="d9"/>
+  <key for="edge" id="d10" yfiles.type="edgegraphics"/>
+  <graph edgedefault="directed" id="G">
+    <data key="d7"/>
+    <node id="n0" yfiles.foldertype="group">
+      <data key="d4"/>
+      <data key="d6">
+        <y:ProxyAutoBoundsNode>
+          <y:Realizers active="0">
+            <y:GroupNode>
+              <y:Geometry height="409.0" width="148.0" x="290.953299818952" y="148.6669921875"/>
+              <y:Fill color="#F5F5F5" transparent="false"/>
+              <y:BorderStyle color="#000000" type="dashed" width="1.0"/>
+              <y:NodeLabel alignment="right" autoSizePolicy="node_width" backgroundColor="#EBEBEB" borderDistance="0.0" fontFamily="Dialog" fontSize="15" fontStyle="plain" hasLineColor="false" height="22.37646484375" modelName="internal" modelPosition="t" textColor="#000000" visible="true" width="148.0" x="0.0" y="0.0">console</y:NodeLabel>
+              <y:Shape type="roundrectangle"/>
+              <y:State closed="false" closedHeight="50.0" closedWidth="50.0" innerGraphDisplayEnabled="false"/>
+              <y:Insets bottom="15" bottomF="15.0" left="15" leftF="15.0" right="15" rightF="15.0" top="15" topF="15.0"/>
+              <y:BorderInsets bottom="0" bottomF="0.0" left="0" leftF="0.0" right="0" rightF="0.0" top="0" topF="0.0"/>
+            </y:GroupNode>
+            <y:GroupNode>
+              <y:Geometry height="50.0" width="50.0" x="0.0" y="60.0"/>
+              <y:Fill color="#F5F5F5" transparent="false"/>
+              <y:BorderStyle color="#000000" type="dashed" width="1.0"/>
+              <y:NodeLabel alignment="right" autoSizePolicy="node_width" backgroundColor="#EBEBEB" borderDistance="0.0" fontFamily="Dialog" fontSize="15" fontStyle="plain" hasLineColor="false" height="22.37646484375" modelName="internal" modelPosition="t" textColor="#000000" visible="true" width="59.02685546875" x="-4.513427734375" y="0.0">Folder 4</y:NodeLabel>
+              <y:Shape type="roundrectangle"/>
+              <y:State closed="true" closedHeight="50.0" closedWidth="50.0" innerGraphDisplayEnabled="false"/>
+              <y:Insets bottom="5" bottomF="5.0" left="5" leftF="5.0" right="5" rightF="5.0" top="5" topF="5.0"/>
+              <y:BorderInsets bottom="0" bottomF="0.0" left="0" leftF="0.0" right="0" rightF="0.0" top="0" topF="0.0"/>
+            </y:GroupNode>
+          </y:Realizers>
+        </y:ProxyAutoBoundsNode>
+      </data>
+      <graph edgedefault="directed" id="n0:"/>
+    </node>
+    <node id="n1" yfiles.foldertype="group">
+      <data key="d4"/>
+      <data key="d6">
+        <y:ProxyAutoBoundsNode>
+          <y:Realizers active="0">
+            <y:GroupNode>
+              <y:Geometry height="409.0" width="148.0" x="310.2342794220951" y="167.0"/>
+              <y:Fill color="#F5F5F5" transparent="false"/>
+              <y:BorderStyle color="#000000" type="dashed" width="1.0"/>
+              <y:NodeLabel alignment="right" autoSizePolicy="node_width" backgroundColor="#EBEBEB" borderDistance="0.0" fontFamily="Dialog" fontSize="15" fontStyle="plain" hasLineColor="false" height="22.37646484375" modelName="internal" modelPosition="t" textColor="#000000" visible="true" width="148.0" x="0.0" y="0.0">backend</y:NodeLabel>
+              <y:Shape type="roundrectangle"/>
+              <y:State closed="false" closedHeight="50.0" closedWidth="50.0" innerGraphDisplayEnabled="false"/>
+              <y:Insets bottom="15" bottomF="15.0" left="15" leftF="15.0" right="15" rightF="15.0" top="15" topF="15.0"/>
+              <y:BorderInsets bottom="0" bottomF="0.0" left="0" leftF="0.0" right="0" rightF="0.0" top="0" topF="0.0"/>
+            </y:GroupNode>
+            <y:GroupNode>
+              <y:Geometry height="50.0" width="50.0" x="310.2342794220951" y="167.0"/>
+              <y:Fill color="#F5F5F5" transparent="false"/>
+              <y:BorderStyle color="#000000" type="dashed" width="1.0"/>
+              <y:NodeLabel alignment="right" autoSizePolicy="node_width" backgroundColor="#EBEBEB" borderDistance="0.0" fontFamily="Dialog" fontSize="15" fontStyle="plain" hasLineColor="false" height="22.37646484375" modelName="internal" modelPosition="t" textColor="#000000" visible="true" width="59.02685546875" x="-4.513427734375" y="0.0">Folder 3</y:NodeLabel>
+              <y:Shape type="roundrectangle"/>
+              <y:State closed="true" closedHeight="50.0" closedWidth="50.0" innerGraphDisplayEnabled="false"/>
+              <y:Insets bottom="5" bottomF="5.0" left="5" leftF="5.0" right="5" rightF="5.0" top="5" topF="5.0"/>
+              <y:BorderInsets bottom="0" bottomF="0.0" left="0" leftF="0.0" right="0" rightF="0.0" top="0" topF="0.0"/>
+            </y:GroupNode>
+          </y:Realizers>
+        </y:ProxyAutoBoundsNode>
+      </data>
+      <graph edgedefault="directed" id="n1:"/>
+    </node>
+    <node id="n2">
+      <data key="d6">
+        <y:ShapeNode>
+          <y:Geometry height="62.0" width="118.0" x="348.0" y="628.9999999999999"/>
+          <y:Fill color="#FFCC00" transparent="false"/>
+          <y:BorderStyle color="#000000" type="line" width="1.0"/>
+          <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.701171875" modelName="custom" textColor="#000000" visible="true" width="32.6875" x="42.65625" y="21.6494140625">index<y:LabelModel>
+              <y:SmartNodeLabelModel distance="4.0"/>
+            </y:LabelModel>
+            <y:ModelParameter>
+              <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
+            </y:ModelParameter>
+          </y:NodeLabel>
+          <y:Shape type="rectangle"/>
+        </y:ShapeNode>
+      </data>
+    </node>
+    <node id="n3" yfiles.foldertype="group">
+      <data key="d4"/>
+      <data key="d6">
+        <y:ProxyAutoBoundsNode>
+          <y:Realizers active="0">
+            <y:GroupNode>
+              <y:Geometry height="402.37646484375" width="148.0" x="333.0" y="188.62353515625"/>
+              <y:Fill color="#DDFFDD" transparent="false"/>
+              <y:BorderStyle color="#000000" type="line" width="1.0"/>
+              <y:NodeLabel alignment="right" autoSizePolicy="node_width" backgroundColor="#DDFFDD" borderDistance="0.0" fontFamily="Dialog" fontSize="15" fontStyle="plain" hasLineColor="false" height="22.37646484375" modelName="internal" modelPosition="t" textColor="#000000" visible="true" width="148.0" x="0.0" y="0.0">frontend</y:NodeLabel>
+              <y:Shape type="roundrectangle"/>
+              <y:State closed="false" closedHeight="50.0" closedWidth="50.0" innerGraphDisplayEnabled="false"/>
+              <y:Insets bottom="15" bottomF="15.0" left="15" leftF="15.0" right="15" rightF="15.0" top="15" topF="15.0"/>
+              <y:BorderInsets bottom="0" bottomF="0.0" left="0" leftF="0.0" right="0" rightF="0.0" top="0" topF="0.0"/>
+            </y:GroupNode>
+            <y:GroupNode>
+              <y:Geometry height="50.0" width="50.0" x="0.0" y="60.0"/>
+              <y:Fill color="#F5F5F5" transparent="false"/>
+              <y:BorderStyle color="#000000" type="dashed" width="1.0"/>
+              <y:NodeLabel alignment="right" autoSizePolicy="node_width" backgroundColor="#EBEBEB" borderDistance="0.0" fontFamily="Dialog" fontSize="15" fontStyle="plain" hasLineColor="false" height="22.37646484375" modelName="internal" modelPosition="t" textColor="#000000" visible="true" width="59.02685546875" x="-4.513427734375" y="0.0">Folder 1</y:NodeLabel>
+              <y:Shape type="roundrectangle"/>
+              <y:State closed="true" closedHeight="50.0" closedWidth="50.0" innerGraphDisplayEnabled="false"/>
+              <y:Insets bottom="5" bottomF="5.0" left="5" leftF="5.0" right="5" rightF="5.0" top="5" topF="5.0"/>
+              <y:BorderInsets bottom="0" bottomF="0.0" left="0" leftF="0.0" right="0" rightF="0.0" top="0" topF="0.0"/>
+            </y:GroupNode>
+          </y:Realizers>
+        </y:ProxyAutoBoundsNode>
+      </data>
+      <graph edgedefault="directed" id="n3:">
+        <node id="n3::n0">
+          <data key="d6">
+            <y:ShapeNode>
+              <y:Geometry height="62.0" width="118.0" x="348.0" y="226.0"/>
+              <y:Fill color="#FFCCCC" transparent="false"/>
+              <y:BorderStyle color="#000000" type="line" width="1.0"/>
+              <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.701171875" modelName="custom" textColor="#000000" visible="true" width="44.013671875" x="36.9931640625" y="21.6494140625">params<y:LabelModel>
+                  <y:SmartNodeLabelModel distance="4.0"/>
+                </y:LabelModel>
+                <y:ModelParameter>
+                  <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
+                </y:ModelParameter>
+              </y:NodeLabel>
+              <y:Shape type="rectangle"/>
+            </y:ShapeNode>
+          </data>
+        </node>
+        <node id="n3::n1">
+          <data key="d6">
+            <y:ShapeNode>
+              <y:Geometry height="62.0" width="118.0" x="348.0" y="322.0"/>
+              <y:Fill color="#FFCCCC" transparent="false"/>
+              <y:BorderStyle color="#000000" type="line" width="1.0"/>
+              <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.701171875" modelName="custom" textColor="#000000" visible="true" width="72.689453125" x="22.6552734375" y="21.6494140625">params-local<y:LabelModel>
+                  <y:SmartNodeLabelModel distance="4.0"/>
+                </y:LabelModel>
+                <y:ModelParameter>
+                  <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
+                </y:ModelParameter>
+              </y:NodeLabel>
+              <y:Shape type="rectangle"/>
+            </y:ShapeNode>
+          </data>
+        </node>
+        <node id="n3::n2">
+          <data key="d6">
+            <y:ShapeNode>
+              <y:Geometry height="62.0" width="118.0" x="348.0" y="418.0"/>
+              <y:Fill color="#99CCFF" transparent="false"/>
+              <y:BorderStyle color="#000000" type="line" width="1.0"/>
+              <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.701171875" modelName="custom" textColor="#000000" visible="true" width="30.009765625" x="43.9951171875" y="21.6494140625">main<y:LabelModel>
+                  <y:SmartNodeLabelModel distance="4.0"/>
+                </y:LabelModel>
+                <y:ModelParameter>
+                  <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
+                </y:ModelParameter>
+              </y:NodeLabel>
+              <y:Shape type="rectangle"/>
+            </y:ShapeNode>
+          </data>
+        </node>
+        <node id="n3::n3">
+          <data key="d6">
+            <y:ShapeNode>
+              <y:Geometry height="62.0" width="118.0" x="348.0" y="514.0"/>
+              <y:Fill color="#99CCFF" transparent="false"/>
+              <y:BorderStyle color="#000000" type="line" width="1.0"/>
+              <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.701171875" modelName="custom" textColor="#000000" visible="true" width="58.685546875" x="29.6572265625" y="21.6494140625">main-local<y:LabelModel>
+                  <y:SmartNodeLabelModel distance="4.0"/>
+                </y:LabelModel>
+                <y:ModelParameter>
+                  <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
+                </y:ModelParameter>
+              </y:NodeLabel>
+              <y:Shape type="rectangle"/>
+            </y:ShapeNode>
+          </data>
+        </node>
+      </graph>
+    </node>
+    <node id="n4">
+      <data key="d6">
+        <y:ShapeNode>
+          <y:Geometry height="62.0" width="223.21580824827026" x="7.0" y="628.9999999999999"/>
+          <y:Fill color="#ADF4A6" transparent="false"/>
+          <y:BorderStyle color="#000000" type="dashed" width="1.0"/>
+          <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.701171875" modelName="custom" textColor="#000000" visible="true" width="41.353515625" x="90.93114631163513" y="21.6494140625">aliases<y:LabelModel>
+              <y:SmartNodeLabelModel distance="4.0"/>
+            </y:LabelModel>
+            <y:ModelParameter>
+              <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
+            </y:ModelParameter>
+          </y:NodeLabel>
+          <y:Shape type="rectangle"/>
+        </y:ShapeNode>
+      </data>
+    </node>
+    <node id="n5" yfiles.foldertype="group">
+      <data key="d4"/>
+      <data key="d6">
+        <y:ProxyAutoBoundsNode>
+          <y:Realizers active="0">
+            <y:GroupNode>
+              <y:Geometry height="306.37646484375" width="311.0" x="7.0" y="188.62353515625"/>
+              <y:Fill color="#DDFFDD" transparent="false"/>
+              <y:BorderStyle color="#000000" type="line" width="1.0"/>
+              <y:NodeLabel alignment="right" autoSizePolicy="node_width" backgroundColor="#DDFFDD" borderDistance="0.0" fontFamily="Dialog" fontSize="15" fontStyle="plain" hasLineColor="false" height="22.37646484375" modelName="internal" modelPosition="t" textColor="#000000" visible="true" width="311.0" x="0.0" y="0.0">common</y:NodeLabel>
+              <y:Shape type="roundrectangle"/>
+              <y:State closed="false" closedHeight="50.0" closedWidth="50.0" innerGraphDisplayEnabled="false"/>
+              <y:Insets bottom="15" bottomF="15.0" left="15" leftF="15.0" right="15" rightF="15.0" top="15" topF="15.0"/>
+              <y:BorderInsets bottom="0" bottomF="0.0" left="0" leftF="0.0" right="0" rightF="0.0" top="0" topF="0.0"/>
+            </y:GroupNode>
+            <y:GroupNode>
+              <y:Geometry height="50.0" width="50.0" x="-8.0" y="189.333984375"/>
+              <y:Fill color="#F5F5F5" transparent="false"/>
+              <y:BorderStyle color="#000000" type="dashed" width="1.0"/>
+              <y:NodeLabel alignment="right" autoSizePolicy="node_width" backgroundColor="#EBEBEB" borderDistance="0.0" fontFamily="Dialog" fontSize="15" fontStyle="plain" hasLineColor="false" height="22.37646484375" modelName="internal" modelPosition="t" textColor="#000000" visible="true" width="59.02685546875" x="-4.513427734375" y="0.0">Folder 2</y:NodeLabel>
+              <y:Shape type="roundrectangle"/>
+              <y:State closed="true" closedHeight="50.0" closedWidth="50.0" innerGraphDisplayEnabled="false"/>
+              <y:Insets bottom="5" bottomF="5.0" left="5" leftF="5.0" right="5" rightF="5.0" top="5" topF="5.0"/>
+              <y:BorderInsets bottom="0" bottomF="0.0" left="0" leftF="0.0" right="0" rightF="0.0" top="0" topF="0.0"/>
+            </y:GroupNode>
+          </y:Realizers>
+        </y:ProxyAutoBoundsNode>
+      </data>
+      <graph edgedefault="directed" id="n5:">
+        <node id="n5::n0">
+          <data key="d6">
+            <y:ShapeNode>
+              <y:Geometry height="62.0" width="118.0" x="185.0" y="226.0"/>
+              <y:Fill color="#FFCCCC" transparent="false"/>
+              <y:BorderStyle color="#000000" type="line" width="1.0"/>
+              <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.701171875" modelName="custom" textColor="#000000" visible="true" width="72.689453125" x="22.6552734375" y="21.6494140625">params-local<y:LabelModel>
+                  <y:SmartNodeLabelModel distance="4.0"/>
+                </y:LabelModel>
+                <y:ModelParameter>
+                  <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
+                </y:ModelParameter>
+              </y:NodeLabel>
+              <y:Shape type="rectangle"/>
+            </y:ShapeNode>
+          </data>
+        </node>
+        <node id="n5::n1">
+          <data key="d6">
+            <y:ShapeNode>
+              <y:Geometry height="62.0" width="118.0" x="185.0" y="418.0"/>
+              <y:Fill color="#99CCFF" transparent="false"/>
+              <y:BorderStyle color="#000000" type="line" width="1.0"/>
+              <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.701171875" modelName="custom" textColor="#000000" visible="true" width="58.685546875" x="29.6572265625" y="21.6494140625">main-local<y:LabelModel>
+                  <y:SmartNodeLabelModel distance="4.0"/>
+                </y:LabelModel>
+                <y:ModelParameter>
+                  <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
+                </y:ModelParameter>
+              </y:NodeLabel>
+              <y:Shape type="rectangle"/>
+            </y:ShapeNode>
+          </data>
+        </node>
+        <node id="n5::n2">
+          <data key="d6">
+            <y:ShapeNode>
+              <y:Geometry height="62.0" width="118.0" x="22.0" y="226.0"/>
+              <y:Fill color="#FFCCCC" transparent="false"/>
+              <y:BorderStyle color="#000000" type="line" width="1.0"/>
+              <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.701171875" modelName="custom" textColor="#000000" visible="true" width="44.013671875" x="36.9931640625" y="21.6494140625">params<y:LabelModel>
+                  <y:SmartNodeLabelModel distance="4.0"/>
+                </y:LabelModel>
+                <y:ModelParameter>
+                  <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
+                </y:ModelParameter>
+              </y:NodeLabel>
+              <y:Shape type="rectangle"/>
+            </y:ShapeNode>
+          </data>
+        </node>
+        <node id="n5::n3">
+          <data key="d6">
+            <y:ShapeNode>
+              <y:Geometry height="62.0" width="118.0" x="22.0" y="418.0"/>
+              <y:Fill color="#99CCFF" transparent="false"/>
+              <y:BorderStyle color="#000000" type="line" width="1.0"/>
+              <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.701171875" modelName="custom" textColor="#000000" visible="true" width="30.009765625" x="43.9951171875" y="21.6494140625">main<y:LabelModel>
+                  <y:SmartNodeLabelModel distance="4.0"/>
+                </y:LabelModel>
+                <y:ModelParameter>
+                  <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
+                </y:ModelParameter>
+              </y:NodeLabel>
+              <y:Shape type="rectangle"/>
+            </y:ShapeNode>
+          </data>
+        </node>
+      </graph>
+    </node>
+    <edge id="e0" source="n3::n3" target="n2">
+      <data key="d10">
+        <y:PolyLineEdge>
+          <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
+          <y:LineStyle color="#000000" type="line" width="2.0"/>
+          <y:Arrows source="none" target="delta"/>
+          <y:EdgeLabel alignment="center" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" hasText="false" height="4.0" modelName="side_slider" preferredPlacement="right" ratio="0.0" textColor="#000000" visible="true" width="4.0" x="2.0" y="10.125">
+            <y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="right" sideReference="relative_to_edge_flow"/>
+          </y:EdgeLabel>
+          <y:BendStyle smoothed="false"/>
+        </y:PolyLineEdge>
+      </data>
+    </edge>
+    <edge id="e1" source="n4" target="n2">
+      <data key="d10">
+        <y:PolyLineEdge>
+          <y:Path sx="-111.48005839096935" sy="0.0" tx="0.0" ty="0.0"/>
+          <y:LineStyle color="#000000" type="line" width="3.0"/>
+          <y:Arrows source="none" target="delta"/>
+          <y:EdgeLabel alignment="center" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" hasText="false" height="4.0" modelName="side_slider" preferredPlacement="right" ratio="0.25" textColor="#000000" visible="true" width="4.0" x="33.47449351530429" y="-2.0000000000001137">
+            <y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="right" sideReference="relative_to_edge_flow"/>
+          </y:EdgeLabel>
+          <y:BendStyle smoothed="false"/>
+        </y:PolyLineEdge>
+      </data>
+    </edge>
+    <edge id="e2" source="n5::n1" target="n3::n2">
+      <data key="d10">
+        <y:PolyLineEdge>
+          <y:Path sx="0.0" sy="5.6843418860808015E-14" tx="0.0" ty="0.0">
+            <y:Point x="218.8251533742331" y="449.00000000000006"/>
+            <y:Point x="218.8251533742331" y="449.0"/>
+          </y:Path>
+          <y:LineStyle color="#000000" type="line" width="2.0"/>
+          <y:Arrows source="none" target="delta"/>
+          <y:EdgeLabel alignment="center" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" hasText="false" height="4.0" modelName="side_slider" preferredPlacement="right" ratio="0.0" textColor="#000000" visible="true" width="4.0" x="10.089752197265625" y="-6.0">
+            <y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="right" sideReference="relative_to_edge_flow"/>
+          </y:EdgeLabel>
+          <y:BendStyle smoothed="false"/>
+        </y:PolyLineEdge>
+      </data>
+    </edge>
+    <edge id="n5::e0" source="n5::n2" target="n5::n0">
+      <data key="d10">
+        <y:PolyLineEdge>
+          <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
+          <y:LineStyle color="#000000" type="line" width="2.0"/>
+          <y:Arrows source="none" target="standard"/>
+          <y:EdgeLabel alignment="center" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" hasText="false" height="4.0" modelName="side_slider" preferredPlacement="right" ratio="0.0" textColor="#000000" visible="true" width="4.0" x="10.125" y="-6.0">
+            <y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="right" sideReference="relative_to_edge_flow"/>
+          </y:EdgeLabel>
+          <y:BendStyle smoothed="false"/>
+        </y:PolyLineEdge>
+      </data>
+    </edge>
+    <edge id="n5::e1" source="n5::n3" target="n5::n1">
+      <data key="d10">
+        <y:PolyLineEdge>
+          <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
+          <y:LineStyle color="#000000" type="line" width="2.0"/>
+          <y:Arrows source="none" target="delta"/>
+          <y:EdgeLabel alignment="center" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" hasText="false" height="4.0" modelName="side_slider" preferredPlacement="right" ratio="0.0" textColor="#000000" visible="true" width="4.0" x="10.125" y="-6.0">
+            <y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="right" sideReference="relative_to_edge_flow"/>
+          </y:EdgeLabel>
+          <y:BendStyle smoothed="false"/>
+        </y:PolyLineEdge>
+      </data>
+    </edge>
+    <edge id="n3::e0" source="n3::n0" target="n3::n1">
+      <data key="d10">
+        <y:PolyLineEdge>
+          <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
+          <y:LineStyle color="#000000" type="line" width="2.0"/>
+          <y:Arrows source="none" target="delta"/>
+          <y:EdgeLabel alignment="center" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" hasText="false" height="4.0" modelName="side_slider" preferredPlacement="right" ratio="0.0" textColor="#000000" visible="true" width="4.0" x="2.0" y="10.125">
+            <y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="right" sideReference="relative_to_edge_flow"/>
+          </y:EdgeLabel>
+          <y:BendStyle smoothed="false"/>
+        </y:PolyLineEdge>
+      </data>
+    </edge>
+    <edge id="n3::e1" source="n3::n1" target="n3::n2">
+      <data key="d10">
+        <y:PolyLineEdge>
+          <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
+          <y:LineStyle color="#000000" type="line" width="2.0"/>
+          <y:Arrows source="none" target="delta"/>
+          <y:EdgeLabel alignment="center" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" hasText="false" height="4.0" modelName="side_slider" preferredPlacement="right" ratio="0.0" textColor="#000000" visible="true" width="4.0" x="2.0" y="10.125">
+            <y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="right" sideReference="relative_to_edge_flow"/>
+          </y:EdgeLabel>
+          <y:BendStyle smoothed="false"/>
+        </y:PolyLineEdge>
+      </data>
+    </edge>
+    <edge id="n3::e2" source="n3::n2" target="n3::n3">
+      <data key="d10">
+        <y:PolyLineEdge>
+          <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
+          <y:LineStyle color="#000000" type="line" width="2.0"/>
+          <y:Arrows source="none" target="delta"/>
+          <y:EdgeLabel alignment="center" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" hasText="false" height="4.0" modelName="side_slider" preferredPlacement="right" ratio="0.0" textColor="#000000" visible="true" width="4.0" x="2.0" y="10.125">
+            <y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="right" sideReference="relative_to_edge_flow"/>
+          </y:EdgeLabel>
+          <y:BendStyle smoothed="false"/>
+        </y:PolyLineEdge>
+      </data>
+    </edge>
+    <edge id="e3" source="n5::n0" target="n3::n0">
+      <data key="d10">
+        <y:PolyLineEdge>
+          <y:Path sx="0.0" sy="-5.6843418860808015E-14" tx="0.0" ty="0.0">
+            <y:Point x="218.8251533742331" y="256.99999999999994"/>
+            <y:Point x="218.8251533742331" y="257.0"/>
+          </y:Path>
+          <y:LineStyle color="#000000" type="line" width="2.0"/>
+          <y:Arrows source="none" target="delta"/>
+          <y:EdgeLabel alignment="center" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" hasText="false" height="4.0" modelName="side_slider" preferredPlacement="right" ratio="0.0" textColor="#000000" visible="true" width="4.0" x="10.089752197265625" y="-6.0">
+            <y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="right" sideReference="relative_to_edge_flow"/>
+          </y:EdgeLabel>
+          <y:BendStyle smoothed="false"/>
+        </y:PolyLineEdge>
+      </data>
+    </edge>
+  </graph>
+  <data key="d0">
+    <y:Resources/>
+  </data>
+</graphml>
diff --git a/docs/guide-pt-BR/images/advanced-app-configs.png b/docs/guide-pt-BR/images/advanced-app-configs.png
new file mode 100644
index 0000000..daa9a6f
Binary files /dev/null and b/docs/guide-pt-BR/images/advanced-app-configs.png differ
diff --git a/docs/guide-pt-BR/images/application-lifecycle.graphml b/docs/guide-pt-BR/images/application-lifecycle.graphml
new file mode 100644
index 0000000..525b192
--- /dev/null
+++ b/docs/guide-pt-BR/images/application-lifecycle.graphml
@@ -0,0 +1,834 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<graphml xmlns="http://graphml.graphdrawing.org/xmlns" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:y="http://www.yworks.com/xml/graphml" xmlns:yed="http://www.yworks.com/xml/yed/3" xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns http://www.yworks.com/xml/schema/graphml/1.1/ygraphml.xsd">
+  <!--Created by yEd 3.13-->
+  <key for="graphml" id="d0" yfiles.type="resources"/>
+  <key for="port" id="d1" yfiles.type="portgraphics"/>
+  <key for="port" id="d2" yfiles.type="portgeometry"/>
+  <key for="port" id="d3" yfiles.type="portuserdata"/>
+  <key attr.name="url" attr.type="string" for="node" id="d4"/>
+  <key attr.name="description" attr.type="string" for="node" id="d5"/>
+  <key for="node" id="d6" yfiles.type="nodegraphics"/>
+  <key attr.name="Description" attr.type="string" for="graph" id="d7"/>
+  <key attr.name="url" attr.type="string" for="edge" id="d8"/>
+  <key attr.name="description" attr.type="string" for="edge" id="d9"/>
+  <key for="edge" id="d10" yfiles.type="edgegraphics"/>
+  <graph edgedefault="directed" id="G">
+    <data key="d7"/>
+    <node id="n0">
+      <data key="d6">
+        <y:SVGNode>
+          <y:Geometry height="70.13700103759766" width="56.558998107910156" x="198.38633947503078" y="261.099458694458"/>
+          <y:Fill color="#CCCCFF" transparent="false"/>
+          <y:BorderStyle color="#000000" type="line" width="1.0"/>
+          <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" hasText="false" height="4.0" modelName="custom" textColor="#000000" visible="true" width="4.0" x="26.279499053955078" y="74.13700103759766">
+            <y:LabelModel>
+              <y:SmartNodeLabelModel distance="4.0"/>
+            </y:LabelModel>
+            <y:ModelParameter>
+              <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="-0.5" nodeRatioX="0.0" nodeRatioY="0.5" offsetX="0.0" offsetY="4.0" upX="0.0" upY="-1.0"/>
+            </y:ModelParameter>
+          </y:NodeLabel>
+          <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" modelName="custom" textColor="#000000" visible="true" width="47.388671875" x="-51.388671875" y="26.002094268798828">usuário<y:LabelModel>
+              <y:SmartNodeLabelModel distance="4.0"/>
+            </y:LabelModel>
+            <y:ModelParameter>
+              <y:SmartNodeLabelModelParameter labelRatioX="0.5" labelRatioY="0.0" nodeRatioX="-0.5" nodeRatioY="0.0" offsetX="-4.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
+            </y:ModelParameter>
+          </y:NodeLabel>
+          <y:SVGNodeProperties usingVisualBounds="true"/>
+          <y:SVGModel svgBoundsPolicy="0">
+            <y:SVGContent refid="1"/>
+          </y:SVGModel>
+        </y:SVGNode>
+      </data>
+    </node>
+    <node id="n1">
+      <data key="d6">
+        <y:ShapeNode>
+          <y:Geometry height="45.0" width="119.0" x="789.0653619766235" y="637.1271178722382"/>
+          <y:Fill color="#99CCFF" transparent="false"/>
+          <y:BorderStyle hasColor="false" type="line" width="1.0"/>
+          <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" modelName="custom" textColor="#000000" visible="true" width="40.28125" x="39.359375" y="13.43359375">model<y:LabelModel>
+              <y:SmartNodeLabelModel distance="4.0"/>
+            </y:LabelModel>
+            <y:ModelParameter>
+              <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
+            </y:ModelParameter>
+          </y:NodeLabel>
+          <y:Shape type="roundrectangle"/>
+        </y:ShapeNode>
+      </data>
+    </node>
+    <node id="n2">
+      <data key="d6">
+        <y:SVGNode>
+          <y:Geometry height="46.887996673583984" width="39.527000427246094" x="828.8018617630005" y="544.9831195354463"/>
+          <y:Fill color="#CCCCFF" transparent="false"/>
+          <y:BorderStyle color="#000000" type="line" width="1.0"/>
+          <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" modelName="custom" textColor="#000000" visible="true" width="96.197265625" x="-28.335132598876953" y="-30.154888153076172">banco de dados<y:LabelModel>
+              <y:SmartNodeLabelModel distance="4.0"/>
+            </y:LabelModel>
+            <y:ModelParameter>
+              <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.5" nodeRatioX="0.0" nodeRatioY="-0.5" offsetX="0.0" offsetY="-12.022075653076172" upX="0.0" upY="-1.0"/>
+            </y:ModelParameter>
+          </y:NodeLabel>
+          <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" hasText="false" height="4.0" modelName="custom" textColor="#000000" visible="true" width="4.0" x="17.763500213623047" y="21.443998336791992">
+            <y:LabelModel>
+              <y:SmartNodeLabelModel distance="4.0"/>
+            </y:LabelModel>
+            <y:ModelParameter>
+              <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
+            </y:ModelParameter>
+          </y:NodeLabel>
+          <y:SVGNodeProperties usingVisualBounds="true"/>
+          <y:SVGModel svgBoundsPolicy="0">
+            <y:SVGContent refid="2"/>
+          </y:SVGModel>
+        </y:SVGNode>
+      </data>
+    </node>
+    <node id="n3">
+      <data key="d6">
+        <y:ShapeNode>
+          <y:Geometry height="45.0" width="119.0" x="789.0653619766235" y="713.6271178722382"/>
+          <y:Fill color="#99CC00" transparent="false"/>
+          <y:BorderStyle hasColor="false" type="line" width="1.0"/>
+          <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" modelName="custom" textColor="#000000" visible="true" width="29.611328125" x="44.6943359375" y="13.43359375">view<y:LabelModel>
+              <y:SmartNodeLabelModel distance="4.0"/>
+            </y:LabelModel>
+            <y:ModelParameter>
+              <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
+            </y:ModelParameter>
+          </y:NodeLabel>
+          <y:Shape type="roundrectangle"/>
+        </y:ShapeNode>
+      </data>
+    </node>
+    <node id="n4" yfiles.foldertype="group">
+      <data key="d4"/>
+      <data key="d6">
+        <y:ProxyAutoBoundsNode>
+          <y:Realizers active="0">
+            <y:GroupNode>
+              <y:Geometry height="376.3268349409104" width="219.27949905395508" x="527.4919853210449" y="408.6371007919311"/>
+              <y:Fill color="#FFEFD6" transparent="false"/>
+              <y:BorderStyle hasColor="false" type="line" width="1.0"/>
+              <y:NodeLabel alignment="center" autoSizePolicy="node_width" backgroundColor="#FF9900" borderDistance="0.0" fontFamily="Dialog" fontSize="15" fontStyle="plain" hasLineColor="false" height="21.666015625" modelName="internal" modelPosition="t" textColor="#000000" visible="true" width="219.27949905395508" x="0.0" y="0.0">controller</y:NodeLabel>
+              <y:Shape type="rectangle"/>
+              <y:State closed="false" closedHeight="50.0" closedWidth="50.0" innerGraphDisplayEnabled="false"/>
+              <y:Insets bottom="15" bottomF="15.0" left="15" leftF="15.0" right="15" rightF="15.0" top="15" topF="15.0"/>
+              <y:BorderInsets bottom="0" bottomF="0.0" left="2" leftF="1.7335329055786133" right="0" rightF="0.0" top="0" topF="0.0"/>
+            </y:GroupNode>
+            <y:GroupNode>
+              <y:Geometry height="50.0" width="50.0" x="313.2978515625" y="412.2765645980835"/>
+              <y:Fill color="#F5F5F5" transparent="false"/>
+              <y:BorderStyle color="#000000" type="dashed" width="1.0"/>
+              <y:NodeLabel alignment="right" autoSizePolicy="node_width" backgroundColor="#EBEBEB" borderDistance="0.0" fontFamily="Dialog" fontSize="15" fontStyle="plain" hasLineColor="false" height="21.666015625" modelName="internal" modelPosition="t" textColor="#000000" visible="true" width="63.75830078125" x="-6.879150390625" y="0.0">Folder 1</y:NodeLabel>
+              <y:Shape type="roundrectangle"/>
+              <y:State closed="true" closedHeight="50.0" closedWidth="50.0" innerGraphDisplayEnabled="false"/>
+              <y:Insets bottom="5" bottomF="5.0" left="5" leftF="5.0" right="5" rightF="5.0" top="5" topF="5.0"/>
+              <y:BorderInsets bottom="0" bottomF="0.0" left="0" leftF="0.0" right="0" rightF="0.0" top="0" topF="0.0"/>
+            </y:GroupNode>
+          </y:Realizers>
+        </y:ProxyAutoBoundsNode>
+      </data>
+      <graph edgedefault="directed" id="n4:">
+        <node id="n4::n0">
+          <data key="d6">
+            <y:ShapeNode>
+              <y:Geometry height="30.0" width="150.55899810791016" x="563.2124862670898" y="445.3031164169311"/>
+              <y:Fill color="#FFFFFF" transparent="false"/>
+              <y:BorderStyle color="#000000" type="line" width="1.0"/>
+              <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" modelName="custom" textColor="#000000" visible="true" width="64.498046875" x="43.03047561645508" y="5.93359375">cria action<y:LabelModel>
+                  <y:SmartNodeLabelModel distance="4.0"/>
+                </y:LabelModel>
+                <y:ModelParameter>
+                  <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
+                </y:ModelParameter>
+              </y:NodeLabel>
+              <y:Shape type="rectangle"/>
+            </y:ShapeNode>
+          </data>
+        </node>
+        <node id="n4::n1">
+          <data key="d6">
+            <y:ShapeNode>
+              <y:Geometry height="45.0" width="159.91864204406738" x="558.5326642990112" y="521.8166599273682"/>
+              <y:Fill color="#FFFFFF" transparent="false"/>
+              <y:BorderStyle color="#000000" type="line" width="1.0"/>
+              <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" modelName="custom" textColor="#000000" visible="true" width="75.923828125" x="41.99740695953369" y="13.43359375">aplica filtros<y:LabelModel>
+                  <y:SmartNodeLabelModel distance="4.0"/>
+                </y:LabelModel>
+                <y:ModelParameter>
+                  <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
+                </y:ModelParameter>
+              </y:NodeLabel>
+              <y:Shape type="diamond"/>
+            </y:ShapeNode>
+          </data>
+        </node>
+        <node id="n4::n2" yfiles.foldertype="group">
+          <data key="d4"/>
+          <data key="d6">
+            <y:ProxyAutoBoundsNode>
+              <y:Realizers active="0">
+                <y:GroupNode>
+                  <y:Geometry height="162.00283348560333" width="187.54596614837646" x="544.2255182266235" y="607.9611022472382"/>
+                  <y:Fill color="#99336635" transparent="false"/>
+                  <y:BorderStyle hasColor="false" type="line" width="1.0"/>
+                  <y:NodeLabel alignment="center" autoSizePolicy="node_width" backgroundColor="#993366" borderDistance="0.0" fontFamily="Dialog" fontSize="15" fontStyle="plain" hasLineColor="false" height="21.666015625" modelName="internal" modelPosition="t" textColor="#FFFFFF" visible="true" width="187.54596614837646" x="0.0" y="0.0">action</y:NodeLabel>
+                  <y:Shape type="rectangle"/>
+                  <y:State closed="false" closedHeight="50.0" closedWidth="50.0" innerGraphDisplayEnabled="false"/>
+                  <y:Insets bottom="15" bottomF="15.0" left="15" leftF="15.0" right="15" rightF="15.0" top="15" topF="15.0"/>
+                  <y:BorderInsets bottom="4" bottomF="3.8368178606033325" left="4" leftF="3.9869680404663086" right="3" rightF="3.0" top="0" topF="0.0"/>
+                </y:GroupNode>
+                <y:GroupNode>
+                  <y:Geometry height="50.0" width="50.0" x="0.0" y="60.0"/>
+                  <y:Fill color="#F5F5F5" transparent="false"/>
+                  <y:BorderStyle color="#000000" type="dashed" width="1.0"/>
+                  <y:NodeLabel alignment="right" autoSizePolicy="node_width" backgroundColor="#EBEBEB" borderDistance="0.0" fontFamily="Dialog" fontSize="15" fontStyle="plain" hasLineColor="false" height="21.666015625" modelName="internal" modelPosition="t" textColor="#000000" visible="true" width="63.75830078125" x="-6.879150390625" y="0.0">Folder 3</y:NodeLabel>
+                  <y:Shape type="roundrectangle"/>
+                  <y:State closed="true" closedHeight="50.0" closedWidth="50.0" innerGraphDisplayEnabled="false"/>
+                  <y:Insets bottom="5" bottomF="5.0" left="5" leftF="5.0" right="5" rightF="5.0" top="5" topF="5.0"/>
+                  <y:BorderInsets bottom="0" bottomF="0.0" left="0" leftF="0.0" right="0" rightF="0.0" top="0" topF="0.0"/>
+                </y:GroupNode>
+              </y:Realizers>
+            </y:ProxyAutoBoundsNode>
+          </data>
+          <graph edgedefault="directed" id="n4::n2:">
+            <node id="n4::n2::n0">
+              <data key="d6">
+                <y:ShapeNode>
+                  <y:Geometry height="30.0" width="150.55899810791016" x="563.2124862670898" y="644.6271178722382"/>
+                  <y:Fill color="#FFFFFF" transparent="false"/>
+                  <y:BorderStyle color="#000000" type="line" width="1.0"/>
+                  <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" modelName="custom" textColor="#000000" visible="true" width="87.466796875" x="31.546100616455078" y="5.93359375">carrega model<y:LabelModel>
+                      <y:SmartNodeLabelModel distance="4.0"/>
+                    </y:LabelModel>
+                    <y:ModelParameter>
+                      <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
+                    </y:ModelParameter>
+                  </y:NodeLabel>
+                  <y:Shape type="rectangle"/>
+                </y:ShapeNode>
+              </data>
+            </node>
+            <node id="n4::n2::n1">
+              <data key="d6">
+                <y:ShapeNode>
+                  <y:Geometry height="30.0" width="150.55899810791016" x="563.2124862670898" y="721.1271178722382"/>
+                  <y:Fill color="#FFFFFF" transparent="false"/>
+                  <y:BorderStyle color="#000000" type="line" width="1.0"/>
+                  <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" modelName="custom" textColor="#000000" visible="true" width="88.57421875" x="30.992389678955078" y="5.93359375">renderiza view<y:LabelModel>
+                      <y:SmartNodeLabelModel distance="4.0"/>
+                    </y:LabelModel>
+                    <y:ModelParameter>
+                      <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
+                    </y:ModelParameter>
+                  </y:NodeLabel>
+                  <y:Shape type="rectangle"/>
+                </y:ShapeNode>
+              </data>
+            </node>
+          </graph>
+        </node>
+      </graph>
+    </node>
+    <node id="n5">
+      <data key="d6">
+        <y:ShapeNode>
+          <y:Geometry height="45.0" width="96.0" x="189.47636032104495" y="713.6271178722382"/>
+          <y:Fill color="#FFCC99" transparent="false"/>
+          <y:BorderStyle hasColor="false" type="line" width="1.0"/>
+          <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" modelName="custom" textColor="#000000" visible="true" width="53.869140625" x="21.0654296875" y="13.43359375">resposta<y:LabelModel>
+              <y:SmartNodeLabelModel distance="4.0"/>
+            </y:LabelModel>
+            <y:ModelParameter>
+              <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
+            </y:ModelParameter>
+          </y:NodeLabel>
+          <y:Shape type="roundrectangle"/>
+        </y:ShapeNode>
+      </data>
+    </node>
+    <node id="n6">
+      <data key="d6">
+        <y:ShapeNode>
+          <y:Geometry height="45.0" width="119.0" x="789.0653619766235" y="254.50096702575684"/>
+          <y:Fill color="#FFCC99" transparent="false"/>
+          <y:BorderStyle hasColor="false" type="line" width="1.0"/>
+          <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" modelName="custom" textColor="#000000" visible="true" width="63.794921875" x="27.6025390625" y="13.43359375">requisição<y:LabelModel>
+              <y:SmartNodeLabelModel distance="4.0"/>
+            </y:LabelModel>
+            <y:ModelParameter>
+              <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
+            </y:ModelParameter>
+          </y:NodeLabel>
+          <y:Shape type="roundrectangle"/>
+        </y:ShapeNode>
+      </data>
+    </node>
+    <node id="n7" yfiles.foldertype="group">
+      <data key="d4"/>
+      <data key="d6">
+        <y:ProxyAutoBoundsNode>
+          <y:Realizers active="0">
+            <y:GroupNode>
+              <y:Geometry height="143.421781539917" width="219.27949905395508" x="527.4919853210449" y="223.57918548583984"/>
+              <y:Fill color="#FFEFD6" transparent="false"/>
+              <y:BorderStyle hasColor="false" type="line" width="1.0"/>
+              <y:NodeLabel alignment="center" autoSizePolicy="node_width" backgroundColor="#FF9900" borderDistance="0.0" fontFamily="Dialog" fontSize="15" fontStyle="plain" hasLineColor="false" height="21.666015625" modelName="internal" modelPosition="t" textColor="#000000" visible="true" width="219.27949905395508" x="0.0" y="0.0">aplicação</y:NodeLabel>
+              <y:Shape type="rectangle"/>
+              <y:State closed="false" closedHeight="50.0" closedWidth="50.0" innerGraphDisplayEnabled="false"/>
+              <y:Insets bottom="15" bottomF="15.0" left="15" leftF="15.0" right="15" rightF="15.0" top="15" topF="15.0"/>
+              <y:BorderInsets bottom="0" bottomF="0.0" left="21" leftF="20.720500946044922" right="18" rightF="18.0" top="2" topF="1.7557659149169922"/>
+            </y:GroupNode>
+            <y:GroupNode>
+              <y:Geometry height="50.0" width="50.0" x="0.0" y="60.0"/>
+              <y:Fill color="#F5F5F5" transparent="false"/>
+              <y:BorderStyle color="#000000" type="dashed" width="1.0"/>
+              <y:NodeLabel alignment="right" autoSizePolicy="node_width" backgroundColor="#EBEBEB" borderDistance="0.0" fontFamily="Dialog" fontSize="15" fontStyle="plain" hasLineColor="false" height="21.666015625" modelName="internal" modelPosition="t" textColor="#000000" visible="true" width="63.75830078125" x="-6.879150390625" y="0.0">Folder 2</y:NodeLabel>
+              <y:Shape type="roundrectangle"/>
+              <y:State closed="true" closedHeight="50.0" closedWidth="50.0" innerGraphDisplayEnabled="false"/>
+              <y:Insets bottom="5" bottomF="5.0" left="5" leftF="5.0" right="5" rightF="5.0" top="5" topF="5.0"/>
+              <y:BorderInsets bottom="0" bottomF="0.0" left="0" leftF="0.0" right="0" rightF="0.0" top="0" topF="0.0"/>
+            </y:GroupNode>
+          </y:Realizers>
+        </y:ProxyAutoBoundsNode>
+      </data>
+      <graph edgedefault="directed" id="n7:">
+        <node id="n7::n0">
+          <data key="d6">
+            <y:ShapeNode>
+              <y:Geometry height="30.0" width="150.55899810791016" x="563.2124862670898" y="262.00096702575684"/>
+              <y:Fill color="#FFFFFF" transparent="false"/>
+              <y:BorderStyle color="#000000" type="line" width="1.0"/>
+              <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" modelName="custom" textColor="#000000" visible="true" width="72.642578125" x="38.95820999145508" y="5.93359375">resolve rota<y:LabelModel>
+                  <y:SmartNodeLabelModel distance="4.0"/>
+                </y:LabelModel>
+                <y:ModelParameter>
+                  <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
+                </y:ModelParameter>
+              </y:NodeLabel>
+              <y:Shape type="rectangle"/>
+            </y:ShapeNode>
+          </data>
+        </node>
+        <node id="n7::n1">
+          <data key="d6">
+            <y:ShapeNode>
+              <y:Geometry height="30.0" width="150.55899810791016" x="563.2124862670898" y="322.00096702575684"/>
+              <y:Fill color="#FFFFFF" transparent="false"/>
+              <y:BorderStyle color="#000000" type="line" width="1.0"/>
+              <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" modelName="custom" textColor="#000000" visible="true" width="85.216796875" x="32.67110061645508" y="5.93359375">cria controller<y:LabelModel>
+                  <y:SmartNodeLabelModel distance="4.0"/>
+                </y:LabelModel>
+                <y:ModelParameter>
+                  <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
+                </y:ModelParameter>
+              </y:NodeLabel>
+              <y:Shape type="rectangle"/>
+            </y:ShapeNode>
+          </data>
+        </node>
+      </graph>
+    </node>
+    <node id="n8" yfiles.foldertype="group">
+      <data key="d4"/>
+      <data key="d6">
+        <y:ProxyAutoBoundsNode>
+          <y:Realizers active="0">
+            <y:GroupNode>
+              <y:Geometry height="141.666015625" width="171.33075141906738" x="307.591796875" y="225.33495140075684"/>
+              <y:Fill color="#FFCC0024" transparent="false"/>
+              <y:BorderStyle hasColor="false" type="line" width="1.0"/>
+              <y:NodeLabel alignment="center" autoSizePolicy="node_width" backgroundColor="#FFCC00" borderDistance="0.0" fontFamily="Dialog" fontSize="15" fontStyle="plain" hasLineColor="false" height="21.666015625" modelName="internal" modelPosition="t" textColor="#000000" visible="true" width="171.33075141906738" x="0.0" y="0.0">script de entrada</y:NodeLabel>
+              <y:Shape type="rectangle"/>
+              <y:State closed="false" closedHeight="50.0" closedWidth="50.0" innerGraphDisplayEnabled="false"/>
+              <y:Insets bottom="15" bottomF="15.0" left="15" leftF="15.0" right="15" rightF="15.0" top="15" topF="15.0"/>
+              <y:BorderInsets bottom="0" bottomF="0.0" left="1" leftF="0.9186420440673828" right="0" rightF="0.0" top="0" topF="0.0"/>
+            </y:GroupNode>
+            <y:GroupNode>
+              <y:Geometry height="50.0" width="50.0" x="313.2978515625" y="225.33495140075684"/>
+              <y:Fill color="#F5F5F5" transparent="false"/>
+              <y:BorderStyle color="#000000" type="dashed" width="1.0"/>
+              <y:NodeLabel alignment="right" autoSizePolicy="node_width" backgroundColor="#EBEBEB" borderDistance="0.0" fontFamily="Dialog" fontSize="15" fontStyle="plain" hasLineColor="false" height="21.666015625" modelName="internal" modelPosition="t" textColor="#000000" visible="true" width="63.75830078125" x="-6.879150390625" y="0.0">Folder 4</y:NodeLabel>
+              <y:Shape type="roundrectangle"/>
+              <y:State closed="true" closedHeight="50.0" closedWidth="50.0" innerGraphDisplayEnabled="false"/>
+              <y:Insets bottom="5" bottomF="5.0" left="5" leftF="5.0" right="5" rightF="5.0" top="5" topF="5.0"/>
+              <y:BorderInsets bottom="0" bottomF="0.0" left="0" leftF="0.0" right="0" rightF="0.0" top="0" topF="0.0"/>
+            </y:GroupNode>
+          </y:Realizers>
+        </y:ProxyAutoBoundsNode>
+      </data>
+      <graph edgedefault="directed" id="n8:">
+        <node id="n8::n0">
+          <data key="d6">
+            <y:ShapeNode>
+              <y:Geometry height="30.0" width="129.0" x="329.2164936065674" y="262.00096702575684"/>
+              <y:Fill color="#FFFFFF" transparent="false"/>
+              <y:BorderStyle color="#000000" type="line" width="1.0"/>
+              <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" modelName="custom" textColor="#000000" visible="true" width="140.412109375" x="-5.7060546875" y="5.93359375"> carrega configurações <y:LabelModel>
+                  <y:SmartNodeLabelModel distance="4.0"/>
+                </y:LabelModel>
+                <y:ModelParameter>
+                  <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
+                </y:ModelParameter>
+              </y:NodeLabel>
+              <y:Shape type="rectangle"/>
+            </y:ShapeNode>
+          </data>
+        </node>
+        <node id="n8::n1">
+          <data key="d6">
+            <y:ShapeNode>
+              <y:Geometry height="30.0" width="129.0" x="329.2164936065674" y="322.00096702575684"/>
+              <y:Fill color="#FFFFFF" transparent="false"/>
+              <y:BorderStyle color="#000000" type="line" width="1.0"/>
+              <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" modelName="custom" textColor="#000000" visible="true" width="107.271484375" x="10.8642578125" y="5.93359375">executa aplicação<y:LabelModel>
+                  <y:SmartNodeLabelModel distance="4.0"/>
+                </y:LabelModel>
+                <y:ModelParameter>
+                  <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
+                </y:ModelParameter>
+              </y:NodeLabel>
+              <y:Shape type="rectangle"/>
+            </y:ShapeNode>
+          </data>
+        </node>
+      </graph>
+    </node>
+    <edge id="e0" source="n2" target="n1">
+      <data key="d10">
+        <y:PolyLineEdge>
+          <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
+          <y:LineStyle color="#666666" type="line" width="2.0"/>
+          <y:Arrows source="none" target="standard"/>
+          <y:BendStyle smoothed="false"/>
+        </y:PolyLineEdge>
+      </data>
+    </edge>
+    <edge id="e1" source="n5" target="n0">
+      <data key="d10">
+        <y:PolyLineEdge>
+          <y:Path sx="-10.81052179205907" sy="-22.46484374999998" tx="0.0" ty="0.0"/>
+          <y:LineStyle color="#666666" type="line" width="2.0"/>
+          <y:Arrows source="none" target="standard"/>
+          <y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" hasText="false" height="4.0" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="4.0" x="28.000006009454637" y="-193.20499098300934">
+            <y:LabelModel>
+              <y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/>
+            </y:LabelModel>
+            <y:ModelParameter>
+              <y:SmartEdgeLabelModelParameter angle="0.0" distance="30.0" distanceToCenter="true" position="right" ratio="0.5" segment="0"/>
+            </y:ModelParameter>
+            <y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/>
+          </y:EdgeLabel>
+          <y:EdgeLabel alignment="center" backgroundColor="#FFFFFF" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasLineColor="false" height="18.1328125" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="19.17578125" x="-9.587884615545363" y="-200.27139723300934">11<y:LabelModel>
+              <y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/>
+            </y:LabelModel>
+            <y:ModelParameter>
+              <y:SmartEdgeLabelModelParameter angle="0.0" distance="30.0" distanceToCenter="true" position="center" ratio="0.5" segment="0"/>
+            </y:ModelParameter>
+            <y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/>
+          </y:EdgeLabel>
+          <y:BendStyle smoothed="false"/>
+        </y:PolyLineEdge>
+      </data>
+    </edge>
+    <edge id="e2" source="n6" target="n7::n0">
+      <data key="d10">
+        <y:PolyLineEdge>
+          <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
+          <y:LineStyle color="#666666" type="line" width="2.0"/>
+          <y:Arrows source="none" target="standard"/>
+          <y:EdgeLabel alignment="center" backgroundColor="#FFFFFF" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasLineColor="false" height="18.1328125" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="11.587890625" x="-30.207454877387818" y="-10.065448760986328">3<y:LabelModel>
+              <y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/>
+            </y:LabelModel>
+            <y:ModelParameter>
+              <y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="0.9990329742431641" distanceToCenter="true" position="right" ratio="0.25395048761528816" segment="-1"/>
+            </y:ModelParameter>
+            <y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/>
+          </y:EdgeLabel>
+          <y:BendStyle smoothed="false"/>
+        </y:PolyLineEdge>
+      </data>
+    </edge>
+    <edge id="n7::e0" source="n7::n0" target="n7::n1">
+      <data key="d10">
+        <y:PolyLineEdge>
+          <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
+          <y:LineStyle color="#666666" type="line" width="2.0"/>
+          <y:Arrows source="none" target="standard"/>
+          <y:BendStyle smoothed="false"/>
+        </y:PolyLineEdge>
+      </data>
+    </edge>
+    <edge id="e3" source="n0" target="n8">
+      <data key="d10">
+        <y:PolyLineEdge>
+          <y:Path sx="0.0" sy="0.0" tx="-79.9882439360955" ty="0.0"/>
+          <y:LineStyle color="#666666" type="line" width="2.0"/>
+          <y:Arrows source="none" target="standard"/>
+          <y:EdgeLabel alignment="center" backgroundColor="#FFFFFF" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasLineColor="false" height="18.1328125" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="11.587890625" x="34.38903536861892" y="-9.066415786743164">1<y:LabelModel>
+              <y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/>
+            </y:LabelModel>
+            <y:ModelParameter>
+              <y:SmartEdgeLabelModelParameter angle="0.0" distance="30.0" distanceToCenter="true" position="center" ratio="0.5" segment="0"/>
+            </y:ModelParameter>
+            <y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/>
+          </y:EdgeLabel>
+          <y:BendStyle smoothed="false"/>
+        </y:PolyLineEdge>
+      </data>
+    </edge>
+    <edge id="e4" source="n7::n1" target="n4">
+      <data key="d10">
+        <y:PolyLineEdge>
+          <y:Path sx="0.0" sy="0.0" tx="2.408647025755731" ty="-181.21658369302781"/>
+          <y:LineStyle color="#666666" type="line" width="2.0"/>
+          <y:Arrows source="none" target="standard"/>
+          <y:EdgeLabel alignment="center" backgroundColor="#FFFFFF" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasLineColor="false" height="18.1328125" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="11.587890625" x="-5.416119621118469" y="19.25165109634395">4<y:LabelModel>
+              <y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/>
+            </y:LabelModel>
+            <y:ModelParameter>
+              <y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="30.0" distanceToCenter="false" position="center" ratio="0.5" segment="0"/>
+            </y:ModelParameter>
+            <y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/>
+          </y:EdgeLabel>
+          <y:BendStyle smoothed="false"/>
+        </y:PolyLineEdge>
+      </data>
+    </edge>
+    <edge id="e5" source="n3" target="n4::n2::n1">
+      <data key="d10">
+        <y:PolyLineEdge>
+          <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
+          <y:LineStyle color="#666666" type="line" width="2.0"/>
+          <y:Arrows source="none" target="standard"/>
+          <y:EdgeLabel alignment="center" backgroundColor="#FFFFFF" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasLineColor="false" height="18.1328125" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="11.587890625" x="-30.77317586853087" y="-9.06642460823059">9<y:LabelModel>
+              <y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/>
+            </y:LabelModel>
+            <y:ModelParameter>
+              <y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="10.0" distanceToCenter="false" position="center" ratio="0.26448415477215953" segment="-1"/>
+            </y:ModelParameter>
+            <y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/>
+          </y:EdgeLabel>
+          <y:BendStyle smoothed="false"/>
+        </y:PolyLineEdge>
+      </data>
+    </edge>
+    <edge id="e6" source="n4::n2::n1" target="n5">
+      <data key="d10">
+        <y:PolyLineEdge>
+          <y:Path sx="0.0" sy="-2.2737367544323206E-13" tx="0.0" ty="0.0"/>
+          <y:LineStyle color="#666666" type="line" width="2.0"/>
+          <y:Arrows source="none" target="standard"/>
+          <y:EdgeLabel alignment="center" backgroundColor="#FFFFFF" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasLineColor="false" height="18.1328125" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="19.17578125" x="-93.46793455769887" y="-9.066424608230705">10<y:LabelModel>
+              <y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/>
+            </y:LabelModel>
+            <y:ModelParameter>
+              <y:SmartEdgeLabelModelParameter angle="0.0" distance="30.0" distanceToCenter="true" position="center" ratio="0.2786124840137136" segment="-1"/>
+            </y:ModelParameter>
+            <y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/>
+          </y:EdgeLabel>
+          <y:BendStyle smoothed="false"/>
+        </y:PolyLineEdge>
+      </data>
+    </edge>
+    <edge id="e7" source="n8::n1" target="n7">
+      <data key="d10">
+        <y:PolyLineEdge>
+          <y:Path sx="55.750299312644984" sy="0.355224609375" tx="-109.63961141576266" ty="42.066115379333496"/>
+          <y:LineStyle color="#666666" type="line" width="2.0"/>
+          <y:Arrows source="none" target="standard"/>
+          <y:EdgeLabel alignment="center" backgroundColor="#FFFFFF" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasLineColor="false" height="18.1328125" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="11.587890625" x="28.868979454040527" y="-9.066415786743164">2<y:LabelModel>
+              <y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/>
+            </y:LabelModel>
+            <y:ModelParameter>
+              <y:SmartEdgeLabelModelParameter angle="0.0" distance="30.0" distanceToCenter="true" position="center" ratio="0.5" segment="0"/>
+            </y:ModelParameter>
+            <y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/>
+          </y:EdgeLabel>
+          <y:BendStyle smoothed="false"/>
+        </y:PolyLineEdge>
+      </data>
+    </edge>
+    <edge id="e8" source="n1" target="n4::n2::n0">
+      <data key="d10">
+        <y:PolyLineEdge>
+          <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
+          <y:LineStyle color="#666666" type="line" width="2.0"/>
+          <y:Arrows source="none" target="standard"/>
+          <y:EdgeLabel alignment="center" backgroundColor="#FFFFFF" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasLineColor="false" height="18.1328125" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="11.587890625" x="-31.923049588221375" y="-10.06642460823059">8<y:LabelModel>
+              <y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/>
+            </y:LabelModel>
+            <y:ModelParameter>
+              <y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="1.0" distanceToCenter="true" position="right" ratio="0.2858946861565087" segment="-1"/>
+            </y:ModelParameter>
+            <y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/>
+          </y:EdgeLabel>
+          <y:BendStyle smoothed="false"/>
+        </y:PolyLineEdge>
+      </data>
+    </edge>
+    <edge id="e9" source="n4::n1" target="n5">
+      <data key="d10">
+        <y:PolyLineEdge>
+          <y:Path sx="-79.9882439360951" sy="2.2737367544323206E-13" tx="24.24112858184396" ty="-1.4999999999999991">
+            <y:Point x="261.71748890288893" y="544.3166599273684"/>
+          </y:Path>
+          <y:LineStyle color="#666666" type="line" width="2.0"/>
+          <y:Arrows source="none" target="standard"/>
+          <y:EdgeLabel alignment="center" backgroundColor="#FFFFFF" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasLineColor="false" height="18.1328125" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="11.587890625" x="-83.6574311462557" y="-9.066396713256609">6<y:LabelModel>
+              <y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/>
+            </y:LabelModel>
+            <y:ModelParameter>
+              <y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="30.0" distanceToCenter="true" position="center" ratio="0.23459266172695797" segment="0"/>
+            </y:ModelParameter>
+            <y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/>
+          </y:EdgeLabel>
+          <y:BendStyle smoothed="false"/>
+        </y:PolyLineEdge>
+      </data>
+    </edge>
+    <edge id="n4::e0" source="n4::n0" target="n4::n1">
+      <data key="d10">
+        <y:PolyLineEdge>
+          <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
+          <y:LineStyle color="#666666" type="line" width="2.0"/>
+          <y:Arrows source="none" target="standard"/>
+          <y:EdgeLabel alignment="center" backgroundColor="#FFEFD6" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasLineColor="false" height="18.1328125" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="11.587890625" x="-5.793964385986328" y="4.999985313415493">5<y:LabelModel>
+              <y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/>
+            </y:LabelModel>
+            <y:ModelParameter>
+              <y:SmartEdgeLabelModelParameter angle="0.0" distance="30.0" distanceToCenter="true" position="center" ratio="0.0" segment="0"/>
+            </y:ModelParameter>
+            <y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/>
+          </y:EdgeLabel>
+          <y:BendStyle smoothed="false"/>
+        </y:PolyLineEdge>
+      </data>
+    </edge>
+    <edge id="n4::e1" source="n4::n1" target="n4::n2">
+      <data key="d10">
+        <y:PolyLineEdge>
+          <y:Path sx="0.0" sy="0.0" tx="0.0" ty="-81.01828954355172"/>
+          <y:LineStyle color="#666666" type="line" width="2.0"/>
+          <y:Arrows source="none" target="standard"/>
+          <y:EdgeLabel alignment="center" backgroundColor="#FFEFD6" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasLineColor="false" height="18.1328125" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="11.587890625" x="-5.903311505104057" y="5.037729263305664">7<y:LabelModel>
+              <y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/>
+            </y:LabelModel>
+            <y:ModelParameter>
+              <y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="30.0" distanceToCenter="false" position="center" ratio="0.0" segment="0"/>
+            </y:ModelParameter>
+            <y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/>
+          </y:EdgeLabel>
+          <y:BendStyle smoothed="false"/>
+        </y:PolyLineEdge>
+      </data>
+    </edge>
+    <edge id="n4::n2::e0" source="n4::n2::n0" target="n4::n2::n1">
+      <data key="d10">
+        <y:PolyLineEdge>
+          <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
+          <y:LineStyle color="#666666" type="line" width="2.0"/>
+          <y:Arrows source="none" target="standard"/>
+          <y:BendStyle smoothed="false"/>
+        </y:PolyLineEdge>
+      </data>
+    </edge>
+    <edge id="n8::e0" source="n8::n0" target="n8::n1">
+      <data key="d10">
+        <y:PolyLineEdge>
+          <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
+          <y:LineStyle color="#666666" type="line" width="2.0"/>
+          <y:Arrows source="none" target="standard"/>
+          <y:BendStyle smoothed="false"/>
+        </y:PolyLineEdge>
+      </data>
+    </edge>
+  </graph>
+  <data key="d0">
+    <y:Resources>
+      <y:Resource id="1">&lt;?xml version="1.0" encoding="utf-8"?&gt;
+&lt;svg version="1.1" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+	 width="57px" height="66px" viewBox="0 0 57 66" enable-background="new 0 0 57 66" xml:space="preserve"&gt;
+&lt;g&gt;
+	
+		&lt;linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="26.3799" y1="-2276.8809" x2="27.6209" y2="-2306.6792" gradientTransform="matrix(1 0 0 -1 0.2803 -2252.9199)"&gt;
+		&lt;stop  offset="0.2711" style="stop-color:#FFAB4F"/&gt;
+		&lt;stop  offset="1" style="stop-color:#FFD28F"/&gt;
+	&lt;/linearGradient&gt;
+	&lt;path fill="url(#SVGID_1_)" stroke="#ED9135" stroke-miterlimit="10" d="M49.529,51.225c-4.396-4.396-10.951-5.884-12.063-6.109
+		V37.8H19.278c0,0,0.038,6.903,0,6.868c0,0-6.874,0.997-12.308,6.432C1.378,56.691,0.5,62.77,0.5,62.77
+		c0,1.938,1.575,3.492,3.523,3.492h48.51c1.947,0,3.521-1.558,3.521-3.492C56.055,62.768,54.211,55.906,49.529,51.225z"/&gt;
+	&lt;path id="body_13_" fill="#ECECEC" stroke="#9B9B9B" stroke-miterlimit="10" d="M0.5,62.768c0,1.938,1.575,3.494,3.523,3.494h48.51
+		c1.947,0,3.521-1.559,3.521-3.494c0,0-1.844-6.861-6.525-11.543c-4.815-4.813-11.244-6.146-11.244-6.146
+		c-1.771,1.655-5.61,3.802-10.063,3.802c-4.453,0-8.292-2.146-10.063-3.802c0,0-5.755,0.586-11.189,6.021
+		C1.378,56.689,0.5,62.768,0.5,62.768z"/&gt;
+	&lt;path fill="#2068A3" stroke="#2068A3" d="M28.106,33.487c-8.112,0-12.688,4.312-12.688,10.437c0,7.422,12.688,10.438,12.688,10.438
+		s14.688-3.016,14.688-10.438C42.793,38.75,36.215,33.487,28.106,33.487z M26.288,53.051c0,0-7.135-2.093-8.805-7.201
+		c-0.222-0.682,0.147-1.156,0.795-1.521V37.8h20.188v6.663c0.235,0.352,1.109,0.737,1.229,1.387
+		C40.445,49.917,26.288,53.051,26.288,53.051z"/&gt;
+	
+		&lt;radialGradient id="SVGID_2_" cx="14.2417" cy="9.1006" r="53.247" gradientTransform="matrix(1 0 0 -1 0.04 65.1543)" gradientUnits="userSpaceOnUse"&gt;
+		&lt;stop  offset="0" style="stop-color:#74AEEE"/&gt;
+		&lt;stop  offset="1" style="stop-color:#2068A3"/&gt;
+	&lt;/radialGradient&gt;
+	&lt;path fill="url(#SVGID_2_)" stroke="#2068A3" stroke-miterlimit="10" d="M49.529,51.225c-2.239-2.24-5.041-3.724-7.396-4.67
+		c-2.854,5.51-14.022,7.807-14.022,7.807s-10.472-2.484-12.387-8.514c-2.439,0.771-5.787,2.287-8.749,5.25
+		c-5.592,5.592-6.47,11.67-6.47,11.67c0,1.938,1.575,3.492,3.523,3.492h48.51c1.947,0,3.521-1.558,3.521-3.492
+		C56.055,62.768,54.211,55.906,49.529,51.225z"/&gt;
+	&lt;path fill="#5491CF" stroke="#2068A3" d="M13.404,44.173c1.15-1.81,2.039-3.832,3.332-5.397c-0.514,1.027-1.669,4.084-1.669,5.148
+		c0,5.186,10.366,9.079,14.688,10.438c-3.472,1.627-9.134-1.498-11.335-2.36c-3.601-1.419-4.071-3.063-5.89-4.854
+		C12.523,47.135,12.878,45,13.404,44.173z"/&gt;
+	&lt;path fill="#5491CF" stroke="#2068A3" d="M45.777,43.924c-1.317-1.568-5.11-9.424-6.604-6.617c0.516,1.025,3.617,3.693,3.617,6.617
+		c0,5.186-10.27,8.576-16.698,9.145c1.429,4.938,11.372,1.293,13.804-0.313c3.563-2.354,4.563-5.133,7.854-3.705
+		C47.754,49.045,48.006,46.574,45.777,43.924z"/&gt;
+	&lt;path fill="none" stroke="#2068A3" stroke-linecap="round" d="M30.777,54.167c0.357,0.836-0.153,1.983-0.352,2.813
+		c-0.256,1.084-0.072,2.104,0.102,3.186c0.164,1.02,0.156,2.107,0.25,3.167c0.082,0.916,0.482,1.849,0.357,2.75"/&gt;
+	&lt;path fill="none" stroke="#2068A3" stroke-linecap="round" d="M23.695,53.417c-0.508,0.584-0.476,2.209-0.398,3
+		c0.116,1.183,0.456,2.099,0.333,3.333c-0.192,1.943,0.154,4.479-0.436,6.333"/&gt;
+	
+		&lt;radialGradient id="face_x5F_white_1_" cx="27.623" cy="-2278.646" r="23.425" fx="23.0534" fy="-2281.1357" gradientTransform="matrix(1 0 0 -1 0.2803 -2252.9199)" gradientUnits="userSpaceOnUse"&gt;
+		&lt;stop  offset="0" style="stop-color:#FFD28F"/&gt;
+		&lt;stop  offset="1" style="stop-color:#FFAB4F"/&gt;
+	&lt;/radialGradient&gt;
+	&lt;path id="face_x5F_white_3_" fill="url(#face_x5F_white_1_)" stroke="#ED9135" stroke-miterlimit="10" d="M43.676,23.357
+		c0.086,10.2-6.738,18.52-15.25,18.586c-8.5,0.068-15.464-8.146-15.55-18.344C12.794,13.4,19.618,5.079,28.123,5.012
+		C36.627,4.945,43.59,13.158,43.676,23.357z"/&gt;
+	
+		&lt;linearGradient id="face_highlight_1_" gradientUnits="userSpaceOnUse" x1="5761.7578" y1="11330.6484" x2="5785.3872" y2="11424.0977" gradientTransform="matrix(0.275 0 0 0.2733 -1558.9874 -3088.4209)"&gt;
+		&lt;stop  offset="0" style="stop-color:#FFFFFF;stop-opacity:0.24"/&gt;
+		&lt;stop  offset="1" style="stop-color:#FFFFFF;stop-opacity:0.16"/&gt;
+	&lt;/linearGradient&gt;
+	&lt;path id="face_highlight_3_" fill="url(#face_highlight_1_)" d="M27.958,6.333c-6.035,0.047-10.747,4.493-12.787,10.386
+		c-0.664,1.919-0.294,4.043,0.98,5.629c2.73,3.398,5.729,6.283,9.461,8.088c3.137,1.518,7.535,2.385,11.893,1.247
+		c2.274-0.592,3.988-2.459,4.375-4.766c0.187-1.094,0.293-2.289,0.283-3.553C42.083,13.952,36.271,6.268,27.958,6.333z"/&gt;
+	&lt;path id="Hair_Young_Brown_1_" fill="#CC9869" stroke="#99724F" stroke-linecap="round" stroke-linejoin="round" d="M20.278,13.25
+		c3.417,4.333,9.333,6.917,9.333,6.917l-1.417-3.5c0,0,7.094,4.691,8.083,4.333c0.968-0.2-1.082-3.807-1.082-3.807
+		s3.138,1.795,4.854,3.969c1.803,2.28,4.285,3.504,4.285,3.504S47.027,2.719,27.289,2.744C8.278,2.709,12.058,27.678,12.058,27.678
+		L14.695,17c0,0,0.914,5.757,1.399,4.875C17.861,15.211,18.861,11.5,20.278,13.25z"/&gt;
+	&lt;path fill="#4B4B4B" stroke="#4B4B4B" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="M28.105,2
+		C22.464,2,20.2,4.246,18.13,5.533C29.753,2.865,41.152,10.375,44.46,20.5C44.459,16.875,44.459,2,28.105,2z"/&gt;
+	&lt;path fill="#9B9B9B" stroke="#4B4B4B" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="M11.151,17.751
+		C12.878,8.25,18.686,6.309,25.273,7.127C31.295,7.875,36.93,10.491,44.459,20.5C37.777,7.125,20.278-3.375,9.903,3.921
+		C5.569,6.97,4.903,13.375,11.151,17.751z"/&gt;
+&lt;/g&gt;
+&lt;/svg&gt;
+</y:Resource>
+      <y:Resource id="2">&lt;?xml version="1.0" encoding="utf-8"?&gt;
+&lt;svg version="1.1"
+	 xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
+	 x="0px" y="0px" width="41px" height="48px" viewBox="-0.875 -0.887 41 48" enable-background="new -0.875 -0.887 41 48"
+	 xml:space="preserve"&gt;
+&lt;defs&gt;
+&lt;/defs&gt;
+&lt;linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="642.8008" y1="-979.1445" x2="682.0508" y2="-979.1445" gradientTransform="matrix(1 0 0 -1 -642.8008 -939.4756)"&gt;
+	&lt;stop  offset="0" style="stop-color:#3C89C9"/&gt;
+	&lt;stop  offset="0.1482" style="stop-color:#60A6DD"/&gt;
+	&lt;stop  offset="0.3113" style="stop-color:#81C1F0"/&gt;
+	&lt;stop  offset="0.4476" style="stop-color:#95D1FB"/&gt;
+	&lt;stop  offset="0.5394" style="stop-color:#9CD7FF"/&gt;
+	&lt;stop  offset="0.636" style="stop-color:#98D4FD"/&gt;
+	&lt;stop  offset="0.7293" style="stop-color:#8DCAF6"/&gt;
+	&lt;stop  offset="0.8214" style="stop-color:#79BBEB"/&gt;
+	&lt;stop  offset="0.912" style="stop-color:#5EA5DC"/&gt;
+	&lt;stop  offset="1" style="stop-color:#3C89C9"/&gt;
+&lt;/linearGradient&gt;
+&lt;path fill="url(#SVGID_1_)" d="M19.625,36.763C8.787,36.763,0,34.888,0,32.575v10c0,2.313,8.787,4.188,19.625,4.188
+	c10.839,0,19.625-1.875,19.625-4.188v-10C39.25,34.888,30.464,36.763,19.625,36.763z"/&gt;
+&lt;linearGradient id="SVGID_2_" gradientUnits="userSpaceOnUse" x1="642.8008" y1="-973.1445" x2="682.0508" y2="-973.1445" gradientTransform="matrix(1 0 0 -1 -642.8008 -939.4756)"&gt;
+	&lt;stop  offset="0" style="stop-color:#9CD7FF"/&gt;
+	&lt;stop  offset="0.0039" style="stop-color:#9DD7FF"/&gt;
+	&lt;stop  offset="0.2273" style="stop-color:#BDE5FF"/&gt;
+	&lt;stop  offset="0.4138" style="stop-color:#D1EEFF"/&gt;
+	&lt;stop  offset="0.5394" style="stop-color:#D9F1FF"/&gt;
+	&lt;stop  offset="0.6155" style="stop-color:#D5EFFE"/&gt;
+	&lt;stop  offset="0.6891" style="stop-color:#C9E7FA"/&gt;
+	&lt;stop  offset="0.7617" style="stop-color:#B6DAF3"/&gt;
+	&lt;stop  offset="0.8337" style="stop-color:#9AC8EA"/&gt;
+	&lt;stop  offset="0.9052" style="stop-color:#77B0DD"/&gt;
+	&lt;stop  offset="0.9754" style="stop-color:#4D94CF"/&gt;
+	&lt;stop  offset="1" style="stop-color:#3C89C9"/&gt;
+&lt;/linearGradient&gt;
+&lt;path fill="url(#SVGID_2_)" d="M19.625,36.763c10.839,0,19.625-1.875,19.625-4.188l-1.229-2c0,2.168-8.235,3.927-18.396,3.927
+	c-9.481,0-17.396-1.959-18.396-3.927l-1.229,2C0,34.888,8.787,36.763,19.625,36.763z"/&gt;
+&lt;path fill="#3C89C9" d="M19.625,26.468c10.16,0,19.625,2.775,19.625,2.775c-0.375,2.721-5.367,5.438-19.554,5.438
+	c-12.125,0-18.467-2.484-19.541-4.918C-0.127,29.125,9.465,26.468,19.625,26.468z"/&gt;
+&lt;linearGradient id="SVGID_3_" gradientUnits="userSpaceOnUse" x1="642.8008" y1="-965.6948" x2="682.0508" y2="-965.6948" gradientTransform="matrix(1 0 0 -1 -642.8008 -939.4756)"&gt;
+	&lt;stop  offset="0" style="stop-color:#3C89C9"/&gt;
+	&lt;stop  offset="0.1482" style="stop-color:#60A6DD"/&gt;
+	&lt;stop  offset="0.3113" style="stop-color:#81C1F0"/&gt;
+	&lt;stop  offset="0.4476" style="stop-color:#95D1FB"/&gt;
+	&lt;stop  offset="0.5394" style="stop-color:#9CD7FF"/&gt;
+	&lt;stop  offset="0.636" style="stop-color:#98D4FD"/&gt;
+	&lt;stop  offset="0.7293" style="stop-color:#8DCAF6"/&gt;
+	&lt;stop  offset="0.8214" style="stop-color:#79BBEB"/&gt;
+	&lt;stop  offset="0.912" style="stop-color:#5EA5DC"/&gt;
+	&lt;stop  offset="1" style="stop-color:#3C89C9"/&gt;
+&lt;/linearGradient&gt;
+&lt;path fill="url(#SVGID_3_)" d="M19.625,23.313C8.787,23.313,0,21.438,0,19.125v10c0,2.313,8.787,4.188,19.625,4.188
+	c10.839,0,19.625-1.875,19.625-4.188v-10C39.25,21.438,30.464,23.313,19.625,23.313z"/&gt;
+&lt;linearGradient id="SVGID_4_" gradientUnits="userSpaceOnUse" x1="642.8008" y1="-959.6948" x2="682.0508" y2="-959.6948" gradientTransform="matrix(1 0 0 -1 -642.8008 -939.4756)"&gt;
+	&lt;stop  offset="0" style="stop-color:#9CD7FF"/&gt;
+	&lt;stop  offset="0.0039" style="stop-color:#9DD7FF"/&gt;
+	&lt;stop  offset="0.2273" style="stop-color:#BDE5FF"/&gt;
+	&lt;stop  offset="0.4138" style="stop-color:#D1EEFF"/&gt;
+	&lt;stop  offset="0.5394" style="stop-color:#D9F1FF"/&gt;
+	&lt;stop  offset="0.6155" style="stop-color:#D5EFFE"/&gt;
+	&lt;stop  offset="0.6891" style="stop-color:#C9E7FA"/&gt;
+	&lt;stop  offset="0.7617" style="stop-color:#B6DAF3"/&gt;
+	&lt;stop  offset="0.8337" style="stop-color:#9AC8EA"/&gt;
+	&lt;stop  offset="0.9052" style="stop-color:#77B0DD"/&gt;
+	&lt;stop  offset="0.9754" style="stop-color:#4D94CF"/&gt;
+	&lt;stop  offset="1" style="stop-color:#3C89C9"/&gt;
+&lt;/linearGradient&gt;
+&lt;path fill="url(#SVGID_4_)" d="M19.625,23.313c10.839,0,19.625-1.875,19.625-4.188l-1.229-2c0,2.168-8.235,3.926-18.396,3.926
+	c-9.481,0-17.396-1.959-18.396-3.926l-1.229,2C0,21.438,8.787,23.313,19.625,23.313z"/&gt;
+&lt;path fill="#3C89C9" d="M19.476,13.019c10.161,0,19.625,2.775,19.625,2.775c-0.375,2.721-5.367,5.438-19.555,5.438
+	c-12.125,0-18.467-2.485-19.541-4.918C-0.277,15.674,9.316,13.019,19.476,13.019z"/&gt;
+&lt;linearGradient id="SVGID_5_" gradientUnits="userSpaceOnUse" x1="642.8008" y1="-952.4946" x2="682.0508" y2="-952.4946" gradientTransform="matrix(1 0 0 -1 -642.8008 -939.4756)"&gt;
+	&lt;stop  offset="0" style="stop-color:#3C89C9"/&gt;
+	&lt;stop  offset="0.1482" style="stop-color:#60A6DD"/&gt;
+	&lt;stop  offset="0.3113" style="stop-color:#81C1F0"/&gt;
+	&lt;stop  offset="0.4476" style="stop-color:#95D1FB"/&gt;
+	&lt;stop  offset="0.5394" style="stop-color:#9CD7FF"/&gt;
+	&lt;stop  offset="0.636" style="stop-color:#98D4FD"/&gt;
+	&lt;stop  offset="0.7293" style="stop-color:#8DCAF6"/&gt;
+	&lt;stop  offset="0.8214" style="stop-color:#79BBEB"/&gt;
+	&lt;stop  offset="0.912" style="stop-color:#5EA5DC"/&gt;
+	&lt;stop  offset="1" style="stop-color:#3C89C9"/&gt;
+&lt;/linearGradient&gt;
+&lt;path fill="url(#SVGID_5_)" d="M19.625,10.113C8.787,10.113,0,8.238,0,5.925v10c0,2.313,8.787,4.188,19.625,4.188
+	c10.839,0,19.625-1.875,19.625-4.188v-10C39.25,8.238,30.464,10.113,19.625,10.113z"/&gt;
+&lt;linearGradient id="SVGID_6_" gradientUnits="userSpaceOnUse" x1="642.8008" y1="-946.4946" x2="682.0508" y2="-946.4946" gradientTransform="matrix(1 0 0 -1 -642.8008 -939.4756)"&gt;
+	&lt;stop  offset="0" style="stop-color:#9CD7FF"/&gt;
+	&lt;stop  offset="0.0039" style="stop-color:#9DD7FF"/&gt;
+	&lt;stop  offset="0.2273" style="stop-color:#BDE5FF"/&gt;
+	&lt;stop  offset="0.4138" style="stop-color:#D1EEFF"/&gt;
+	&lt;stop  offset="0.5394" style="stop-color:#D9F1FF"/&gt;
+	&lt;stop  offset="0.6155" style="stop-color:#D5EFFE"/&gt;
+	&lt;stop  offset="0.6891" style="stop-color:#C9E7FA"/&gt;
+	&lt;stop  offset="0.7617" style="stop-color:#B6DAF3"/&gt;
+	&lt;stop  offset="0.8337" style="stop-color:#9AC8EA"/&gt;
+	&lt;stop  offset="0.9052" style="stop-color:#77B0DD"/&gt;
+	&lt;stop  offset="0.9754" style="stop-color:#4D94CF"/&gt;
+	&lt;stop  offset="1" style="stop-color:#3C89C9"/&gt;
+&lt;/linearGradient&gt;
+&lt;path fill="url(#SVGID_6_)" d="M19.625,10.113c10.839,0,19.625-1.875,19.625-4.188l-1.229-2c0,2.168-8.235,3.926-18.396,3.926
+	c-9.481,0-17.396-1.959-18.396-3.926L0,5.925C0,8.238,8.787,10.113,19.625,10.113z"/&gt;
+&lt;linearGradient id="SVGID_7_" gradientUnits="userSpaceOnUse" x1="644.0293" y1="-943.4014" x2="680.8223" y2="-943.4014" gradientTransform="matrix(1 0 0 -1 -642.8008 -939.4756)"&gt;
+	&lt;stop  offset="0" style="stop-color:#9CD7FF"/&gt;
+	&lt;stop  offset="1" style="stop-color:#3C89C9"/&gt;
+&lt;/linearGradient&gt;
+&lt;ellipse fill="url(#SVGID_7_)" cx="19.625" cy="3.926" rx="18.396" ry="3.926"/&gt;
+&lt;path opacity="0.24" fill="#FFFFFF" enable-background="new    " d="M31.04,45.982c0,0-4.354,0.664-7.29,0.781
+	c-3.125,0.125-8.952,0-8.952,0l-2.384-10.292l0.044-2.108l-1.251-1.154L9.789,23.024l-0.082-0.119L9.5,20.529l-1.65-1.254
+	L5.329,8.793c0,0,4.213,0.903,7.234,1.07s8.375,0.25,8.375,0.25l3,9.875l-0.25,1.313l1.063,2.168l2.312,9.645l-0.521,1.416
+	l1.46,1.834L31.04,45.982z"/&gt;
+&lt;/svg&gt;
+</y:Resource>
+    </y:Resources>
+  </data>
+</graphml>
diff --git a/docs/guide-pt-BR/images/application-lifecycle.png b/docs/guide-pt-BR/images/application-lifecycle.png
new file mode 100644
index 0000000..143ed38
Binary files /dev/null and b/docs/guide-pt-BR/images/application-lifecycle.png differ
diff --git a/docs/guide-pt-BR/images/application-structure.graphml b/docs/guide-pt-BR/images/application-structure.graphml
new file mode 100644
index 0000000..3a2f19d
--- /dev/null
+++ b/docs/guide-pt-BR/images/application-structure.graphml
@@ -0,0 +1,429 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<graphml xmlns="http://graphml.graphdrawing.org/xmlns" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:y="http://www.yworks.com/xml/graphml" xmlns:yed="http://www.yworks.com/xml/yed/3" xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns http://www.yworks.com/xml/schema/graphml/1.1/ygraphml.xsd">
+  <!--Created by yEd 3.13-->
+  <key for="graphml" id="d0" yfiles.type="resources"/>
+  <key for="port" id="d1" yfiles.type="portgraphics"/>
+  <key for="port" id="d2" yfiles.type="portgeometry"/>
+  <key for="port" id="d3" yfiles.type="portuserdata"/>
+  <key attr.name="url" attr.type="string" for="node" id="d4"/>
+  <key attr.name="description" attr.type="string" for="node" id="d5"/>
+  <key for="node" id="d6" yfiles.type="nodegraphics"/>
+  <key attr.name="Description" attr.type="string" for="graph" id="d7"/>
+  <key attr.name="url" attr.type="string" for="edge" id="d8"/>
+  <key attr.name="description" attr.type="string" for="edge" id="d9"/>
+  <key for="edge" id="d10" yfiles.type="edgegraphics"/>
+  <graph edgedefault="directed" id="G">
+    <data key="d7"/>
+    <node id="n0">
+      <data key="d6">
+        <y:ShapeNode>
+          <y:Geometry height="35.0" width="100.0" x="872.1807999999999" y="-14.764159999999947"/>
+          <y:Fill color="#FFCC99" transparent="false"/>
+          <y:BorderStyle hasColor="false" type="line" width="1.0"/>
+          <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="32.265625" modelName="custom" textColor="#000000" visible="true" width="76.3984375" x="11.80078125" y="1.3671875">componente
+da aplicação<y:LabelModel>
+              <y:SmartNodeLabelModel distance="4.0"/>
+            </y:LabelModel>
+            <y:ModelParameter>
+              <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
+            </y:ModelParameter>
+          </y:NodeLabel>
+          <y:Shape type="roundrectangle"/>
+        </y:ShapeNode>
+      </data>
+    </node>
+    <node id="n1">
+      <data key="d6">
+        <y:ShapeNode>
+          <y:Geometry height="35.0" width="100.0" x="702.4223999999999" y="-91.97375999999994"/>
+          <y:Fill color="#FFCC00" transparent="false"/>
+          <y:BorderStyle hasColor="false" type="line" width="1.0"/>
+          <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="32.265625" modelName="custom" textColor="#000000" visible="true" width="54.71875" x="22.640625" y="1.3671875">script de
+entrada<y:LabelModel>
+              <y:SmartNodeLabelModel distance="4.0"/>
+            </y:LabelModel>
+            <y:ModelParameter>
+              <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
+            </y:ModelParameter>
+          </y:NodeLabel>
+          <y:Shape type="roundrectangle"/>
+        </y:ShapeNode>
+      </data>
+    </node>
+    <node id="n2">
+      <data key="d6">
+        <y:ShapeNode>
+          <y:Geometry height="35.0" width="100.0" x="702.4223999999999" y="-14.764159999999947"/>
+          <y:Fill color="#FF9900" transparent="false"/>
+          <y:BorderStyle hasColor="false" type="line" width="1.0"/>
+          <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" modelName="custom" textColor="#000000" visible="true" width="58.03515625" x="20.982421875" y="8.43359375">aplicação<y:LabelModel>
+              <y:SmartNodeLabelModel distance="4.0"/>
+            </y:LabelModel>
+            <y:ModelParameter>
+              <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
+            </y:ModelParameter>
+          </y:NodeLabel>
+          <y:Shape type="roundrectangle"/>
+        </y:ShapeNode>
+      </data>
+    </node>
+    <node id="n3">
+      <data key="d6">
+        <y:ShapeNode>
+          <y:Geometry height="35.0" width="100.0" x="702.4223999999999" y="62.44544000000004"/>
+          <y:Fill color="#FF9900" transparent="false"/>
+          <y:BorderStyle hasColor="false" type="line" width="1.0"/>
+          <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" modelName="custom" textColor="#000000" visible="true" width="60.267578125" x="19.8662109375" y="8.433593750000007">controller<y:LabelModel>
+              <y:SmartNodeLabelModel distance="4.0"/>
+            </y:LabelModel>
+            <y:ModelParameter>
+              <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
+            </y:ModelParameter>
+          </y:NodeLabel>
+          <y:Shape type="roundrectangle"/>
+        </y:ShapeNode>
+      </data>
+    </node>
+    <node id="n4">
+      <data key="d6">
+        <y:ShapeNode>
+          <y:Geometry height="35.0" width="100.0" x="872.1807999999999" y="62.44544000000005"/>
+          <y:Fill color="#FFCC99" transparent="false"/>
+          <y:BorderStyle hasColor="false" type="line" width="1.0"/>
+          <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" modelName="custom" textColor="#000000" visible="true" width="32.119140625" x="33.9404296875" y="8.43359375">filtro<y:LabelModel>
+              <y:SmartNodeLabelModel distance="4.0"/>
+            </y:LabelModel>
+            <y:ModelParameter>
+              <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
+            </y:ModelParameter>
+          </y:NodeLabel>
+          <y:Shape type="roundrectangle"/>
+        </y:ShapeNode>
+      </data>
+    </node>
+    <node id="n5">
+      <data key="d6">
+        <y:ShapeNode>
+          <y:Geometry height="35.0" width="100.0" x="532.664" y="23.901600000000087"/>
+          <y:Fill color="#FF9900" transparent="false"/>
+          <y:BorderStyle hasColor="false" type="line" width="1.0"/>
+          <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" modelName="custom" textColor="#000000" visible="true" width="48.4140625" x="25.79296875" y="8.43359375">módulo<y:LabelModel>
+              <y:SmartNodeLabelModel distance="4.0"/>
+            </y:LabelModel>
+            <y:ModelParameter>
+              <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
+            </y:ModelParameter>
+          </y:NodeLabel>
+          <y:Shape type="roundrectangle"/>
+        </y:ShapeNode>
+      </data>
+    </node>
+    <node id="n6">
+      <data key="d6">
+        <y:ShapeNode>
+          <y:Geometry height="35.0" width="100.0" x="618.4047999999991" y="139.65504000000004"/>
+          <y:Fill color="#99CC00" transparent="false"/>
+          <y:BorderStyle hasColor="false" type="line" width="1.0"/>
+          <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" modelName="custom" textColor="#000000" visible="true" width="29.611328125" x="35.1943359375" y="8.43359375">view<y:LabelModel>
+              <y:SmartNodeLabelModel distance="4.0"/>
+            </y:LabelModel>
+            <y:ModelParameter>
+              <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
+            </y:ModelParameter>
+          </y:NodeLabel>
+          <y:Shape type="roundrectangle"/>
+        </y:ShapeNode>
+      </data>
+    </node>
+    <node id="n7">
+      <data key="d6">
+        <y:ShapeNode>
+          <y:Geometry height="35.0" width="100.0" x="786.161599999999" y="139.65504000000004"/>
+          <y:Fill color="#99CCFF" transparent="false"/>
+          <y:BorderStyle hasColor="false" type="line" width="1.0"/>
+          <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" modelName="custom" textColor="#000000" visible="true" width="40.28125" x="29.859375" y="8.43359375">model<y:LabelModel>
+              <y:SmartNodeLabelModel distance="4.0"/>
+            </y:LabelModel>
+            <y:ModelParameter>
+              <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
+            </y:ModelParameter>
+          </y:NodeLabel>
+          <y:Shape type="roundrectangle"/>
+        </y:ShapeNode>
+      </data>
+    </node>
+    <node id="n8">
+      <data key="d6">
+        <y:ShapeNode>
+          <y:Geometry height="35.0" width="100.0" x="532.664" y="216.86464000000004"/>
+          <y:Fill color="#99CC00" transparent="false"/>
+          <y:BorderStyle hasColor="false" type="line" width="1.0"/>
+          <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" modelName="custom" textColor="#000000" visible="true" width="42.923828125" x="28.5380859375" y="8.43359375">widget<y:LabelModel>
+              <y:SmartNodeLabelModel distance="4.0"/>
+            </y:LabelModel>
+            <y:ModelParameter>
+              <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
+            </y:ModelParameter>
+          </y:NodeLabel>
+          <y:Shape type="roundrectangle"/>
+        </y:ShapeNode>
+      </data>
+    </node>
+    <node id="n9">
+      <data key="d6">
+        <y:ShapeNode>
+          <y:Geometry height="35.0" width="100.0" x="702.4223999999999" y="216.86464000000004"/>
+          <y:Fill color="#99CC00" transparent="false"/>
+          <y:BorderStyle hasColor="false" type="line" width="1.0"/>
+          <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" modelName="custom" textColor="#000000" visible="true" width="77.986328125" x="11.0068359375" y="8.43359375">asset bundle<y:LabelModel>
+              <y:SmartNodeLabelModel distance="4.0"/>
+            </y:LabelModel>
+            <y:ModelParameter>
+              <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
+            </y:ModelParameter>
+          </y:NodeLabel>
+          <y:Shape type="roundrectangle"/>
+        </y:ShapeNode>
+      </data>
+    </node>
+    <edge id="e0" source="n2" target="n1">
+      <data key="d10">
+        <y:PolyLineEdge>
+          <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
+          <y:LineStyle color="#000000" type="line" width="1.0"/>
+          <y:Arrows source="none" target="diamond"/>
+          <y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="22.97265625" x="2.5392475585936154" y="-25.635106635436955">1:1<y:LabelModel>
+              <y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/>
+            </y:LabelModel>
+            <y:ModelParameter>
+              <y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="14.025600000000054" distanceToCenter="true" position="right" ratio="0.17992697197425173" segment="-1"/>
+            </y:ModelParameter>
+            <y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/>
+          </y:EdgeLabel>
+          <y:BendStyle smoothed="false"/>
+        </y:PolyLineEdge>
+      </data>
+    </edge>
+    <edge id="e1" source="n0" target="n2">
+      <data key="d10">
+        <y:PolyLineEdge>
+          <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
+          <y:LineStyle color="#000000" type="line" width="1.0"/>
+          <y:Arrows source="none" target="diamond"/>
+          <y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="24.96484375" x="-48.97602119140629" y="-23.09200633216852">0..*<y:LabelModel>
+              <y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/>
+            </y:LabelModel>
+            <y:ModelParameter>
+              <y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="14.025599999999994" distanceToCenter="true" position="right" ratio="0.5470891790487767" segment="-1"/>
+            </y:ModelParameter>
+            <y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/>
+          </y:EdgeLabel>
+          <y:BendStyle smoothed="false"/>
+        </y:PolyLineEdge>
+      </data>
+    </edge>
+    <edge id="e2" source="n5" target="n2">
+      <data key="d10">
+        <y:PolyLineEdge>
+          <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
+          <y:LineStyle color="#000000" type="line" width="1.0"/>
+          <y:Arrows source="none" target="diamond"/>
+          <y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="24.96484375" x="15.193962466822086" y="30.674065521861735">0..*<y:LabelModel>
+              <y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/>
+            </y:LabelModel>
+            <y:ModelParameter>
+              <y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="44.894496863129426" distanceToCenter="true" position="right" ratio="0.25416574623968574" segment="-1"/>
+            </y:ModelParameter>
+            <y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/>
+          </y:EdgeLabel>
+          <y:BendStyle smoothed="false"/>
+        </y:PolyLineEdge>
+      </data>
+    </edge>
+    <edge id="e3" source="n3" target="n2">
+      <data key="d10">
+        <y:PolyLineEdge>
+          <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
+          <y:LineStyle color="#000000" type="line" width="1.0"/>
+          <y:Arrows source="none" target="diamond"/>
+          <y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="24.96484375" x="2.7719538085937074" y="-26.04470613037104">1..*<y:LabelModel>
+              <y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/>
+            </y:LabelModel>
+            <y:ModelParameter>
+              <y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="15.254400000000032" distanceToCenter="true" position="right" ratio="0.2090245199765919" segment="-1"/>
+            </y:ModelParameter>
+            <y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/>
+          </y:EdgeLabel>
+          <y:BendStyle smoothed="false"/>
+        </y:PolyLineEdge>
+      </data>
+    </edge>
+    <edge id="e4" source="n3" target="n5">
+      <data key="d10">
+        <y:PolyLineEdge>
+          <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
+          <y:LineStyle color="#000000" type="line" width="1.0"/>
+          <y:Arrows source="none" target="diamond"/>
+          <y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="24.96484375" x="-57.39355288912964" y="-63.846685518352906">0..*<y:LabelModel>
+              <y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/>
+            </y:LabelModel>
+            <y:ModelParameter>
+              <y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="43.47658308018222" distanceToCenter="true" position="right" ratio="0.881412889692355" segment="-1"/>
+            </y:ModelParameter>
+            <y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/>
+          </y:EdgeLabel>
+          <y:BendStyle smoothed="false"/>
+        </y:PolyLineEdge>
+      </data>
+    </edge>
+    <edge id="e5" source="n5" target="n5">
+      <data key="d10">
+        <y:PolyLineEdge>
+          <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0">
+            <y:Point x="582.664" y="-3.598399999999913"/>
+          </y:Path>
+          <y:LineStyle color="#000000" type="line" width="1.0"/>
+          <y:Arrows source="none" target="diamond"/>
+          <y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="24.96484375" x="-17.888505566406252" y="-42.41848039245597">0..*<y:LabelModel>
+              <y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/>
+            </y:LabelModel>
+            <y:ModelParameter>
+              <y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="16.483200000000004" distanceToCenter="true" position="right" ratio="5.822600000000001" segment="-2"/>
+            </y:ModelParameter>
+            <y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/>
+          </y:EdgeLabel>
+          <y:BendStyle smoothed="false"/>
+        </y:PolyLineEdge>
+      </data>
+    </edge>
+    <edge id="e6" source="n6" target="n3">
+      <data key="d10">
+        <y:PolyLineEdge>
+          <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
+          <y:LineStyle color="#000000" type="line" width="1.0"/>
+          <y:Arrows source="none" target="diamond"/>
+          <y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="24.96484375" x="-12.223966589163297" y="-24.76668258085064">0..*<y:LabelModel>
+              <y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/>
+            </y:LabelModel>
+            <y:ModelParameter>
+              <y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="11.385360101663515" distanceToCenter="true" position="left" ratio="0.10670293331985262" segment="-1"/>
+            </y:ModelParameter>
+            <y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/>
+          </y:EdgeLabel>
+          <y:BendStyle smoothed="false"/>
+        </y:PolyLineEdge>
+      </data>
+    </edge>
+    <edge id="e7" source="n7" target="n3">
+      <data key="d10">
+        <y:PolyLineEdge>
+          <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
+          <y:LineStyle color="#000000" type="line" width="1.0"/>
+          <y:Arrows source="none" target="diamond"/>
+          <y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="24.96484375" x="-9.313146217848043" y="-26.098020948340803">0..*<y:LabelModel>
+              <y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/>
+            </y:LabelModel>
+            <y:ModelParameter>
+              <y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="14.669798038586146" distanceToCenter="true" position="right" ratio="0.1670192242704811" segment="-1"/>
+            </y:ModelParameter>
+            <y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/>
+          </y:EdgeLabel>
+          <y:BendStyle smoothed="false"/>
+        </y:PolyLineEdge>
+      </data>
+    </edge>
+    <edge id="e8" source="n9" target="n6">
+      <data key="d10">
+        <y:PolyLineEdge>
+          <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
+          <y:LineStyle color="#000000" type="line" width="1.0"/>
+          <y:Arrows source="none" target="diamond"/>
+          <y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="24.96484375" x="-9.797233483694527" y="-25.82443358614151">0..*<y:LabelModel>
+              <y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/>
+            </y:LabelModel>
+            <y:ModelParameter>
+              <y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="14.15599378957306" distanceToCenter="true" position="right" ratio="0.15481212573620068" segment="-1"/>
+            </y:ModelParameter>
+            <y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/>
+          </y:EdgeLabel>
+          <y:BendStyle smoothed="false"/>
+        </y:PolyLineEdge>
+      </data>
+    </edge>
+    <edge id="e9" source="n8" target="n6">
+      <data key="d10">
+        <y:PolyLineEdge>
+          <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
+          <y:LineStyle color="#000000" type="line" width="1.0"/>
+          <y:Arrows source="none" target="diamond"/>
+          <y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="24.96484375" x="-15.633139430038" y="-24.050683308790553">0..*<y:LabelModel>
+              <y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/>
+            </y:LabelModel>
+            <y:ModelParameter>
+              <y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="13.24330808446041" distanceToCenter="true" position="left" ratio="0.05506723556297327" segment="-1"/>
+            </y:ModelParameter>
+            <y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/>
+          </y:EdgeLabel>
+          <y:BendStyle smoothed="false"/>
+        </y:PolyLineEdge>
+      </data>
+    </edge>
+    <edge id="e10" source="n4" target="n3">
+      <data key="d10">
+        <y:PolyLineEdge>
+          <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
+          <y:LineStyle color="#000000" type="line" width="1.0"/>
+          <y:Arrows source="none" target="diamond"/>
+          <y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="24.96484375" x="-47.337621191406356" y="-22.682408449706998">0..*<y:LabelModel>
+              <y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/>
+            </y:LabelModel>
+            <y:ModelParameter>
+              <y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="13.616000000000007" distanceToCenter="true" position="right" ratio="0.5" segment="0"/>
+            </y:ModelParameter>
+            <y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/>
+          </y:EdgeLabel>
+          <y:BendStyle smoothed="false"/>
+        </y:PolyLineEdge>
+      </data>
+    </edge>
+    <edge id="e11" source="n9" target="n8">
+      <data key="d10">
+        <y:PolyLineEdge>
+          <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
+          <y:LineStyle color="#000000" type="line" width="1.0"/>
+          <y:Arrows source="none" target="diamond"/>
+          <y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="24.96484375" x="-44.265598339843905" y="-19.61040553222648">0..*<y:LabelModel>
+              <y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/>
+            </y:LabelModel>
+            <y:ModelParameter>
+              <y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="10.543999999999983" distanceToCenter="true" position="right" ratio="0.4117077892835431" segment="-1"/>
+            </y:ModelParameter>
+            <y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/>
+          </y:EdgeLabel>
+          <y:BendStyle smoothed="false"/>
+        </y:PolyLineEdge>
+      </data>
+    </edge>
+    <edge id="e12" source="n7" target="n6">
+      <data key="d10">
+        <y:PolyLineEdge>
+          <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
+          <y:LineStyle color="#000000" type="line" width="1.0"/>
+          <y:Arrows source="none" target="diamond"/>
+          <y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="24.96484375" x="-44.81721357421975" y="-19.610410805664003">0..*<y:LabelModel>
+              <y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/>
+            </y:LabelModel>
+            <y:ModelParameter>
+              <y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="10.543999999999983" distanceToCenter="true" position="right" ratio="0.4531592446547025" segment="-1"/>
+            </y:ModelParameter>
+            <y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/>
+          </y:EdgeLabel>
+          <y:BendStyle smoothed="false"/>
+        </y:PolyLineEdge>
+      </data>
+    </edge>
+  </graph>
+  <data key="d0">
+    <y:Resources/>
+  </data>
+</graphml>
diff --git a/docs/guide-pt-BR/images/application-structure.png b/docs/guide-pt-BR/images/application-structure.png
new file mode 100644
index 0000000..51e3c9d
Binary files /dev/null and b/docs/guide-pt-BR/images/application-structure.png differ
diff --git a/docs/guide-pt-BR/images/gii-entry.png b/docs/guide-pt-BR/images/gii-entry.png
new file mode 100644
index 0000000..0a145f9
Binary files /dev/null and b/docs/guide-pt-BR/images/gii-entry.png differ
diff --git a/docs/guide-pt-BR/images/gii-preview.png b/docs/guide-pt-BR/images/gii-preview.png
new file mode 100644
index 0000000..aa0a7b4
Binary files /dev/null and b/docs/guide-pt-BR/images/gii-preview.png differ
diff --git a/docs/guide-pt-BR/images/rbac-access-check-1.graphml b/docs/guide-pt-BR/images/rbac-access-check-1.graphml
new file mode 100644
index 0000000..4407851
--- /dev/null
+++ b/docs/guide-pt-BR/images/rbac-access-check-1.graphml
@@ -0,0 +1,368 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<graphml xmlns="http://graphml.graphdrawing.org/xmlns" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:y="http://www.yworks.com/xml/graphml" xmlns:yed="http://www.yworks.com/xml/yed/3" xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns http://www.yworks.com/xml/schema/graphml/1.1/ygraphml.xsd">
+  <!--Created by yEd 3.12.2-->
+  <key for="graphml" id="d0" yfiles.type="resources"/>
+  <key for="port" id="d1" yfiles.type="portgraphics"/>
+  <key for="port" id="d2" yfiles.type="portgeometry"/>
+  <key for="port" id="d3" yfiles.type="portuserdata"/>
+  <key attr.name="url" attr.type="string" for="node" id="d4"/>
+  <key attr.name="description" attr.type="string" for="node" id="d5"/>
+  <key for="node" id="d6" yfiles.type="nodegraphics"/>
+  <key attr.name="Description" attr.type="string" for="graph" id="d7"/>
+  <key attr.name="url" attr.type="string" for="edge" id="d8"/>
+  <key attr.name="description" attr.type="string" for="edge" id="d9"/>
+  <key for="edge" id="d10" yfiles.type="edgegraphics"/>
+  <graph edgedefault="directed" id="G">
+    <data key="d7"/>
+    <node id="n0">
+      <data key="d6">
+        <y:ShapeNode>
+          <y:Geometry height="69.0" width="103.0" x="34.0" y="-11.5"/>
+          <y:Fill color="#ADF4A6" transparent="false"/>
+          <y:BorderStyle color="#FF0000" type="line" width="1.0"/>
+          <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.701171875" modelName="custom" textColor="#000000" visible="true" width="36.68359375" x="33.158203125" y="25.1494140625">admin<y:LabelModel>
+              <y:SmartNodeLabelModel distance="4.0"/>
+            </y:LabelModel>
+            <y:ModelParameter>
+              <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
+            </y:ModelParameter>
+          </y:NodeLabel>
+          <y:Shape type="roundrectangle"/>
+        </y:ShapeNode>
+      </data>
+    </node>
+    <node id="n1">
+      <data key="d6">
+        <y:ShapeNode>
+          <y:Geometry height="69.0" width="103.0" x="193.0" y="-11.5"/>
+          <y:Fill color="#ADF4A6" transparent="false"/>
+          <y:BorderStyle color="#FF0000" type="line" width="1.0"/>
+          <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.701171875" modelName="custom" textColor="#000000" visible="true" width="38.025390625" x="32.4873046875" y="25.1494140625">author<y:LabelModel>
+              <y:SmartNodeLabelModel distance="4.0"/>
+            </y:LabelModel>
+            <y:ModelParameter>
+              <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
+            </y:ModelParameter>
+          </y:NodeLabel>
+          <y:Shape type="roundrectangle"/>
+        </y:ShapeNode>
+      </data>
+    </node>
+    <node id="n2">
+      <data key="d6">
+        <y:SVGNode>
+          <y:Geometry height="64.53585815429688" width="56.560157775878906" x="216.21992111206055" y="-132.03585815429688"/>
+          <y:Fill color="#CCCCFF" transparent="false"/>
+          <y:BorderStyle color="#000000" type="line" width="1.0"/>
+          <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.701171875" modelName="custom" textColor="#000000" visible="true" width="62.37109375" x="-2.905467987060547" y="-27.814727783203125">John, ID=2<y:LabelModel>
+              <y:SmartNodeLabelModel distance="4.0"/>
+            </y:LabelModel>
+            <y:ModelParameter>
+              <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.5" nodeRatioX="0.0" nodeRatioY="-0.5" offsetX="0.0" offsetY="-9.113555908203125" upX="0.0" upY="-1.0"/>
+            </y:ModelParameter>
+          </y:NodeLabel>
+          <y:SVGNodeProperties usingVisualBounds="true"/>
+          <y:SVGModel svgBoundsPolicy="0">
+            <y:SVGContent refid="1"/>
+          </y:SVGModel>
+        </y:SVGNode>
+      </data>
+    </node>
+    <node id="n3">
+      <data key="d6">
+        <y:SVGNode>
+          <y:Geometry height="66.76200103759766" width="56.554100036621094" x="57.22294998168945" y="-133.14892959594727"/>
+          <y:Fill color="#CCCCFF" transparent="false"/>
+          <y:BorderStyle color="#000000" type="line" width="1.0"/>
+          <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.701171875" modelName="custom" textColor="#000000" visible="true" width="62.37109375" x="-2.908496856689453" y="-27.701656341552734">Jane, ID=1<y:LabelModel>
+              <y:SmartNodeLabelModel distance="4.0"/>
+            </y:LabelModel>
+            <y:ModelParameter>
+              <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.5" nodeRatioX="0.0" nodeRatioY="-0.5" offsetX="0.0" offsetY="-9.000484466552734" upX="0.0" upY="-1.0"/>
+            </y:ModelParameter>
+          </y:NodeLabel>
+          <y:SVGNodeProperties usingVisualBounds="true"/>
+          <y:SVGModel svgBoundsPolicy="0">
+            <y:SVGContent refid="2"/>
+          </y:SVGModel>
+        </y:SVGNode>
+      </data>
+    </node>
+    <node id="n4">
+      <data key="d6">
+        <y:ShapeNode>
+          <y:Geometry height="69.0" width="103.0" x="34.0" y="197.5"/>
+          <y:Fill color="#99CCFF" transparent="false"/>
+          <y:BorderStyle color="#000000" type="line" width="1.0"/>
+          <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.701171875" modelName="custom" textColor="#000000" visible="true" width="64.71484375" x="19.142578125" y="25.1494140625">updatePost<y:LabelModel>
+              <y:SmartNodeLabelModel distance="4.0"/>
+            </y:LabelModel>
+            <y:ModelParameter>
+              <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
+            </y:ModelParameter>
+          </y:NodeLabel>
+          <y:Shape type="roundrectangle"/>
+        </y:ShapeNode>
+      </data>
+    </node>
+    <node id="n5">
+      <data key="d6">
+        <y:ShapeNode>
+          <y:Geometry height="69.0" width="103.0" x="193.0" y="197.5"/>
+          <y:Fill color="#99CCFF" transparent="false"/>
+          <y:BorderStyle color="#000000" type="line" width="1.0"/>
+          <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.701171875" modelName="custom" textColor="#000000" visible="true" width="89.388671875" x="6.8056640625" y="25.1494140625">updateOwnPost<y:LabelModel>
+              <y:SmartNodeLabelModel distance="4.0"/>
+            </y:LabelModel>
+            <y:ModelParameter>
+              <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
+            </y:ModelParameter>
+          </y:NodeLabel>
+          <y:Shape type="roundrectangle"/>
+        </y:ShapeNode>
+      </data>
+    </node>
+    <node id="n6">
+      <data key="d6">
+        <y:ShapeNode>
+          <y:Geometry height="69.0" width="103.0" x="352.0" y="197.5"/>
+          <y:Fill color="#99CCFF" transparent="false"/>
+          <y:BorderStyle color="#FF0000" type="line" width="1.0"/>
+          <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.701171875" modelName="custom" textColor="#000000" visible="true" width="61.36328125" x="20.818359375" y="25.1494140625">createPost<y:LabelModel>
+              <y:SmartNodeLabelModel distance="4.0"/>
+            </y:LabelModel>
+            <y:ModelParameter>
+              <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
+            </y:ModelParameter>
+          </y:NodeLabel>
+          <y:Shape type="roundrectangle"/>
+        </y:ShapeNode>
+      </data>
+    </node>
+    <node id="n7">
+      <data key="d6">
+        <y:ShapeNode>
+          <y:Geometry height="29.535858154296875" width="103.0" x="193.0" y="167.96414184570312"/>
+          <y:Fill color="#FFCC00" transparent="false"/>
+          <y:BorderStyle color="#000000" type="line" width="1.0"/>
+          <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.701171875" modelName="custom" textColor="#000000" visible="true" width="64.03515625" x="19.482421875" y="5.4173431396484375">AuthorRule<y:LabelModel>
+              <y:SmartNodeLabelModel distance="4.0"/>
+            </y:LabelModel>
+            <y:ModelParameter>
+              <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
+            </y:ModelParameter>
+          </y:NodeLabel>
+          <y:Shape type="roundrectangle"/>
+        </y:ShapeNode>
+      </data>
+    </node>
+    <edge id="e0" source="n4" target="n0">
+      <data key="d10">
+        <y:PolyLineEdge>
+          <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
+          <y:LineStyle color="#000000" type="line" width="1.0"/>
+          <y:Arrows source="none" target="standard"/>
+          <y:BendStyle smoothed="false"/>
+        </y:PolyLineEdge>
+      </data>
+    </edge>
+    <edge id="e1" source="n4" target="n5">
+      <data key="d10">
+        <y:PolyLineEdge>
+          <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
+          <y:LineStyle color="#000000" type="line" width="1.0"/>
+          <y:Arrows source="none" target="standard"/>
+          <y:BendStyle smoothed="false"/>
+        </y:PolyLineEdge>
+      </data>
+    </edge>
+    <edge id="e2" source="n1" target="n0">
+      <data key="d10">
+        <y:PolyLineEdge>
+          <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
+          <y:LineStyle color="#FF0000" type="line" width="1.0"/>
+          <y:Arrows source="none" target="standard"/>
+          <y:BendStyle smoothed="false"/>
+        </y:PolyLineEdge>
+      </data>
+    </edge>
+    <edge id="e3" source="n6" target="n1">
+      <data key="d10">
+        <y:PolyLineEdge>
+          <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0">
+            <y:Point x="403.5" y="23.0"/>
+          </y:Path>
+          <y:LineStyle color="#FF0000" type="line" width="1.0"/>
+          <y:Arrows source="none" target="standard"/>
+          <y:BendStyle smoothed="false"/>
+        </y:PolyLineEdge>
+      </data>
+    </edge>
+    <edge id="e4" source="n1" target="n2">
+      <data key="d10">
+        <y:PolyLineEdge>
+          <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
+          <y:LineStyle color="#000000" type="line" width="1.0"/>
+          <y:Arrows source="none" target="standard"/>
+          <y:BendStyle smoothed="false"/>
+        </y:PolyLineEdge>
+      </data>
+    </edge>
+    <edge id="e5" source="n0" target="n3">
+      <data key="d10">
+        <y:PolyLineEdge>
+          <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
+          <y:LineStyle color="#FF0000" type="line" width="1.0"/>
+          <y:Arrows source="none" target="standard"/>
+          <y:BendStyle smoothed="false"/>
+        </y:PolyLineEdge>
+      </data>
+    </edge>
+    <edge id="e6" source="n7" target="n1">
+      <data key="d10">
+        <y:PolyLineEdge>
+          <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
+          <y:LineStyle color="#000000" type="line" width="1.0"/>
+          <y:Arrows source="none" target="standard"/>
+          <y:BendStyle smoothed="false"/>
+        </y:PolyLineEdge>
+      </data>
+    </edge>
+  </graph>
+  <data key="d0">
+    <y:Resources>
+      <y:Resource id="1">&lt;?xml version="1.0" encoding="utf-8"?&gt;
+&lt;svg version="1.1" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+	 width="57px" height="65px" viewBox="0 0 57 65" enable-background="new 0 0 57 65" xml:space="preserve"&gt;
+&lt;g&gt;
+	
+		&lt;linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="26.3398" y1="3115.7266" x2="27.5807" y2="3145.5239" gradientTransform="matrix(1 0 0 1 0.3203 -3091.7656)"&gt;
+		&lt;stop  offset="0.2711" style="stop-color:#FFAB4F"/&gt;
+		&lt;stop  offset="1" style="stop-color:#FFD28F"/&gt;
+	&lt;/linearGradient&gt;
+	&lt;path fill="url(#SVGID_1_)" stroke="#ED9135" stroke-miterlimit="10" d="M49.529,51.225c-4.396-4.396-10.951-5.884-12.063-6.109
+		V37.8H19.278c0,0,0.038,6.903,0,6.868c0,0-6.874,0.997-12.308,6.432C1.378,56.691,0.5,62.77,0.5,62.77
+		c0,1.938,1.575,3.492,3.523,3.492h48.51c1.947,0,3.521-1.558,3.521-3.492C56.055,62.768,54.211,55.906,49.529,51.225z"/&gt;
+	&lt;path id="body_18_" fill="#ECECEC" stroke="#9B9B9B" stroke-miterlimit="10" d="M0.5,62.768c0,1.938,1.575,3.494,3.523,3.494h48.51
+		c1.947,0,3.521-1.559,3.521-3.494c0,0-1.844-6.861-6.525-11.543c-4.815-4.813-11.244-6.146-11.244-6.146
+		c-1.771,1.655-5.61,3.802-10.063,3.802c-4.453,0-8.292-2.146-10.063-3.802c0,0-5.755,0.586-11.189,6.021
+		C1.378,56.689,0.5,62.768,0.5,62.768z"/&gt;
+	
+		&lt;radialGradient id="SVGID_2_" cx="22.6621" cy="21.707" r="17.7954" gradientTransform="matrix(1 0 0 -1 0.04 64.1543)" gradientUnits="userSpaceOnUse"&gt;
+		&lt;stop  offset="0" style="stop-color:#FCB57A"/&gt;
+		&lt;stop  offset="1" style="stop-color:#FF8C36"/&gt;
+	&lt;/radialGradient&gt;
+	&lt;path fill="url(#SVGID_2_)" stroke="#E55E03" d="M28.106,33.486c-8.112,0-12.688,4.313-12.688,10.438
+		c0,7.422,12.688,10.438,12.688,10.438s14.688-3.016,14.688-10.438C42.793,38.75,36.215,33.486,28.106,33.486z M26.288,53.051
+		c0,0-7.135-2.093-8.805-7.201c-0.222-0.682,0.147-1.156,0.795-1.521V37.8h20.188v6.663c0.235,0.352,1.109,0.737,1.229,1.387
+		C40.445,49.917,26.288,53.051,26.288,53.051z"/&gt;
+	
+		&lt;radialGradient id="SVGID_3_" cx="15.2056" cy="831.1875" r="32.3071" gradientTransform="matrix(1 0 0 1 0.0801 -773.6914)" gradientUnits="userSpaceOnUse"&gt;
+		&lt;stop  offset="0" style="stop-color:#FCB57A"/&gt;
+		&lt;stop  offset="1" style="stop-color:#FF8C36"/&gt;
+	&lt;/radialGradient&gt;
+	&lt;path fill="url(#SVGID_3_)" stroke="#E55E03" d="M49.529,51.225c-2.239-2.24-5.041-3.724-7.396-4.67
+		c-2.854,5.51-14.021,7.807-14.021,7.807s-10.472-2.483-12.387-8.514c-2.439,0.771-5.787,2.287-8.749,5.25
+		c-5.592,5.592-6.47,11.67-6.47,11.67c0,1.938,1.575,3.492,3.523,3.492h48.51c1.946,0,3.521-1.558,3.521-3.492
+		C56.055,62.768,54.211,55.906,49.529,51.225z"/&gt;
+	
+		&lt;radialGradient id="SVGID_4_" cx="17.0723" cy="18.4907" r="11.8931" gradientTransform="matrix(1 0 0 -1 0.04 64.1543)" gradientUnits="userSpaceOnUse"&gt;
+		&lt;stop  offset="0" style="stop-color:#FCB57A"/&gt;
+		&lt;stop  offset="1" style="stop-color:#FF8C36"/&gt;
+	&lt;/radialGradient&gt;
+	&lt;path fill="url(#SVGID_4_)" stroke="#E55E03" d="M13.404,44.173c1.15-1.81,2.039-3.832,3.332-5.397
+		c-0.514,1.027-1.669,4.084-1.669,5.148c0,5.186,10.366,9.079,14.688,10.438c-3.472,1.627-9.134-1.498-11.334-2.359
+		c-3.601-1.419-4.071-3.063-5.89-4.854C12.523,47.135,12.878,45,13.404,44.173z"/&gt;
+	
+		&lt;radialGradient id="SVGID_5_" cx="31.8184" cy="19.3525" r="14.63" gradientTransform="matrix(1 0 0 -1 0.04 64.1543)" gradientUnits="userSpaceOnUse"&gt;
+		&lt;stop  offset="0" style="stop-color:#FCB57A"/&gt;
+		&lt;stop  offset="1" style="stop-color:#FF8C36"/&gt;
+	&lt;/radialGradient&gt;
+	&lt;path fill="url(#SVGID_5_)" stroke="#E55E03" d="M45.777,43.924c-1.317-1.568-5.11-9.424-6.604-6.617
+		c0.516,1.025,3.617,3.693,3.617,6.617c0,5.186-10.271,8.576-16.699,9.145c1.429,4.938,11.373,1.293,13.805-0.313
+		c3.563-2.354,4.563-5.133,7.854-3.705C47.754,49.045,48.006,46.574,45.777,43.924z"/&gt;
+	
+		&lt;radialGradient id="SVGID_6_" cx="30.4893" cy="4.8721" r="5.2028" gradientTransform="matrix(1 0 0 -1 0.04 64.1543)" gradientUnits="userSpaceOnUse"&gt;
+		&lt;stop  offset="0" style="stop-color:#FCB57A"/&gt;
+		&lt;stop  offset="1" style="stop-color:#FF8C36"/&gt;
+	&lt;/radialGradient&gt;
+	&lt;path fill="url(#SVGID_6_)" stroke="#E55E03" d="M30.777,54.167c0.357,0.836-0.153,1.983-0.352,2.813
+		c-0.256,1.084-0.072,2.104,0.102,3.186c0.164,1.02,0.156,2.107,0.25,3.167c0.082,0.916,0.482,1.849,0.357,2.75"/&gt;
+	
+		&lt;radialGradient id="SVGID_7_" cx="23.2871" cy="5.3008" r="5.5143" gradientTransform="matrix(1 0 0 -1 0.04 64.1543)" gradientUnits="userSpaceOnUse"&gt;
+		&lt;stop  offset="0" style="stop-color:#FCB57A"/&gt;
+		&lt;stop  offset="1" style="stop-color:#FF8C36"/&gt;
+	&lt;/radialGradient&gt;
+	&lt;path fill="url(#SVGID_7_)" stroke="#E55E03" d="M23.695,53.417c-0.508,0.584-0.476,2.209-0.398,3
+		c0.116,1.183,0.456,2.099,0.333,3.333c-0.192,1.943,0.154,4.479-0.436,6.333"/&gt;
+	
+		&lt;radialGradient id="face_x5F_white_1_" cx="27.5835" cy="3117.4922" r="23.425" fx="23.0139" fy="3115.0024" gradientTransform="matrix(1 0 0 1 0.3203 -3091.7656)" gradientUnits="userSpaceOnUse"&gt;
+		&lt;stop  offset="0" style="stop-color:#FFD28F"/&gt;
+		&lt;stop  offset="1" style="stop-color:#FFAB4F"/&gt;
+	&lt;/radialGradient&gt;
+	&lt;path id="face_x5F_white_3_" fill="url(#face_x5F_white_1_)" stroke="#ED9135" stroke-miterlimit="10" d="M43.676,23.357
+		c0.086,10.2-6.738,18.52-15.25,18.586c-8.5,0.068-15.464-8.146-15.55-18.344C12.794,13.4,19.618,5.079,28.123,5.012
+		C36.627,4.945,43.59,13.158,43.676,23.357z"/&gt;
+	
+		&lt;linearGradient id="face_highlight_1_" gradientUnits="userSpaceOnUse" x1="6468.501" y1="-12291.5195" x2="6492.1304" y2="-12384.9688" gradientTransform="matrix(0.275 0 0 -0.2733 -1752.8849 -3351.7349)"&gt;
+		&lt;stop  offset="0" style="stop-color:#FFFFFF;stop-opacity:0.24"/&gt;
+		&lt;stop  offset="1" style="stop-color:#FFFFFF;stop-opacity:0.16"/&gt;
+	&lt;/linearGradient&gt;
+	&lt;path id="face_highlight_3_" fill="url(#face_highlight_1_)" d="M28.415,5.625c-6.035,0.047-10.747,4.493-12.787,10.386
+		c-0.664,1.919-0.294,4.043,0.98,5.629c2.73,3.398,5.729,6.283,9.461,8.088c3.137,1.518,7.535,2.385,11.893,1.247
+		c2.274-0.592,3.988-2.459,4.375-4.766c0.187-1.094,0.293-2.289,0.283-3.553C42.54,13.244,36.729,5.56,28.415,5.625z"/&gt;
+	&lt;path id="Hair_Young_Black_1_" fill="#5C5C5C" stroke="#353535" stroke-linecap="round" stroke-linejoin="round" d="M20.278,13.25
+		c3.417,4.333,9.333,6.917,9.333,6.917l-1.417-3.5c0,0,7.094,4.691,8.083,4.333c0.968-0.2-1.082-3.807-1.082-3.807
+		s3.138,1.795,4.854,3.969c1.803,2.28,4.285,3.504,4.285,3.504S47.027,2.719,27.289,2.744C8.278,2.709,12.058,27.678,12.058,27.678
+		L14.695,17c0,0,0.914,5.757,1.399,4.875C17.861,15.211,18.861,11.5,20.278,13.25z"/&gt;
+&lt;/g&gt;
+&lt;/svg&gt;
+</y:Resource>
+      <y:Resource id="2">&lt;?xml version="1.0" encoding="utf-8"?&gt;
+&lt;svg version="1.1" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+	 width="57px" height="67px" viewBox="0 0 57 67" enable-background="new 0 0 57 67" xml:space="preserve"&gt;
+&lt;g&gt;
+	
+		&lt;linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="26.3398" y1="3115.7266" x2="27.5807" y2="3145.5239" gradientTransform="matrix(1 0 0 1 0.3203 -3091.7656)"&gt;
+		&lt;stop  offset="0.2711" style="stop-color:#FFAB4F"/&gt;
+		&lt;stop  offset="1" style="stop-color:#FFD28F"/&gt;
+	&lt;/linearGradient&gt;
+	&lt;path fill="url(#SVGID_1_)" stroke="#ED9135" stroke-miterlimit="10" d="M49.529,51.225c-4.396-4.396-10.951-5.884-12.063-6.109
+		V37.8H19.278c0,0,0.038,6.903,0,6.868c0,0-6.874,0.997-12.308,6.432C1.378,56.691,0.5,62.77,0.5,62.77
+		c0,1.938,1.575,3.492,3.523,3.492h48.51c1.947,0,3.521-1.558,3.521-3.492C56.055,62.768,54.211,55.906,49.529,51.225z"/&gt;
+	
+		&lt;radialGradient id="face_x5F_white_1_" cx="27.5835" cy="3117.4922" r="23.425" fx="23.0139" fy="3115.0024" gradientTransform="matrix(1 0 0 1 0.3203 -3091.7656)" gradientUnits="userSpaceOnUse"&gt;
+		&lt;stop  offset="0" style="stop-color:#FFD28F"/&gt;
+		&lt;stop  offset="1" style="stop-color:#FFAB4F"/&gt;
+	&lt;/radialGradient&gt;
+	&lt;path id="face_x5F_white_3_" fill="url(#face_x5F_white_1_)" stroke="#ED9135" stroke-miterlimit="10" d="M43.676,23.357
+		c0.086,10.199-6.738,18.52-15.25,18.586c-8.5,0.068-15.464-8.146-15.55-18.344C12.794,13.4,19.618,5.079,28.123,5.012
+		C36.627,4.945,43.59,13.158,43.676,23.357z"/&gt;
+	
+		&lt;linearGradient id="face_highlight_1_" gradientUnits="userSpaceOnUse" x1="6468.5" y1="-12286.8594" x2="6492.1294" y2="-12380.3086" gradientTransform="matrix(0.275 0 0 -0.2733 -1752.8849 -3350.4617)"&gt;
+		&lt;stop  offset="0" style="stop-color:#FFFFFF;stop-opacity:0.24"/&gt;
+		&lt;stop  offset="1" style="stop-color:#FFFFFF;stop-opacity:0.16"/&gt;
+	&lt;/linearGradient&gt;
+	&lt;path id="face_highlight_3_" fill="url(#face_highlight_1_)" d="M28.415,5.625c-6.035,0.047-10.747,4.493-12.787,10.386
+		c-0.664,1.919-0.294,4.043,0.98,5.629c2.73,3.398,5.729,6.283,9.461,8.088c3.137,1.518,7.535,2.385,11.893,1.247
+		c2.274-0.592,3.988-2.459,4.375-4.766c0.187-1.094,0.293-2.289,0.283-3.553C42.54,13.244,36.729,5.56,28.415,5.625z"/&gt;
+	&lt;path id="Hair_Female_1_Red_1_" fill="#FAE1AA" stroke="#E2B354" stroke-linecap="round" stroke-linejoin="round" d="M28.372,0.5
+		C17.537,0.5,8.269,7.748,9.153,26.125c0.563,6.563,5.862,12.042,9.366,13.531c-2.929-10.968-0.304-25.021-0.585-25.526
+		c-0.281-0.505,3.536,6.728,3.536,6.728l3.183-8.312c5.541,4.28,0.393,11.309,1.049,11.058c4.26-1.631,5.34-9.228,5.34-9.228
+		s2.729,3.657,2.701,5.504c-0.054,3.562,2.194-6.067,2.194-6.067l1.027,2.031c6.727,9.822,3.684,16.208,1.648,22.781
+		c15.666-0.703,12.291-10.48,9.66-18.407C43.59,6.092,39.206,0.5,28.372,0.5z"/&gt;
+	
+		&lt;linearGradient id="body_1_" gradientUnits="userSpaceOnUse" x1="95.9063" y1="-3134.2153" x2="31.5133" y2="-3134.2153" gradientTransform="matrix(0.9852 0 0 -0.9852 -34.4844 -3031.9851)"&gt;
+		&lt;stop  offset="0" style="stop-color:#49AD33"/&gt;
+		&lt;stop  offset="1" style="stop-color:#C2DA92"/&gt;
+	&lt;/linearGradient&gt;
+	&lt;path id="body_8_" fill="url(#body_1_)" stroke="#008D33" d="M0.5,62.768c0,1.938,1.575,3.494,3.523,3.494h48.51
+		c1.947,0,3.521-1.559,3.521-3.494c0,0-1.844-6.861-6.525-11.543c-4.815-4.813-8.244-5.146-8.244-5.146
+		c-1.444,6.983-8.555,8.786-13.007,8.786s-11.322-2.643-11.941-9.439c0,0-4.559,1.199-9.367,5.674
+		C1.378,56.689,0.5,62.768,0.5,62.768z"/&gt;
+&lt;/g&gt;
+&lt;/svg&gt;
+</y:Resource>
+    </y:Resources>
+  </data>
+</graphml>
diff --git a/docs/guide-pt-BR/images/rbac-access-check-1.png b/docs/guide-pt-BR/images/rbac-access-check-1.png
new file mode 100644
index 0000000..77ad551
Binary files /dev/null and b/docs/guide-pt-BR/images/rbac-access-check-1.png differ
diff --git a/docs/guide-pt-BR/images/rbac-access-check-2.graphml b/docs/guide-pt-BR/images/rbac-access-check-2.graphml
new file mode 100644
index 0000000..c521d42
--- /dev/null
+++ b/docs/guide-pt-BR/images/rbac-access-check-2.graphml
@@ -0,0 +1,368 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<graphml xmlns="http://graphml.graphdrawing.org/xmlns" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:y="http://www.yworks.com/xml/graphml" xmlns:yed="http://www.yworks.com/xml/yed/3" xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns http://www.yworks.com/xml/schema/graphml/1.1/ygraphml.xsd">
+  <!--Created by yEd 3.12.2-->
+  <key for="graphml" id="d0" yfiles.type="resources"/>
+  <key for="port" id="d1" yfiles.type="portgraphics"/>
+  <key for="port" id="d2" yfiles.type="portgeometry"/>
+  <key for="port" id="d3" yfiles.type="portuserdata"/>
+  <key attr.name="url" attr.type="string" for="node" id="d4"/>
+  <key attr.name="description" attr.type="string" for="node" id="d5"/>
+  <key for="node" id="d6" yfiles.type="nodegraphics"/>
+  <key attr.name="Description" attr.type="string" for="graph" id="d7"/>
+  <key attr.name="url" attr.type="string" for="edge" id="d8"/>
+  <key attr.name="description" attr.type="string" for="edge" id="d9"/>
+  <key for="edge" id="d10" yfiles.type="edgegraphics"/>
+  <graph edgedefault="directed" id="G">
+    <data key="d7"/>
+    <node id="n0">
+      <data key="d6">
+        <y:ShapeNode>
+          <y:Geometry height="69.0" width="103.0" x="34.0" y="-11.5"/>
+          <y:Fill color="#ADF4A6" transparent="false"/>
+          <y:BorderStyle color="#000000" type="line" width="1.0"/>
+          <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.701171875" modelName="custom" textColor="#000000" visible="true" width="36.68359375" x="33.158203125" y="25.1494140625">admin<y:LabelModel>
+              <y:SmartNodeLabelModel distance="4.0"/>
+            </y:LabelModel>
+            <y:ModelParameter>
+              <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
+            </y:ModelParameter>
+          </y:NodeLabel>
+          <y:Shape type="roundrectangle"/>
+        </y:ShapeNode>
+      </data>
+    </node>
+    <node id="n1">
+      <data key="d6">
+        <y:ShapeNode>
+          <y:Geometry height="69.0" width="103.0" x="193.0" y="-11.5"/>
+          <y:Fill color="#ADF4A6" transparent="false"/>
+          <y:BorderStyle color="#FF0000" type="line" width="1.0"/>
+          <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.701171875" modelName="custom" textColor="#000000" visible="true" width="38.025390625" x="32.4873046875" y="25.1494140625">author<y:LabelModel>
+              <y:SmartNodeLabelModel distance="4.0"/>
+            </y:LabelModel>
+            <y:ModelParameter>
+              <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
+            </y:ModelParameter>
+          </y:NodeLabel>
+          <y:Shape type="roundrectangle"/>
+        </y:ShapeNode>
+      </data>
+    </node>
+    <node id="n2">
+      <data key="d6">
+        <y:SVGNode>
+          <y:Geometry height="64.53585815429688" width="56.560157775878906" x="216.21992111206055" y="-132.03585815429688"/>
+          <y:Fill color="#CCCCFF" transparent="false"/>
+          <y:BorderStyle color="#000000" type="line" width="1.0"/>
+          <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.701171875" modelName="custom" textColor="#000000" visible="true" width="62.37109375" x="-2.905467987060547" y="-27.814727783203125">John, ID=2<y:LabelModel>
+              <y:SmartNodeLabelModel distance="4.0"/>
+            </y:LabelModel>
+            <y:ModelParameter>
+              <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.5" nodeRatioX="0.0" nodeRatioY="-0.5" offsetX="0.0" offsetY="-9.113555908203125" upX="0.0" upY="-1.0"/>
+            </y:ModelParameter>
+          </y:NodeLabel>
+          <y:SVGNodeProperties usingVisualBounds="true"/>
+          <y:SVGModel svgBoundsPolicy="0">
+            <y:SVGContent refid="1"/>
+          </y:SVGModel>
+        </y:SVGNode>
+      </data>
+    </node>
+    <node id="n3">
+      <data key="d6">
+        <y:SVGNode>
+          <y:Geometry height="66.76200103759766" width="56.554100036621094" x="57.22294998168945" y="-133.14892959594727"/>
+          <y:Fill color="#CCCCFF" transparent="false"/>
+          <y:BorderStyle color="#000000" type="line" width="1.0"/>
+          <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.701171875" modelName="custom" textColor="#000000" visible="true" width="62.37109375" x="-2.908496856689453" y="-27.701656341552734">Jane, ID=1<y:LabelModel>
+              <y:SmartNodeLabelModel distance="4.0"/>
+            </y:LabelModel>
+            <y:ModelParameter>
+              <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.5" nodeRatioX="0.0" nodeRatioY="-0.5" offsetX="0.0" offsetY="-9.000484466552734" upX="0.0" upY="-1.0"/>
+            </y:ModelParameter>
+          </y:NodeLabel>
+          <y:SVGNodeProperties usingVisualBounds="true"/>
+          <y:SVGModel svgBoundsPolicy="0">
+            <y:SVGContent refid="2"/>
+          </y:SVGModel>
+        </y:SVGNode>
+      </data>
+    </node>
+    <node id="n4">
+      <data key="d6">
+        <y:ShapeNode>
+          <y:Geometry height="69.0" width="103.0" x="34.0" y="197.5"/>
+          <y:Fill color="#99CCFF" transparent="false"/>
+          <y:BorderStyle color="#FF0000" type="line" width="1.0"/>
+          <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.701171875" modelName="custom" textColor="#000000" visible="true" width="64.71484375" x="19.142578125" y="25.1494140625">updatePost<y:LabelModel>
+              <y:SmartNodeLabelModel distance="4.0"/>
+            </y:LabelModel>
+            <y:ModelParameter>
+              <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
+            </y:ModelParameter>
+          </y:NodeLabel>
+          <y:Shape type="roundrectangle"/>
+        </y:ShapeNode>
+      </data>
+    </node>
+    <node id="n5">
+      <data key="d6">
+        <y:ShapeNode>
+          <y:Geometry height="69.0" width="103.0" x="193.0" y="197.5"/>
+          <y:Fill color="#99CCFF" transparent="false"/>
+          <y:BorderStyle color="#FF0000" type="line" width="1.0"/>
+          <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.701171875" modelName="custom" textColor="#000000" visible="true" width="89.388671875" x="6.8056640625" y="25.1494140625">updateOwnPost<y:LabelModel>
+              <y:SmartNodeLabelModel distance="4.0"/>
+            </y:LabelModel>
+            <y:ModelParameter>
+              <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
+            </y:ModelParameter>
+          </y:NodeLabel>
+          <y:Shape type="roundrectangle"/>
+        </y:ShapeNode>
+      </data>
+    </node>
+    <node id="n6">
+      <data key="d6">
+        <y:ShapeNode>
+          <y:Geometry height="69.0" width="103.0" x="352.0" y="197.5"/>
+          <y:Fill color="#99CCFF" transparent="false"/>
+          <y:BorderStyle color="#000000" type="line" width="1.0"/>
+          <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.701171875" modelName="custom" textColor="#000000" visible="true" width="61.36328125" x="20.818359375" y="25.1494140625">createPost<y:LabelModel>
+              <y:SmartNodeLabelModel distance="4.0"/>
+            </y:LabelModel>
+            <y:ModelParameter>
+              <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
+            </y:ModelParameter>
+          </y:NodeLabel>
+          <y:Shape type="roundrectangle"/>
+        </y:ShapeNode>
+      </data>
+    </node>
+    <node id="n7">
+      <data key="d6">
+        <y:ShapeNode>
+          <y:Geometry height="29.535858154296875" width="103.0" x="193.0" y="167.96414184570312"/>
+          <y:Fill color="#FFCC00" transparent="false"/>
+          <y:BorderStyle color="#FF0000" type="line" width="1.0"/>
+          <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.701171875" modelName="custom" textColor="#000000" visible="true" width="64.03515625" x="19.482421875" y="5.4173431396484375">AuthorRule<y:LabelModel>
+              <y:SmartNodeLabelModel distance="4.0"/>
+            </y:LabelModel>
+            <y:ModelParameter>
+              <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
+            </y:ModelParameter>
+          </y:NodeLabel>
+          <y:Shape type="roundrectangle"/>
+        </y:ShapeNode>
+      </data>
+    </node>
+    <edge id="e0" source="n4" target="n0">
+      <data key="d10">
+        <y:PolyLineEdge>
+          <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
+          <y:LineStyle color="#000000" type="line" width="1.0"/>
+          <y:Arrows source="none" target="standard"/>
+          <y:BendStyle smoothed="false"/>
+        </y:PolyLineEdge>
+      </data>
+    </edge>
+    <edge id="e1" source="n4" target="n5">
+      <data key="d10">
+        <y:PolyLineEdge>
+          <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
+          <y:LineStyle color="#FF0000" type="line" width="1.0"/>
+          <y:Arrows source="none" target="standard"/>
+          <y:BendStyle smoothed="false"/>
+        </y:PolyLineEdge>
+      </data>
+    </edge>
+    <edge id="e2" source="n1" target="n0">
+      <data key="d10">
+        <y:PolyLineEdge>
+          <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
+          <y:LineStyle color="#000000" type="line" width="1.0"/>
+          <y:Arrows source="none" target="standard"/>
+          <y:BendStyle smoothed="false"/>
+        </y:PolyLineEdge>
+      </data>
+    </edge>
+    <edge id="e3" source="n6" target="n1">
+      <data key="d10">
+        <y:PolyLineEdge>
+          <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0">
+            <y:Point x="403.5" y="23.0"/>
+          </y:Path>
+          <y:LineStyle color="#000000" type="line" width="1.0"/>
+          <y:Arrows source="none" target="standard"/>
+          <y:BendStyle smoothed="false"/>
+        </y:PolyLineEdge>
+      </data>
+    </edge>
+    <edge id="e4" source="n1" target="n2">
+      <data key="d10">
+        <y:PolyLineEdge>
+          <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
+          <y:LineStyle color="#FF0000" type="line" width="1.0"/>
+          <y:Arrows source="none" target="standard"/>
+          <y:BendStyle smoothed="false"/>
+        </y:PolyLineEdge>
+      </data>
+    </edge>
+    <edge id="e5" source="n0" target="n3">
+      <data key="d10">
+        <y:PolyLineEdge>
+          <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
+          <y:LineStyle color="#000000" type="line" width="1.0"/>
+          <y:Arrows source="none" target="standard"/>
+          <y:BendStyle smoothed="false"/>
+        </y:PolyLineEdge>
+      </data>
+    </edge>
+    <edge id="e6" source="n7" target="n1">
+      <data key="d10">
+        <y:PolyLineEdge>
+          <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
+          <y:LineStyle color="#FF0000" type="line" width="1.0"/>
+          <y:Arrows source="none" target="standard"/>
+          <y:BendStyle smoothed="false"/>
+        </y:PolyLineEdge>
+      </data>
+    </edge>
+  </graph>
+  <data key="d0">
+    <y:Resources>
+      <y:Resource id="1">&lt;?xml version="1.0" encoding="utf-8"?&gt;
+&lt;svg version="1.1" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+	 width="57px" height="65px" viewBox="0 0 57 65" enable-background="new 0 0 57 65" xml:space="preserve"&gt;
+&lt;g&gt;
+	
+		&lt;linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="26.3398" y1="3115.7266" x2="27.5807" y2="3145.5239" gradientTransform="matrix(1 0 0 1 0.3203 -3091.7656)"&gt;
+		&lt;stop  offset="0.2711" style="stop-color:#FFAB4F"/&gt;
+		&lt;stop  offset="1" style="stop-color:#FFD28F"/&gt;
+	&lt;/linearGradient&gt;
+	&lt;path fill="url(#SVGID_1_)" stroke="#ED9135" stroke-miterlimit="10" d="M49.529,51.225c-4.396-4.396-10.951-5.884-12.063-6.109
+		V37.8H19.278c0,0,0.038,6.903,0,6.868c0,0-6.874,0.997-12.308,6.432C1.378,56.691,0.5,62.77,0.5,62.77
+		c0,1.938,1.575,3.492,3.523,3.492h48.51c1.947,0,3.521-1.558,3.521-3.492C56.055,62.768,54.211,55.906,49.529,51.225z"/&gt;
+	&lt;path id="body_18_" fill="#ECECEC" stroke="#9B9B9B" stroke-miterlimit="10" d="M0.5,62.768c0,1.938,1.575,3.494,3.523,3.494h48.51
+		c1.947,0,3.521-1.559,3.521-3.494c0,0-1.844-6.861-6.525-11.543c-4.815-4.813-11.244-6.146-11.244-6.146
+		c-1.771,1.655-5.61,3.802-10.063,3.802c-4.453,0-8.292-2.146-10.063-3.802c0,0-5.755,0.586-11.189,6.021
+		C1.378,56.689,0.5,62.768,0.5,62.768z"/&gt;
+	
+		&lt;radialGradient id="SVGID_2_" cx="22.6621" cy="21.707" r="17.7954" gradientTransform="matrix(1 0 0 -1 0.04 64.1543)" gradientUnits="userSpaceOnUse"&gt;
+		&lt;stop  offset="0" style="stop-color:#FCB57A"/&gt;
+		&lt;stop  offset="1" style="stop-color:#FF8C36"/&gt;
+	&lt;/radialGradient&gt;
+	&lt;path fill="url(#SVGID_2_)" stroke="#E55E03" d="M28.106,33.486c-8.112,0-12.688,4.313-12.688,10.438
+		c0,7.422,12.688,10.438,12.688,10.438s14.688-3.016,14.688-10.438C42.793,38.75,36.215,33.486,28.106,33.486z M26.288,53.051
+		c0,0-7.135-2.093-8.805-7.201c-0.222-0.682,0.147-1.156,0.795-1.521V37.8h20.188v6.663c0.235,0.352,1.109,0.737,1.229,1.387
+		C40.445,49.917,26.288,53.051,26.288,53.051z"/&gt;
+	
+		&lt;radialGradient id="SVGID_3_" cx="15.2056" cy="831.1875" r="32.3071" gradientTransform="matrix(1 0 0 1 0.0801 -773.6914)" gradientUnits="userSpaceOnUse"&gt;
+		&lt;stop  offset="0" style="stop-color:#FCB57A"/&gt;
+		&lt;stop  offset="1" style="stop-color:#FF8C36"/&gt;
+	&lt;/radialGradient&gt;
+	&lt;path fill="url(#SVGID_3_)" stroke="#E55E03" d="M49.529,51.225c-2.239-2.24-5.041-3.724-7.396-4.67
+		c-2.854,5.51-14.021,7.807-14.021,7.807s-10.472-2.483-12.387-8.514c-2.439,0.771-5.787,2.287-8.749,5.25
+		c-5.592,5.592-6.47,11.67-6.47,11.67c0,1.938,1.575,3.492,3.523,3.492h48.51c1.946,0,3.521-1.558,3.521-3.492
+		C56.055,62.768,54.211,55.906,49.529,51.225z"/&gt;
+	
+		&lt;radialGradient id="SVGID_4_" cx="17.0723" cy="18.4907" r="11.8931" gradientTransform="matrix(1 0 0 -1 0.04 64.1543)" gradientUnits="userSpaceOnUse"&gt;
+		&lt;stop  offset="0" style="stop-color:#FCB57A"/&gt;
+		&lt;stop  offset="1" style="stop-color:#FF8C36"/&gt;
+	&lt;/radialGradient&gt;
+	&lt;path fill="url(#SVGID_4_)" stroke="#E55E03" d="M13.404,44.173c1.15-1.81,2.039-3.832,3.332-5.397
+		c-0.514,1.027-1.669,4.084-1.669,5.148c0,5.186,10.366,9.079,14.688,10.438c-3.472,1.627-9.134-1.498-11.334-2.359
+		c-3.601-1.419-4.071-3.063-5.89-4.854C12.523,47.135,12.878,45,13.404,44.173z"/&gt;
+	
+		&lt;radialGradient id="SVGID_5_" cx="31.8184" cy="19.3525" r="14.63" gradientTransform="matrix(1 0 0 -1 0.04 64.1543)" gradientUnits="userSpaceOnUse"&gt;
+		&lt;stop  offset="0" style="stop-color:#FCB57A"/&gt;
+		&lt;stop  offset="1" style="stop-color:#FF8C36"/&gt;
+	&lt;/radialGradient&gt;
+	&lt;path fill="url(#SVGID_5_)" stroke="#E55E03" d="M45.777,43.924c-1.317-1.568-5.11-9.424-6.604-6.617
+		c0.516,1.025,3.617,3.693,3.617,6.617c0,5.186-10.271,8.576-16.699,9.145c1.429,4.938,11.373,1.293,13.805-0.313
+		c3.563-2.354,4.563-5.133,7.854-3.705C47.754,49.045,48.006,46.574,45.777,43.924z"/&gt;
+	
+		&lt;radialGradient id="SVGID_6_" cx="30.4893" cy="4.8721" r="5.2028" gradientTransform="matrix(1 0 0 -1 0.04 64.1543)" gradientUnits="userSpaceOnUse"&gt;
+		&lt;stop  offset="0" style="stop-color:#FCB57A"/&gt;
+		&lt;stop  offset="1" style="stop-color:#FF8C36"/&gt;
+	&lt;/radialGradient&gt;
+	&lt;path fill="url(#SVGID_6_)" stroke="#E55E03" d="M30.777,54.167c0.357,0.836-0.153,1.983-0.352,2.813
+		c-0.256,1.084-0.072,2.104,0.102,3.186c0.164,1.02,0.156,2.107,0.25,3.167c0.082,0.916,0.482,1.849,0.357,2.75"/&gt;
+	
+		&lt;radialGradient id="SVGID_7_" cx="23.2871" cy="5.3008" r="5.5143" gradientTransform="matrix(1 0 0 -1 0.04 64.1543)" gradientUnits="userSpaceOnUse"&gt;
+		&lt;stop  offset="0" style="stop-color:#FCB57A"/&gt;
+		&lt;stop  offset="1" style="stop-color:#FF8C36"/&gt;
+	&lt;/radialGradient&gt;
+	&lt;path fill="url(#SVGID_7_)" stroke="#E55E03" d="M23.695,53.417c-0.508,0.584-0.476,2.209-0.398,3
+		c0.116,1.183,0.456,2.099,0.333,3.333c-0.192,1.943,0.154,4.479-0.436,6.333"/&gt;
+	
+		&lt;radialGradient id="face_x5F_white_1_" cx="27.5835" cy="3117.4922" r="23.425" fx="23.0139" fy="3115.0024" gradientTransform="matrix(1 0 0 1 0.3203 -3091.7656)" gradientUnits="userSpaceOnUse"&gt;
+		&lt;stop  offset="0" style="stop-color:#FFD28F"/&gt;
+		&lt;stop  offset="1" style="stop-color:#FFAB4F"/&gt;
+	&lt;/radialGradient&gt;
+	&lt;path id="face_x5F_white_3_" fill="url(#face_x5F_white_1_)" stroke="#ED9135" stroke-miterlimit="10" d="M43.676,23.357
+		c0.086,10.2-6.738,18.52-15.25,18.586c-8.5,0.068-15.464-8.146-15.55-18.344C12.794,13.4,19.618,5.079,28.123,5.012
+		C36.627,4.945,43.59,13.158,43.676,23.357z"/&gt;
+	
+		&lt;linearGradient id="face_highlight_1_" gradientUnits="userSpaceOnUse" x1="6468.501" y1="-12291.5195" x2="6492.1304" y2="-12384.9688" gradientTransform="matrix(0.275 0 0 -0.2733 -1752.8849 -3351.7349)"&gt;
+		&lt;stop  offset="0" style="stop-color:#FFFFFF;stop-opacity:0.24"/&gt;
+		&lt;stop  offset="1" style="stop-color:#FFFFFF;stop-opacity:0.16"/&gt;
+	&lt;/linearGradient&gt;
+	&lt;path id="face_highlight_3_" fill="url(#face_highlight_1_)" d="M28.415,5.625c-6.035,0.047-10.747,4.493-12.787,10.386
+		c-0.664,1.919-0.294,4.043,0.98,5.629c2.73,3.398,5.729,6.283,9.461,8.088c3.137,1.518,7.535,2.385,11.893,1.247
+		c2.274-0.592,3.988-2.459,4.375-4.766c0.187-1.094,0.293-2.289,0.283-3.553C42.54,13.244,36.729,5.56,28.415,5.625z"/&gt;
+	&lt;path id="Hair_Young_Black_1_" fill="#5C5C5C" stroke="#353535" stroke-linecap="round" stroke-linejoin="round" d="M20.278,13.25
+		c3.417,4.333,9.333,6.917,9.333,6.917l-1.417-3.5c0,0,7.094,4.691,8.083,4.333c0.968-0.2-1.082-3.807-1.082-3.807
+		s3.138,1.795,4.854,3.969c1.803,2.28,4.285,3.504,4.285,3.504S47.027,2.719,27.289,2.744C8.278,2.709,12.058,27.678,12.058,27.678
+		L14.695,17c0,0,0.914,5.757,1.399,4.875C17.861,15.211,18.861,11.5,20.278,13.25z"/&gt;
+&lt;/g&gt;
+&lt;/svg&gt;
+</y:Resource>
+      <y:Resource id="2">&lt;?xml version="1.0" encoding="utf-8"?&gt;
+&lt;svg version="1.1" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+	 width="57px" height="67px" viewBox="0 0 57 67" enable-background="new 0 0 57 67" xml:space="preserve"&gt;
+&lt;g&gt;
+	
+		&lt;linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="26.3398" y1="3115.7266" x2="27.5807" y2="3145.5239" gradientTransform="matrix(1 0 0 1 0.3203 -3091.7656)"&gt;
+		&lt;stop  offset="0.2711" style="stop-color:#FFAB4F"/&gt;
+		&lt;stop  offset="1" style="stop-color:#FFD28F"/&gt;
+	&lt;/linearGradient&gt;
+	&lt;path fill="url(#SVGID_1_)" stroke="#ED9135" stroke-miterlimit="10" d="M49.529,51.225c-4.396-4.396-10.951-5.884-12.063-6.109
+		V37.8H19.278c0,0,0.038,6.903,0,6.868c0,0-6.874,0.997-12.308,6.432C1.378,56.691,0.5,62.77,0.5,62.77
+		c0,1.938,1.575,3.492,3.523,3.492h48.51c1.947,0,3.521-1.558,3.521-3.492C56.055,62.768,54.211,55.906,49.529,51.225z"/&gt;
+	
+		&lt;radialGradient id="face_x5F_white_1_" cx="27.5835" cy="3117.4922" r="23.425" fx="23.0139" fy="3115.0024" gradientTransform="matrix(1 0 0 1 0.3203 -3091.7656)" gradientUnits="userSpaceOnUse"&gt;
+		&lt;stop  offset="0" style="stop-color:#FFD28F"/&gt;
+		&lt;stop  offset="1" style="stop-color:#FFAB4F"/&gt;
+	&lt;/radialGradient&gt;
+	&lt;path id="face_x5F_white_3_" fill="url(#face_x5F_white_1_)" stroke="#ED9135" stroke-miterlimit="10" d="M43.676,23.357
+		c0.086,10.199-6.738,18.52-15.25,18.586c-8.5,0.068-15.464-8.146-15.55-18.344C12.794,13.4,19.618,5.079,28.123,5.012
+		C36.627,4.945,43.59,13.158,43.676,23.357z"/&gt;
+	
+		&lt;linearGradient id="face_highlight_1_" gradientUnits="userSpaceOnUse" x1="6468.5" y1="-12286.8594" x2="6492.1294" y2="-12380.3086" gradientTransform="matrix(0.275 0 0 -0.2733 -1752.8849 -3350.4617)"&gt;
+		&lt;stop  offset="0" style="stop-color:#FFFFFF;stop-opacity:0.24"/&gt;
+		&lt;stop  offset="1" style="stop-color:#FFFFFF;stop-opacity:0.16"/&gt;
+	&lt;/linearGradient&gt;
+	&lt;path id="face_highlight_3_" fill="url(#face_highlight_1_)" d="M28.415,5.625c-6.035,0.047-10.747,4.493-12.787,10.386
+		c-0.664,1.919-0.294,4.043,0.98,5.629c2.73,3.398,5.729,6.283,9.461,8.088c3.137,1.518,7.535,2.385,11.893,1.247
+		c2.274-0.592,3.988-2.459,4.375-4.766c0.187-1.094,0.293-2.289,0.283-3.553C42.54,13.244,36.729,5.56,28.415,5.625z"/&gt;
+	&lt;path id="Hair_Female_1_Red_1_" fill="#FAE1AA" stroke="#E2B354" stroke-linecap="round" stroke-linejoin="round" d="M28.372,0.5
+		C17.537,0.5,8.269,7.748,9.153,26.125c0.563,6.563,5.862,12.042,9.366,13.531c-2.929-10.968-0.304-25.021-0.585-25.526
+		c-0.281-0.505,3.536,6.728,3.536,6.728l3.183-8.312c5.541,4.28,0.393,11.309,1.049,11.058c4.26-1.631,5.34-9.228,5.34-9.228
+		s2.729,3.657,2.701,5.504c-0.054,3.562,2.194-6.067,2.194-6.067l1.027,2.031c6.727,9.822,3.684,16.208,1.648,22.781
+		c15.666-0.703,12.291-10.48,9.66-18.407C43.59,6.092,39.206,0.5,28.372,0.5z"/&gt;
+	
+		&lt;linearGradient id="body_1_" gradientUnits="userSpaceOnUse" x1="95.9063" y1="-3134.2153" x2="31.5133" y2="-3134.2153" gradientTransform="matrix(0.9852 0 0 -0.9852 -34.4844 -3031.9851)"&gt;
+		&lt;stop  offset="0" style="stop-color:#49AD33"/&gt;
+		&lt;stop  offset="1" style="stop-color:#C2DA92"/&gt;
+	&lt;/linearGradient&gt;
+	&lt;path id="body_8_" fill="url(#body_1_)" stroke="#008D33" d="M0.5,62.768c0,1.938,1.575,3.494,3.523,3.494h48.51
+		c1.947,0,3.521-1.559,3.521-3.494c0,0-1.844-6.861-6.525-11.543c-4.815-4.813-8.244-5.146-8.244-5.146
+		c-1.444,6.983-8.555,8.786-13.007,8.786s-11.322-2.643-11.941-9.439c0,0-4.559,1.199-9.367,5.674
+		C1.378,56.689,0.5,62.768,0.5,62.768z"/&gt;
+&lt;/g&gt;
+&lt;/svg&gt;
+</y:Resource>
+    </y:Resources>
+  </data>
+</graphml>
diff --git a/docs/guide-pt-BR/images/rbac-access-check-2.png b/docs/guide-pt-BR/images/rbac-access-check-2.png
new file mode 100644
index 0000000..254f307
Binary files /dev/null and b/docs/guide-pt-BR/images/rbac-access-check-2.png differ
diff --git a/docs/guide-pt-BR/images/rbac-access-check-3.graphml b/docs/guide-pt-BR/images/rbac-access-check-3.graphml
new file mode 100644
index 0000000..8747cee
--- /dev/null
+++ b/docs/guide-pt-BR/images/rbac-access-check-3.graphml
@@ -0,0 +1,368 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<graphml xmlns="http://graphml.graphdrawing.org/xmlns" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:y="http://www.yworks.com/xml/graphml" xmlns:yed="http://www.yworks.com/xml/yed/3" xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns http://www.yworks.com/xml/schema/graphml/1.1/ygraphml.xsd">
+  <!--Created by yEd 3.12.2-->
+  <key for="graphml" id="d0" yfiles.type="resources"/>
+  <key for="port" id="d1" yfiles.type="portgraphics"/>
+  <key for="port" id="d2" yfiles.type="portgeometry"/>
+  <key for="port" id="d3" yfiles.type="portuserdata"/>
+  <key attr.name="url" attr.type="string" for="node" id="d4"/>
+  <key attr.name="description" attr.type="string" for="node" id="d5"/>
+  <key for="node" id="d6" yfiles.type="nodegraphics"/>
+  <key attr.name="Description" attr.type="string" for="graph" id="d7"/>
+  <key attr.name="url" attr.type="string" for="edge" id="d8"/>
+  <key attr.name="description" attr.type="string" for="edge" id="d9"/>
+  <key for="edge" id="d10" yfiles.type="edgegraphics"/>
+  <graph edgedefault="directed" id="G">
+    <data key="d7"/>
+    <node id="n0">
+      <data key="d6">
+        <y:ShapeNode>
+          <y:Geometry height="69.0" width="103.0" x="34.0" y="-11.5"/>
+          <y:Fill color="#ADF4A6" transparent="false"/>
+          <y:BorderStyle color="#FF0000" type="line" width="1.0"/>
+          <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.701171875" modelName="custom" textColor="#000000" visible="true" width="36.68359375" x="33.158203125" y="25.1494140625">admin<y:LabelModel>
+              <y:SmartNodeLabelModel distance="4.0"/>
+            </y:LabelModel>
+            <y:ModelParameter>
+              <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
+            </y:ModelParameter>
+          </y:NodeLabel>
+          <y:Shape type="roundrectangle"/>
+        </y:ShapeNode>
+      </data>
+    </node>
+    <node id="n1">
+      <data key="d6">
+        <y:ShapeNode>
+          <y:Geometry height="69.0" width="103.0" x="193.0" y="-11.5"/>
+          <y:Fill color="#ADF4A6" transparent="false"/>
+          <y:BorderStyle color="#000000" type="line" width="1.0"/>
+          <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.701171875" modelName="custom" textColor="#000000" visible="true" width="38.025390625" x="32.4873046875" y="25.1494140625">author<y:LabelModel>
+              <y:SmartNodeLabelModel distance="4.0"/>
+            </y:LabelModel>
+            <y:ModelParameter>
+              <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
+            </y:ModelParameter>
+          </y:NodeLabel>
+          <y:Shape type="roundrectangle"/>
+        </y:ShapeNode>
+      </data>
+    </node>
+    <node id="n2">
+      <data key="d6">
+        <y:SVGNode>
+          <y:Geometry height="64.53585815429688" width="56.560157775878906" x="216.21992111206055" y="-132.03585815429688"/>
+          <y:Fill color="#CCCCFF" transparent="false"/>
+          <y:BorderStyle color="#000000" type="line" width="1.0"/>
+          <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.701171875" modelName="custom" textColor="#000000" visible="true" width="62.37109375" x="-2.905467987060547" y="-27.814727783203125">John, ID=2<y:LabelModel>
+              <y:SmartNodeLabelModel distance="4.0"/>
+            </y:LabelModel>
+            <y:ModelParameter>
+              <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.5" nodeRatioX="0.0" nodeRatioY="-0.5" offsetX="0.0" offsetY="-9.113555908203125" upX="0.0" upY="-1.0"/>
+            </y:ModelParameter>
+          </y:NodeLabel>
+          <y:SVGNodeProperties usingVisualBounds="true"/>
+          <y:SVGModel svgBoundsPolicy="0">
+            <y:SVGContent refid="1"/>
+          </y:SVGModel>
+        </y:SVGNode>
+      </data>
+    </node>
+    <node id="n3">
+      <data key="d6">
+        <y:SVGNode>
+          <y:Geometry height="66.76200103759766" width="56.554100036621094" x="57.22294998168945" y="-133.14892959594727"/>
+          <y:Fill color="#CCCCFF" transparent="false"/>
+          <y:BorderStyle color="#000000" type="line" width="1.0"/>
+          <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.701171875" modelName="custom" textColor="#000000" visible="true" width="62.37109375" x="-2.908496856689453" y="-27.701656341552734">Jane, ID=1<y:LabelModel>
+              <y:SmartNodeLabelModel distance="4.0"/>
+            </y:LabelModel>
+            <y:ModelParameter>
+              <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.5" nodeRatioX="0.0" nodeRatioY="-0.5" offsetX="0.0" offsetY="-9.000484466552734" upX="0.0" upY="-1.0"/>
+            </y:ModelParameter>
+          </y:NodeLabel>
+          <y:SVGNodeProperties usingVisualBounds="true"/>
+          <y:SVGModel svgBoundsPolicy="0">
+            <y:SVGContent refid="2"/>
+          </y:SVGModel>
+        </y:SVGNode>
+      </data>
+    </node>
+    <node id="n4">
+      <data key="d6">
+        <y:ShapeNode>
+          <y:Geometry height="69.0" width="103.0" x="34.0" y="197.5"/>
+          <y:Fill color="#99CCFF" transparent="false"/>
+          <y:BorderStyle color="#FF0000" type="line" width="1.0"/>
+          <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.701171875" modelName="custom" textColor="#000000" visible="true" width="64.71484375" x="19.142578125" y="25.1494140625">updatePost<y:LabelModel>
+              <y:SmartNodeLabelModel distance="4.0"/>
+            </y:LabelModel>
+            <y:ModelParameter>
+              <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
+            </y:ModelParameter>
+          </y:NodeLabel>
+          <y:Shape type="roundrectangle"/>
+        </y:ShapeNode>
+      </data>
+    </node>
+    <node id="n5">
+      <data key="d6">
+        <y:ShapeNode>
+          <y:Geometry height="69.0" width="103.0" x="193.0" y="197.5"/>
+          <y:Fill color="#99CCFF" transparent="false"/>
+          <y:BorderStyle color="#000000" type="line" width="1.0"/>
+          <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.701171875" modelName="custom" textColor="#000000" visible="true" width="89.388671875" x="6.8056640625" y="25.1494140625">updateOwnPost<y:LabelModel>
+              <y:SmartNodeLabelModel distance="4.0"/>
+            </y:LabelModel>
+            <y:ModelParameter>
+              <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
+            </y:ModelParameter>
+          </y:NodeLabel>
+          <y:Shape type="roundrectangle"/>
+        </y:ShapeNode>
+      </data>
+    </node>
+    <node id="n6">
+      <data key="d6">
+        <y:ShapeNode>
+          <y:Geometry height="69.0" width="103.0" x="352.0" y="197.5"/>
+          <y:Fill color="#99CCFF" transparent="false"/>
+          <y:BorderStyle color="#000000" type="line" width="1.0"/>
+          <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.701171875" modelName="custom" textColor="#000000" visible="true" width="61.36328125" x="20.818359375" y="25.1494140625">createPost<y:LabelModel>
+              <y:SmartNodeLabelModel distance="4.0"/>
+            </y:LabelModel>
+            <y:ModelParameter>
+              <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
+            </y:ModelParameter>
+          </y:NodeLabel>
+          <y:Shape type="roundrectangle"/>
+        </y:ShapeNode>
+      </data>
+    </node>
+    <node id="n7">
+      <data key="d6">
+        <y:ShapeNode>
+          <y:Geometry height="29.535858154296875" width="103.0" x="193.0" y="167.96414184570312"/>
+          <y:Fill color="#FFCC00" transparent="false"/>
+          <y:BorderStyle color="#000000" type="line" width="1.0"/>
+          <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.701171875" modelName="custom" textColor="#000000" visible="true" width="64.03515625" x="19.482421875" y="5.4173431396484375">AuthorRule<y:LabelModel>
+              <y:SmartNodeLabelModel distance="4.0"/>
+            </y:LabelModel>
+            <y:ModelParameter>
+              <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
+            </y:ModelParameter>
+          </y:NodeLabel>
+          <y:Shape type="roundrectangle"/>
+        </y:ShapeNode>
+      </data>
+    </node>
+    <edge id="e0" source="n4" target="n0">
+      <data key="d10">
+        <y:PolyLineEdge>
+          <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
+          <y:LineStyle color="#FF0000" type="line" width="1.0"/>
+          <y:Arrows source="none" target="standard"/>
+          <y:BendStyle smoothed="false"/>
+        </y:PolyLineEdge>
+      </data>
+    </edge>
+    <edge id="e1" source="n4" target="n5">
+      <data key="d10">
+        <y:PolyLineEdge>
+          <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
+          <y:LineStyle color="#000000" type="line" width="1.0"/>
+          <y:Arrows source="none" target="standard"/>
+          <y:BendStyle smoothed="false"/>
+        </y:PolyLineEdge>
+      </data>
+    </edge>
+    <edge id="e2" source="n1" target="n0">
+      <data key="d10">
+        <y:PolyLineEdge>
+          <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
+          <y:LineStyle color="#000000" type="line" width="1.0"/>
+          <y:Arrows source="none" target="standard"/>
+          <y:BendStyle smoothed="false"/>
+        </y:PolyLineEdge>
+      </data>
+    </edge>
+    <edge id="e3" source="n6" target="n1">
+      <data key="d10">
+        <y:PolyLineEdge>
+          <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0">
+            <y:Point x="403.5" y="23.0"/>
+          </y:Path>
+          <y:LineStyle color="#000000" type="line" width="1.0"/>
+          <y:Arrows source="none" target="standard"/>
+          <y:BendStyle smoothed="false"/>
+        </y:PolyLineEdge>
+      </data>
+    </edge>
+    <edge id="e4" source="n1" target="n2">
+      <data key="d10">
+        <y:PolyLineEdge>
+          <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
+          <y:LineStyle color="#000000" type="line" width="1.0"/>
+          <y:Arrows source="none" target="standard"/>
+          <y:BendStyle smoothed="false"/>
+        </y:PolyLineEdge>
+      </data>
+    </edge>
+    <edge id="e5" source="n0" target="n3">
+      <data key="d10">
+        <y:PolyLineEdge>
+          <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
+          <y:LineStyle color="#FF0000" type="line" width="1.0"/>
+          <y:Arrows source="none" target="standard"/>
+          <y:BendStyle smoothed="false"/>
+        </y:PolyLineEdge>
+      </data>
+    </edge>
+    <edge id="e6" source="n7" target="n1">
+      <data key="d10">
+        <y:PolyLineEdge>
+          <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
+          <y:LineStyle color="#000000" type="line" width="1.0"/>
+          <y:Arrows source="none" target="standard"/>
+          <y:BendStyle smoothed="false"/>
+        </y:PolyLineEdge>
+      </data>
+    </edge>
+  </graph>
+  <data key="d0">
+    <y:Resources>
+      <y:Resource id="1">&lt;?xml version="1.0" encoding="utf-8"?&gt;
+&lt;svg version="1.1" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+	 width="57px" height="65px" viewBox="0 0 57 65" enable-background="new 0 0 57 65" xml:space="preserve"&gt;
+&lt;g&gt;
+	
+		&lt;linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="26.3398" y1="3115.7266" x2="27.5807" y2="3145.5239" gradientTransform="matrix(1 0 0 1 0.3203 -3091.7656)"&gt;
+		&lt;stop  offset="0.2711" style="stop-color:#FFAB4F"/&gt;
+		&lt;stop  offset="1" style="stop-color:#FFD28F"/&gt;
+	&lt;/linearGradient&gt;
+	&lt;path fill="url(#SVGID_1_)" stroke="#ED9135" stroke-miterlimit="10" d="M49.529,51.225c-4.396-4.396-10.951-5.884-12.063-6.109
+		V37.8H19.278c0,0,0.038,6.903,0,6.868c0,0-6.874,0.997-12.308,6.432C1.378,56.691,0.5,62.77,0.5,62.77
+		c0,1.938,1.575,3.492,3.523,3.492h48.51c1.947,0,3.521-1.558,3.521-3.492C56.055,62.768,54.211,55.906,49.529,51.225z"/&gt;
+	&lt;path id="body_18_" fill="#ECECEC" stroke="#9B9B9B" stroke-miterlimit="10" d="M0.5,62.768c0,1.938,1.575,3.494,3.523,3.494h48.51
+		c1.947,0,3.521-1.559,3.521-3.494c0,0-1.844-6.861-6.525-11.543c-4.815-4.813-11.244-6.146-11.244-6.146
+		c-1.771,1.655-5.61,3.802-10.063,3.802c-4.453,0-8.292-2.146-10.063-3.802c0,0-5.755,0.586-11.189,6.021
+		C1.378,56.689,0.5,62.768,0.5,62.768z"/&gt;
+	
+		&lt;radialGradient id="SVGID_2_" cx="22.6621" cy="21.707" r="17.7954" gradientTransform="matrix(1 0 0 -1 0.04 64.1543)" gradientUnits="userSpaceOnUse"&gt;
+		&lt;stop  offset="0" style="stop-color:#FCB57A"/&gt;
+		&lt;stop  offset="1" style="stop-color:#FF8C36"/&gt;
+	&lt;/radialGradient&gt;
+	&lt;path fill="url(#SVGID_2_)" stroke="#E55E03" d="M28.106,33.486c-8.112,0-12.688,4.313-12.688,10.438
+		c0,7.422,12.688,10.438,12.688,10.438s14.688-3.016,14.688-10.438C42.793,38.75,36.215,33.486,28.106,33.486z M26.288,53.051
+		c0,0-7.135-2.093-8.805-7.201c-0.222-0.682,0.147-1.156,0.795-1.521V37.8h20.188v6.663c0.235,0.352,1.109,0.737,1.229,1.387
+		C40.445,49.917,26.288,53.051,26.288,53.051z"/&gt;
+	
+		&lt;radialGradient id="SVGID_3_" cx="15.2056" cy="831.1875" r="32.3071" gradientTransform="matrix(1 0 0 1 0.0801 -773.6914)" gradientUnits="userSpaceOnUse"&gt;
+		&lt;stop  offset="0" style="stop-color:#FCB57A"/&gt;
+		&lt;stop  offset="1" style="stop-color:#FF8C36"/&gt;
+	&lt;/radialGradient&gt;
+	&lt;path fill="url(#SVGID_3_)" stroke="#E55E03" d="M49.529,51.225c-2.239-2.24-5.041-3.724-7.396-4.67
+		c-2.854,5.51-14.021,7.807-14.021,7.807s-10.472-2.483-12.387-8.514c-2.439,0.771-5.787,2.287-8.749,5.25
+		c-5.592,5.592-6.47,11.67-6.47,11.67c0,1.938,1.575,3.492,3.523,3.492h48.51c1.946,0,3.521-1.558,3.521-3.492
+		C56.055,62.768,54.211,55.906,49.529,51.225z"/&gt;
+	
+		&lt;radialGradient id="SVGID_4_" cx="17.0723" cy="18.4907" r="11.8931" gradientTransform="matrix(1 0 0 -1 0.04 64.1543)" gradientUnits="userSpaceOnUse"&gt;
+		&lt;stop  offset="0" style="stop-color:#FCB57A"/&gt;
+		&lt;stop  offset="1" style="stop-color:#FF8C36"/&gt;
+	&lt;/radialGradient&gt;
+	&lt;path fill="url(#SVGID_4_)" stroke="#E55E03" d="M13.404,44.173c1.15-1.81,2.039-3.832,3.332-5.397
+		c-0.514,1.027-1.669,4.084-1.669,5.148c0,5.186,10.366,9.079,14.688,10.438c-3.472,1.627-9.134-1.498-11.334-2.359
+		c-3.601-1.419-4.071-3.063-5.89-4.854C12.523,47.135,12.878,45,13.404,44.173z"/&gt;
+	
+		&lt;radialGradient id="SVGID_5_" cx="31.8184" cy="19.3525" r="14.63" gradientTransform="matrix(1 0 0 -1 0.04 64.1543)" gradientUnits="userSpaceOnUse"&gt;
+		&lt;stop  offset="0" style="stop-color:#FCB57A"/&gt;
+		&lt;stop  offset="1" style="stop-color:#FF8C36"/&gt;
+	&lt;/radialGradient&gt;
+	&lt;path fill="url(#SVGID_5_)" stroke="#E55E03" d="M45.777,43.924c-1.317-1.568-5.11-9.424-6.604-6.617
+		c0.516,1.025,3.617,3.693,3.617,6.617c0,5.186-10.271,8.576-16.699,9.145c1.429,4.938,11.373,1.293,13.805-0.313
+		c3.563-2.354,4.563-5.133,7.854-3.705C47.754,49.045,48.006,46.574,45.777,43.924z"/&gt;
+	
+		&lt;radialGradient id="SVGID_6_" cx="30.4893" cy="4.8721" r="5.2028" gradientTransform="matrix(1 0 0 -1 0.04 64.1543)" gradientUnits="userSpaceOnUse"&gt;
+		&lt;stop  offset="0" style="stop-color:#FCB57A"/&gt;
+		&lt;stop  offset="1" style="stop-color:#FF8C36"/&gt;
+	&lt;/radialGradient&gt;
+	&lt;path fill="url(#SVGID_6_)" stroke="#E55E03" d="M30.777,54.167c0.357,0.836-0.153,1.983-0.352,2.813
+		c-0.256,1.084-0.072,2.104,0.102,3.186c0.164,1.02,0.156,2.107,0.25,3.167c0.082,0.916,0.482,1.849,0.357,2.75"/&gt;
+	
+		&lt;radialGradient id="SVGID_7_" cx="23.2871" cy="5.3008" r="5.5143" gradientTransform="matrix(1 0 0 -1 0.04 64.1543)" gradientUnits="userSpaceOnUse"&gt;
+		&lt;stop  offset="0" style="stop-color:#FCB57A"/&gt;
+		&lt;stop  offset="1" style="stop-color:#FF8C36"/&gt;
+	&lt;/radialGradient&gt;
+	&lt;path fill="url(#SVGID_7_)" stroke="#E55E03" d="M23.695,53.417c-0.508,0.584-0.476,2.209-0.398,3
+		c0.116,1.183,0.456,2.099,0.333,3.333c-0.192,1.943,0.154,4.479-0.436,6.333"/&gt;
+	
+		&lt;radialGradient id="face_x5F_white_1_" cx="27.5835" cy="3117.4922" r="23.425" fx="23.0139" fy="3115.0024" gradientTransform="matrix(1 0 0 1 0.3203 -3091.7656)" gradientUnits="userSpaceOnUse"&gt;
+		&lt;stop  offset="0" style="stop-color:#FFD28F"/&gt;
+		&lt;stop  offset="1" style="stop-color:#FFAB4F"/&gt;
+	&lt;/radialGradient&gt;
+	&lt;path id="face_x5F_white_3_" fill="url(#face_x5F_white_1_)" stroke="#ED9135" stroke-miterlimit="10" d="M43.676,23.357
+		c0.086,10.2-6.738,18.52-15.25,18.586c-8.5,0.068-15.464-8.146-15.55-18.344C12.794,13.4,19.618,5.079,28.123,5.012
+		C36.627,4.945,43.59,13.158,43.676,23.357z"/&gt;
+	
+		&lt;linearGradient id="face_highlight_1_" gradientUnits="userSpaceOnUse" x1="6468.501" y1="-12291.5195" x2="6492.1304" y2="-12384.9688" gradientTransform="matrix(0.275 0 0 -0.2733 -1752.8849 -3351.7349)"&gt;
+		&lt;stop  offset="0" style="stop-color:#FFFFFF;stop-opacity:0.24"/&gt;
+		&lt;stop  offset="1" style="stop-color:#FFFFFF;stop-opacity:0.16"/&gt;
+	&lt;/linearGradient&gt;
+	&lt;path id="face_highlight_3_" fill="url(#face_highlight_1_)" d="M28.415,5.625c-6.035,0.047-10.747,4.493-12.787,10.386
+		c-0.664,1.919-0.294,4.043,0.98,5.629c2.73,3.398,5.729,6.283,9.461,8.088c3.137,1.518,7.535,2.385,11.893,1.247
+		c2.274-0.592,3.988-2.459,4.375-4.766c0.187-1.094,0.293-2.289,0.283-3.553C42.54,13.244,36.729,5.56,28.415,5.625z"/&gt;
+	&lt;path id="Hair_Young_Black_1_" fill="#5C5C5C" stroke="#353535" stroke-linecap="round" stroke-linejoin="round" d="M20.278,13.25
+		c3.417,4.333,9.333,6.917,9.333,6.917l-1.417-3.5c0,0,7.094,4.691,8.083,4.333c0.968-0.2-1.082-3.807-1.082-3.807
+		s3.138,1.795,4.854,3.969c1.803,2.28,4.285,3.504,4.285,3.504S47.027,2.719,27.289,2.744C8.278,2.709,12.058,27.678,12.058,27.678
+		L14.695,17c0,0,0.914,5.757,1.399,4.875C17.861,15.211,18.861,11.5,20.278,13.25z"/&gt;
+&lt;/g&gt;
+&lt;/svg&gt;
+</y:Resource>
+      <y:Resource id="2">&lt;?xml version="1.0" encoding="utf-8"?&gt;
+&lt;svg version="1.1" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+	 width="57px" height="67px" viewBox="0 0 57 67" enable-background="new 0 0 57 67" xml:space="preserve"&gt;
+&lt;g&gt;
+	
+		&lt;linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="26.3398" y1="3115.7266" x2="27.5807" y2="3145.5239" gradientTransform="matrix(1 0 0 1 0.3203 -3091.7656)"&gt;
+		&lt;stop  offset="0.2711" style="stop-color:#FFAB4F"/&gt;
+		&lt;stop  offset="1" style="stop-color:#FFD28F"/&gt;
+	&lt;/linearGradient&gt;
+	&lt;path fill="url(#SVGID_1_)" stroke="#ED9135" stroke-miterlimit="10" d="M49.529,51.225c-4.396-4.396-10.951-5.884-12.063-6.109
+		V37.8H19.278c0,0,0.038,6.903,0,6.868c0,0-6.874,0.997-12.308,6.432C1.378,56.691,0.5,62.77,0.5,62.77
+		c0,1.938,1.575,3.492,3.523,3.492h48.51c1.947,0,3.521-1.558,3.521-3.492C56.055,62.768,54.211,55.906,49.529,51.225z"/&gt;
+	
+		&lt;radialGradient id="face_x5F_white_1_" cx="27.5835" cy="3117.4922" r="23.425" fx="23.0139" fy="3115.0024" gradientTransform="matrix(1 0 0 1 0.3203 -3091.7656)" gradientUnits="userSpaceOnUse"&gt;
+		&lt;stop  offset="0" style="stop-color:#FFD28F"/&gt;
+		&lt;stop  offset="1" style="stop-color:#FFAB4F"/&gt;
+	&lt;/radialGradient&gt;
+	&lt;path id="face_x5F_white_3_" fill="url(#face_x5F_white_1_)" stroke="#ED9135" stroke-miterlimit="10" d="M43.676,23.357
+		c0.086,10.199-6.738,18.52-15.25,18.586c-8.5,0.068-15.464-8.146-15.55-18.344C12.794,13.4,19.618,5.079,28.123,5.012
+		C36.627,4.945,43.59,13.158,43.676,23.357z"/&gt;
+	
+		&lt;linearGradient id="face_highlight_1_" gradientUnits="userSpaceOnUse" x1="6468.5" y1="-12286.8594" x2="6492.1294" y2="-12380.3086" gradientTransform="matrix(0.275 0 0 -0.2733 -1752.8849 -3350.4617)"&gt;
+		&lt;stop  offset="0" style="stop-color:#FFFFFF;stop-opacity:0.24"/&gt;
+		&lt;stop  offset="1" style="stop-color:#FFFFFF;stop-opacity:0.16"/&gt;
+	&lt;/linearGradient&gt;
+	&lt;path id="face_highlight_3_" fill="url(#face_highlight_1_)" d="M28.415,5.625c-6.035,0.047-10.747,4.493-12.787,10.386
+		c-0.664,1.919-0.294,4.043,0.98,5.629c2.73,3.398,5.729,6.283,9.461,8.088c3.137,1.518,7.535,2.385,11.893,1.247
+		c2.274-0.592,3.988-2.459,4.375-4.766c0.187-1.094,0.293-2.289,0.283-3.553C42.54,13.244,36.729,5.56,28.415,5.625z"/&gt;
+	&lt;path id="Hair_Female_1_Red_1_" fill="#FAE1AA" stroke="#E2B354" stroke-linecap="round" stroke-linejoin="round" d="M28.372,0.5
+		C17.537,0.5,8.269,7.748,9.153,26.125c0.563,6.563,5.862,12.042,9.366,13.531c-2.929-10.968-0.304-25.021-0.585-25.526
+		c-0.281-0.505,3.536,6.728,3.536,6.728l3.183-8.312c5.541,4.28,0.393,11.309,1.049,11.058c4.26-1.631,5.34-9.228,5.34-9.228
+		s2.729,3.657,2.701,5.504c-0.054,3.562,2.194-6.067,2.194-6.067l1.027,2.031c6.727,9.822,3.684,16.208,1.648,22.781
+		c15.666-0.703,12.291-10.48,9.66-18.407C43.59,6.092,39.206,0.5,28.372,0.5z"/&gt;
+	
+		&lt;linearGradient id="body_1_" gradientUnits="userSpaceOnUse" x1="95.9063" y1="-3134.2153" x2="31.5133" y2="-3134.2153" gradientTransform="matrix(0.9852 0 0 -0.9852 -34.4844 -3031.9851)"&gt;
+		&lt;stop  offset="0" style="stop-color:#49AD33"/&gt;
+		&lt;stop  offset="1" style="stop-color:#C2DA92"/&gt;
+	&lt;/linearGradient&gt;
+	&lt;path id="body_8_" fill="url(#body_1_)" stroke="#008D33" d="M0.5,62.768c0,1.938,1.575,3.494,3.523,3.494h48.51
+		c1.947,0,3.521-1.559,3.521-3.494c0,0-1.844-6.861-6.525-11.543c-4.815-4.813-8.244-5.146-8.244-5.146
+		c-1.444,6.983-8.555,8.786-13.007,8.786s-11.322-2.643-11.941-9.439c0,0-4.559,1.199-9.367,5.674
+		C1.378,56.689,0.5,62.768,0.5,62.768z"/&gt;
+&lt;/g&gt;
+&lt;/svg&gt;
+</y:Resource>
+    </y:Resources>
+  </data>
+</graphml>
diff --git a/docs/guide-pt-BR/images/rbac-access-check-3.png b/docs/guide-pt-BR/images/rbac-access-check-3.png
new file mode 100644
index 0000000..1fdc0d9
Binary files /dev/null and b/docs/guide-pt-BR/images/rbac-access-check-3.png differ
diff --git a/docs/guide-pt-BR/images/rbac-hierarchy-1.graphml b/docs/guide-pt-BR/images/rbac-hierarchy-1.graphml
new file mode 100644
index 0000000..927b416
--- /dev/null
+++ b/docs/guide-pt-BR/images/rbac-hierarchy-1.graphml
@@ -0,0 +1,312 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<graphml xmlns="http://graphml.graphdrawing.org/xmlns" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:y="http://www.yworks.com/xml/graphml" xmlns:yed="http://www.yworks.com/xml/yed/3" xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns http://www.yworks.com/xml/schema/graphml/1.1/ygraphml.xsd">
+  <!--Created by yEd 3.12.2-->
+  <key for="graphml" id="d0" yfiles.type="resources"/>
+  <key for="port" id="d1" yfiles.type="portgraphics"/>
+  <key for="port" id="d2" yfiles.type="portgeometry"/>
+  <key for="port" id="d3" yfiles.type="portuserdata"/>
+  <key attr.name="url" attr.type="string" for="node" id="d4"/>
+  <key attr.name="description" attr.type="string" for="node" id="d5"/>
+  <key for="node" id="d6" yfiles.type="nodegraphics"/>
+  <key attr.name="Description" attr.type="string" for="graph" id="d7"/>
+  <key attr.name="url" attr.type="string" for="edge" id="d8"/>
+  <key attr.name="description" attr.type="string" for="edge" id="d9"/>
+  <key for="edge" id="d10" yfiles.type="edgegraphics"/>
+  <graph edgedefault="directed" id="G">
+    <data key="d7"/>
+    <node id="n0">
+      <data key="d6">
+        <y:ShapeNode>
+          <y:Geometry height="69.0" width="103.0" x="34.0" y="-11.5"/>
+          <y:Fill color="#ADF4A6" transparent="false"/>
+          <y:BorderStyle color="#000000" type="line" width="1.0"/>
+          <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.701171875" modelName="custom" textColor="#000000" visible="true" width="36.68359375" x="33.158203125" y="25.1494140625">admin<y:LabelModel>
+              <y:SmartNodeLabelModel distance="4.0"/>
+            </y:LabelModel>
+            <y:ModelParameter>
+              <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
+            </y:ModelParameter>
+          </y:NodeLabel>
+          <y:Shape type="roundrectangle"/>
+        </y:ShapeNode>
+      </data>
+    </node>
+    <node id="n1">
+      <data key="d6">
+        <y:ShapeNode>
+          <y:Geometry height="69.0" width="103.0" x="193.0" y="-11.5"/>
+          <y:Fill color="#ADF4A6" transparent="false"/>
+          <y:BorderStyle color="#000000" type="line" width="1.0"/>
+          <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.701171875" modelName="custom" textColor="#000000" visible="true" width="38.025390625" x="32.4873046875" y="25.1494140625">author<y:LabelModel>
+              <y:SmartNodeLabelModel distance="4.0"/>
+            </y:LabelModel>
+            <y:ModelParameter>
+              <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
+            </y:ModelParameter>
+          </y:NodeLabel>
+          <y:Shape type="roundrectangle"/>
+        </y:ShapeNode>
+      </data>
+    </node>
+    <node id="n2">
+      <data key="d6">
+        <y:SVGNode>
+          <y:Geometry height="64.53585815429688" width="56.560157775878906" x="216.21992111206055" y="-132.03585815429688"/>
+          <y:Fill color="#CCCCFF" transparent="false"/>
+          <y:BorderStyle color="#000000" type="line" width="1.0"/>
+          <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.701171875" modelName="custom" textColor="#000000" visible="true" width="62.37109375" x="-2.905467987060547" y="-27.814727783203125">John, ID=2<y:LabelModel>
+              <y:SmartNodeLabelModel distance="4.0"/>
+            </y:LabelModel>
+            <y:ModelParameter>
+              <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.5" nodeRatioX="0.0" nodeRatioY="-0.5" offsetX="0.0" offsetY="-9.113555908203125" upX="0.0" upY="-1.0"/>
+            </y:ModelParameter>
+          </y:NodeLabel>
+          <y:SVGNodeProperties usingVisualBounds="true"/>
+          <y:SVGModel svgBoundsPolicy="0">
+            <y:SVGContent refid="1"/>
+          </y:SVGModel>
+        </y:SVGNode>
+      </data>
+    </node>
+    <node id="n3">
+      <data key="d6">
+        <y:SVGNode>
+          <y:Geometry height="66.76200103759766" width="56.554100036621094" x="57.22294998168945" y="-133.14892959594727"/>
+          <y:Fill color="#CCCCFF" transparent="false"/>
+          <y:BorderStyle color="#000000" type="line" width="1.0"/>
+          <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.701171875" modelName="custom" textColor="#000000" visible="true" width="62.37109375" x="-2.908496856689453" y="-27.701656341552734">Jane, ID=1<y:LabelModel>
+              <y:SmartNodeLabelModel distance="4.0"/>
+            </y:LabelModel>
+            <y:ModelParameter>
+              <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.5" nodeRatioX="0.0" nodeRatioY="-0.5" offsetX="0.0" offsetY="-9.000484466552734" upX="0.0" upY="-1.0"/>
+            </y:ModelParameter>
+          </y:NodeLabel>
+          <y:SVGNodeProperties usingVisualBounds="true"/>
+          <y:SVGModel svgBoundsPolicy="0">
+            <y:SVGContent refid="2"/>
+          </y:SVGModel>
+        </y:SVGNode>
+      </data>
+    </node>
+    <node id="n4">
+      <data key="d6">
+        <y:ShapeNode>
+          <y:Geometry height="69.0" width="103.0" x="34.0" y="197.5"/>
+          <y:Fill color="#99CCFF" transparent="false"/>
+          <y:BorderStyle color="#000000" type="line" width="1.0"/>
+          <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.701171875" modelName="custom" textColor="#000000" visible="true" width="64.71484375" x="19.142578125" y="25.1494140625">updatePost<y:LabelModel>
+              <y:SmartNodeLabelModel distance="4.0"/>
+            </y:LabelModel>
+            <y:ModelParameter>
+              <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
+            </y:ModelParameter>
+          </y:NodeLabel>
+          <y:Shape type="roundrectangle"/>
+        </y:ShapeNode>
+      </data>
+    </node>
+    <node id="n5">
+      <data key="d6">
+        <y:ShapeNode>
+          <y:Geometry height="69.0" width="103.0" x="193.0" y="197.5"/>
+          <y:Fill color="#99CCFF" transparent="false"/>
+          <y:BorderStyle color="#000000" type="line" width="1.0"/>
+          <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.701171875" modelName="custom" textColor="#000000" visible="true" width="61.36328125" x="20.818359375" y="25.1494140625">createPost<y:LabelModel>
+              <y:SmartNodeLabelModel distance="4.0"/>
+            </y:LabelModel>
+            <y:ModelParameter>
+              <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
+            </y:ModelParameter>
+          </y:NodeLabel>
+          <y:Shape type="roundrectangle"/>
+        </y:ShapeNode>
+      </data>
+    </node>
+    <edge id="e0" source="n4" target="n0">
+      <data key="d10">
+        <y:PolyLineEdge>
+          <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
+          <y:LineStyle color="#000000" type="line" width="1.0"/>
+          <y:Arrows source="none" target="standard"/>
+          <y:BendStyle smoothed="false"/>
+        </y:PolyLineEdge>
+      </data>
+    </edge>
+    <edge id="e1" source="n1" target="n0">
+      <data key="d10">
+        <y:PolyLineEdge>
+          <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
+          <y:LineStyle color="#000000" type="line" width="1.0"/>
+          <y:Arrows source="none" target="standard"/>
+          <y:BendStyle smoothed="false"/>
+        </y:PolyLineEdge>
+      </data>
+    </edge>
+    <edge id="e2" source="n1" target="n2">
+      <data key="d10">
+        <y:PolyLineEdge>
+          <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
+          <y:LineStyle color="#000000" type="line" width="1.0"/>
+          <y:Arrows source="none" target="standard"/>
+          <y:BendStyle smoothed="false"/>
+        </y:PolyLineEdge>
+      </data>
+    </edge>
+    <edge id="e3" source="n0" target="n3">
+      <data key="d10">
+        <y:PolyLineEdge>
+          <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
+          <y:LineStyle color="#000000" type="line" width="1.0"/>
+          <y:Arrows source="none" target="standard"/>
+          <y:BendStyle smoothed="false"/>
+        </y:PolyLineEdge>
+      </data>
+    </edge>
+    <edge id="e4" source="n5" target="n1">
+      <data key="d10">
+        <y:PolyLineEdge>
+          <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
+          <y:LineStyle color="#000000" type="line" width="1.0"/>
+          <y:Arrows source="none" target="standard"/>
+          <y:BendStyle smoothed="false"/>
+        </y:PolyLineEdge>
+      </data>
+    </edge>
+  </graph>
+  <data key="d0">
+    <y:Resources>
+      <y:Resource id="1">&lt;?xml version="1.0" encoding="utf-8"?&gt;
+&lt;svg version="1.1" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+	 width="57px" height="65px" viewBox="0 0 57 65" enable-background="new 0 0 57 65" xml:space="preserve"&gt;
+&lt;g&gt;
+	
+		&lt;linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="26.3398" y1="3115.7266" x2="27.5807" y2="3145.5239" gradientTransform="matrix(1 0 0 1 0.3203 -3091.7656)"&gt;
+		&lt;stop  offset="0.2711" style="stop-color:#FFAB4F"/&gt;
+		&lt;stop  offset="1" style="stop-color:#FFD28F"/&gt;
+	&lt;/linearGradient&gt;
+	&lt;path fill="url(#SVGID_1_)" stroke="#ED9135" stroke-miterlimit="10" d="M49.529,51.225c-4.396-4.396-10.951-5.884-12.063-6.109
+		V37.8H19.278c0,0,0.038,6.903,0,6.868c0,0-6.874,0.997-12.308,6.432C1.378,56.691,0.5,62.77,0.5,62.77
+		c0,1.938,1.575,3.492,3.523,3.492h48.51c1.947,0,3.521-1.558,3.521-3.492C56.055,62.768,54.211,55.906,49.529,51.225z"/&gt;
+	&lt;path id="body_18_" fill="#ECECEC" stroke="#9B9B9B" stroke-miterlimit="10" d="M0.5,62.768c0,1.938,1.575,3.494,3.523,3.494h48.51
+		c1.947,0,3.521-1.559,3.521-3.494c0,0-1.844-6.861-6.525-11.543c-4.815-4.813-11.244-6.146-11.244-6.146
+		c-1.771,1.655-5.61,3.802-10.063,3.802c-4.453,0-8.292-2.146-10.063-3.802c0,0-5.755,0.586-11.189,6.021
+		C1.378,56.689,0.5,62.768,0.5,62.768z"/&gt;
+	
+		&lt;radialGradient id="SVGID_2_" cx="22.6621" cy="21.707" r="17.7954" gradientTransform="matrix(1 0 0 -1 0.04 64.1543)" gradientUnits="userSpaceOnUse"&gt;
+		&lt;stop  offset="0" style="stop-color:#FCB57A"/&gt;
+		&lt;stop  offset="1" style="stop-color:#FF8C36"/&gt;
+	&lt;/radialGradient&gt;
+	&lt;path fill="url(#SVGID_2_)" stroke="#E55E03" d="M28.106,33.486c-8.112,0-12.688,4.313-12.688,10.438
+		c0,7.422,12.688,10.438,12.688,10.438s14.688-3.016,14.688-10.438C42.793,38.75,36.215,33.486,28.106,33.486z M26.288,53.051
+		c0,0-7.135-2.093-8.805-7.201c-0.222-0.682,0.147-1.156,0.795-1.521V37.8h20.188v6.663c0.235,0.352,1.109,0.737,1.229,1.387
+		C40.445,49.917,26.288,53.051,26.288,53.051z"/&gt;
+	
+		&lt;radialGradient id="SVGID_3_" cx="15.2056" cy="831.1875" r="32.3071" gradientTransform="matrix(1 0 0 1 0.0801 -773.6914)" gradientUnits="userSpaceOnUse"&gt;
+		&lt;stop  offset="0" style="stop-color:#FCB57A"/&gt;
+		&lt;stop  offset="1" style="stop-color:#FF8C36"/&gt;
+	&lt;/radialGradient&gt;
+	&lt;path fill="url(#SVGID_3_)" stroke="#E55E03" d="M49.529,51.225c-2.239-2.24-5.041-3.724-7.396-4.67
+		c-2.854,5.51-14.021,7.807-14.021,7.807s-10.472-2.483-12.387-8.514c-2.439,0.771-5.787,2.287-8.749,5.25
+		c-5.592,5.592-6.47,11.67-6.47,11.67c0,1.938,1.575,3.492,3.523,3.492h48.51c1.946,0,3.521-1.558,3.521-3.492
+		C56.055,62.768,54.211,55.906,49.529,51.225z"/&gt;
+	
+		&lt;radialGradient id="SVGID_4_" cx="17.0723" cy="18.4907" r="11.8931" gradientTransform="matrix(1 0 0 -1 0.04 64.1543)" gradientUnits="userSpaceOnUse"&gt;
+		&lt;stop  offset="0" style="stop-color:#FCB57A"/&gt;
+		&lt;stop  offset="1" style="stop-color:#FF8C36"/&gt;
+	&lt;/radialGradient&gt;
+	&lt;path fill="url(#SVGID_4_)" stroke="#E55E03" d="M13.404,44.173c1.15-1.81,2.039-3.832,3.332-5.397
+		c-0.514,1.027-1.669,4.084-1.669,5.148c0,5.186,10.366,9.079,14.688,10.438c-3.472,1.627-9.134-1.498-11.334-2.359
+		c-3.601-1.419-4.071-3.063-5.89-4.854C12.523,47.135,12.878,45,13.404,44.173z"/&gt;
+	
+		&lt;radialGradient id="SVGID_5_" cx="31.8184" cy="19.3525" r="14.63" gradientTransform="matrix(1 0 0 -1 0.04 64.1543)" gradientUnits="userSpaceOnUse"&gt;
+		&lt;stop  offset="0" style="stop-color:#FCB57A"/&gt;
+		&lt;stop  offset="1" style="stop-color:#FF8C36"/&gt;
+	&lt;/radialGradient&gt;
+	&lt;path fill="url(#SVGID_5_)" stroke="#E55E03" d="M45.777,43.924c-1.317-1.568-5.11-9.424-6.604-6.617
+		c0.516,1.025,3.617,3.693,3.617,6.617c0,5.186-10.271,8.576-16.699,9.145c1.429,4.938,11.373,1.293,13.805-0.313
+		c3.563-2.354,4.563-5.133,7.854-3.705C47.754,49.045,48.006,46.574,45.777,43.924z"/&gt;
+	
+		&lt;radialGradient id="SVGID_6_" cx="30.4893" cy="4.8721" r="5.2028" gradientTransform="matrix(1 0 0 -1 0.04 64.1543)" gradientUnits="userSpaceOnUse"&gt;
+		&lt;stop  offset="0" style="stop-color:#FCB57A"/&gt;
+		&lt;stop  offset="1" style="stop-color:#FF8C36"/&gt;
+	&lt;/radialGradient&gt;
+	&lt;path fill="url(#SVGID_6_)" stroke="#E55E03" d="M30.777,54.167c0.357,0.836-0.153,1.983-0.352,2.813
+		c-0.256,1.084-0.072,2.104,0.102,3.186c0.164,1.02,0.156,2.107,0.25,3.167c0.082,0.916,0.482,1.849,0.357,2.75"/&gt;
+	
+		&lt;radialGradient id="SVGID_7_" cx="23.2871" cy="5.3008" r="5.5143" gradientTransform="matrix(1 0 0 -1 0.04 64.1543)" gradientUnits="userSpaceOnUse"&gt;
+		&lt;stop  offset="0" style="stop-color:#FCB57A"/&gt;
+		&lt;stop  offset="1" style="stop-color:#FF8C36"/&gt;
+	&lt;/radialGradient&gt;
+	&lt;path fill="url(#SVGID_7_)" stroke="#E55E03" d="M23.695,53.417c-0.508,0.584-0.476,2.209-0.398,3
+		c0.116,1.183,0.456,2.099,0.333,3.333c-0.192,1.943,0.154,4.479-0.436,6.333"/&gt;
+	
+		&lt;radialGradient id="face_x5F_white_1_" cx="27.5835" cy="3117.4922" r="23.425" fx="23.0139" fy="3115.0024" gradientTransform="matrix(1 0 0 1 0.3203 -3091.7656)" gradientUnits="userSpaceOnUse"&gt;
+		&lt;stop  offset="0" style="stop-color:#FFD28F"/&gt;
+		&lt;stop  offset="1" style="stop-color:#FFAB4F"/&gt;
+	&lt;/radialGradient&gt;
+	&lt;path id="face_x5F_white_3_" fill="url(#face_x5F_white_1_)" stroke="#ED9135" stroke-miterlimit="10" d="M43.676,23.357
+		c0.086,10.2-6.738,18.52-15.25,18.586c-8.5,0.068-15.464-8.146-15.55-18.344C12.794,13.4,19.618,5.079,28.123,5.012
+		C36.627,4.945,43.59,13.158,43.676,23.357z"/&gt;
+	
+		&lt;linearGradient id="face_highlight_1_" gradientUnits="userSpaceOnUse" x1="6468.501" y1="-12291.5195" x2="6492.1304" y2="-12384.9688" gradientTransform="matrix(0.275 0 0 -0.2733 -1752.8849 -3351.7349)"&gt;
+		&lt;stop  offset="0" style="stop-color:#FFFFFF;stop-opacity:0.24"/&gt;
+		&lt;stop  offset="1" style="stop-color:#FFFFFF;stop-opacity:0.16"/&gt;
+	&lt;/linearGradient&gt;
+	&lt;path id="face_highlight_3_" fill="url(#face_highlight_1_)" d="M28.415,5.625c-6.035,0.047-10.747,4.493-12.787,10.386
+		c-0.664,1.919-0.294,4.043,0.98,5.629c2.73,3.398,5.729,6.283,9.461,8.088c3.137,1.518,7.535,2.385,11.893,1.247
+		c2.274-0.592,3.988-2.459,4.375-4.766c0.187-1.094,0.293-2.289,0.283-3.553C42.54,13.244,36.729,5.56,28.415,5.625z"/&gt;
+	&lt;path id="Hair_Young_Black_1_" fill="#5C5C5C" stroke="#353535" stroke-linecap="round" stroke-linejoin="round" d="M20.278,13.25
+		c3.417,4.333,9.333,6.917,9.333,6.917l-1.417-3.5c0,0,7.094,4.691,8.083,4.333c0.968-0.2-1.082-3.807-1.082-3.807
+		s3.138,1.795,4.854,3.969c1.803,2.28,4.285,3.504,4.285,3.504S47.027,2.719,27.289,2.744C8.278,2.709,12.058,27.678,12.058,27.678
+		L14.695,17c0,0,0.914,5.757,1.399,4.875C17.861,15.211,18.861,11.5,20.278,13.25z"/&gt;
+&lt;/g&gt;
+&lt;/svg&gt;
+</y:Resource>
+      <y:Resource id="2">&lt;?xml version="1.0" encoding="utf-8"?&gt;
+&lt;svg version="1.1" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+	 width="57px" height="67px" viewBox="0 0 57 67" enable-background="new 0 0 57 67" xml:space="preserve"&gt;
+&lt;g&gt;
+	
+		&lt;linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="26.3398" y1="3115.7266" x2="27.5807" y2="3145.5239" gradientTransform="matrix(1 0 0 1 0.3203 -3091.7656)"&gt;
+		&lt;stop  offset="0.2711" style="stop-color:#FFAB4F"/&gt;
+		&lt;stop  offset="1" style="stop-color:#FFD28F"/&gt;
+	&lt;/linearGradient&gt;
+	&lt;path fill="url(#SVGID_1_)" stroke="#ED9135" stroke-miterlimit="10" d="M49.529,51.225c-4.396-4.396-10.951-5.884-12.063-6.109
+		V37.8H19.278c0,0,0.038,6.903,0,6.868c0,0-6.874,0.997-12.308,6.432C1.378,56.691,0.5,62.77,0.5,62.77
+		c0,1.938,1.575,3.492,3.523,3.492h48.51c1.947,0,3.521-1.558,3.521-3.492C56.055,62.768,54.211,55.906,49.529,51.225z"/&gt;
+	
+		&lt;radialGradient id="face_x5F_white_1_" cx="27.5835" cy="3117.4922" r="23.425" fx="23.0139" fy="3115.0024" gradientTransform="matrix(1 0 0 1 0.3203 -3091.7656)" gradientUnits="userSpaceOnUse"&gt;
+		&lt;stop  offset="0" style="stop-color:#FFD28F"/&gt;
+		&lt;stop  offset="1" style="stop-color:#FFAB4F"/&gt;
+	&lt;/radialGradient&gt;
+	&lt;path id="face_x5F_white_3_" fill="url(#face_x5F_white_1_)" stroke="#ED9135" stroke-miterlimit="10" d="M43.676,23.357
+		c0.086,10.199-6.738,18.52-15.25,18.586c-8.5,0.068-15.464-8.146-15.55-18.344C12.794,13.4,19.618,5.079,28.123,5.012
+		C36.627,4.945,43.59,13.158,43.676,23.357z"/&gt;
+	
+		&lt;linearGradient id="face_highlight_1_" gradientUnits="userSpaceOnUse" x1="6468.5" y1="-12286.8594" x2="6492.1294" y2="-12380.3086" gradientTransform="matrix(0.275 0 0 -0.2733 -1752.8849 -3350.4617)"&gt;
+		&lt;stop  offset="0" style="stop-color:#FFFFFF;stop-opacity:0.24"/&gt;
+		&lt;stop  offset="1" style="stop-color:#FFFFFF;stop-opacity:0.16"/&gt;
+	&lt;/linearGradient&gt;
+	&lt;path id="face_highlight_3_" fill="url(#face_highlight_1_)" d="M28.415,5.625c-6.035,0.047-10.747,4.493-12.787,10.386
+		c-0.664,1.919-0.294,4.043,0.98,5.629c2.73,3.398,5.729,6.283,9.461,8.088c3.137,1.518,7.535,2.385,11.893,1.247
+		c2.274-0.592,3.988-2.459,4.375-4.766c0.187-1.094,0.293-2.289,0.283-3.553C42.54,13.244,36.729,5.56,28.415,5.625z"/&gt;
+	&lt;path id="Hair_Female_1_Red_1_" fill="#FAE1AA" stroke="#E2B354" stroke-linecap="round" stroke-linejoin="round" d="M28.372,0.5
+		C17.537,0.5,8.269,7.748,9.153,26.125c0.563,6.563,5.862,12.042,9.366,13.531c-2.929-10.968-0.304-25.021-0.585-25.526
+		c-0.281-0.505,3.536,6.728,3.536,6.728l3.183-8.312c5.541,4.28,0.393,11.309,1.049,11.058c4.26-1.631,5.34-9.228,5.34-9.228
+		s2.729,3.657,2.701,5.504c-0.054,3.562,2.194-6.067,2.194-6.067l1.027,2.031c6.727,9.822,3.684,16.208,1.648,22.781
+		c15.666-0.703,12.291-10.48,9.66-18.407C43.59,6.092,39.206,0.5,28.372,0.5z"/&gt;
+	
+		&lt;linearGradient id="body_1_" gradientUnits="userSpaceOnUse" x1="95.9063" y1="-3134.2153" x2="31.5133" y2="-3134.2153" gradientTransform="matrix(0.9852 0 0 -0.9852 -34.4844 -3031.9851)"&gt;
+		&lt;stop  offset="0" style="stop-color:#49AD33"/&gt;
+		&lt;stop  offset="1" style="stop-color:#C2DA92"/&gt;
+	&lt;/linearGradient&gt;
+	&lt;path id="body_8_" fill="url(#body_1_)" stroke="#008D33" d="M0.5,62.768c0,1.938,1.575,3.494,3.523,3.494h48.51
+		c1.947,0,3.521-1.559,3.521-3.494c0,0-1.844-6.861-6.525-11.543c-4.815-4.813-8.244-5.146-8.244-5.146
+		c-1.444,6.983-8.555,8.786-13.007,8.786s-11.322-2.643-11.941-9.439c0,0-4.559,1.199-9.367,5.674
+		C1.378,56.689,0.5,62.768,0.5,62.768z"/&gt;
+&lt;/g&gt;
+&lt;/svg&gt;
+</y:Resource>
+    </y:Resources>
+  </data>
+</graphml>
diff --git a/docs/guide-pt-BR/images/rbac-hierarchy-1.png b/docs/guide-pt-BR/images/rbac-hierarchy-1.png
new file mode 100644
index 0000000..7443fc7
Binary files /dev/null and b/docs/guide-pt-BR/images/rbac-hierarchy-1.png differ
diff --git a/docs/guide-pt-BR/images/rbac-hierarchy-2.graphml b/docs/guide-pt-BR/images/rbac-hierarchy-2.graphml
new file mode 100644
index 0000000..b81887b
--- /dev/null
+++ b/docs/guide-pt-BR/images/rbac-hierarchy-2.graphml
@@ -0,0 +1,368 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<graphml xmlns="http://graphml.graphdrawing.org/xmlns" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:y="http://www.yworks.com/xml/graphml" xmlns:yed="http://www.yworks.com/xml/yed/3" xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns http://www.yworks.com/xml/schema/graphml/1.1/ygraphml.xsd">
+  <!--Created by yEd 3.12.2-->
+  <key for="graphml" id="d0" yfiles.type="resources"/>
+  <key for="port" id="d1" yfiles.type="portgraphics"/>
+  <key for="port" id="d2" yfiles.type="portgeometry"/>
+  <key for="port" id="d3" yfiles.type="portuserdata"/>
+  <key attr.name="url" attr.type="string" for="node" id="d4"/>
+  <key attr.name="description" attr.type="string" for="node" id="d5"/>
+  <key for="node" id="d6" yfiles.type="nodegraphics"/>
+  <key attr.name="Description" attr.type="string" for="graph" id="d7"/>
+  <key attr.name="url" attr.type="string" for="edge" id="d8"/>
+  <key attr.name="description" attr.type="string" for="edge" id="d9"/>
+  <key for="edge" id="d10" yfiles.type="edgegraphics"/>
+  <graph edgedefault="directed" id="G">
+    <data key="d7"/>
+    <node id="n0">
+      <data key="d6">
+        <y:ShapeNode>
+          <y:Geometry height="69.0" width="103.0" x="34.0" y="-11.5"/>
+          <y:Fill color="#ADF4A6" transparent="false"/>
+          <y:BorderStyle color="#000000" type="line" width="1.0"/>
+          <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.701171875" modelName="custom" textColor="#000000" visible="true" width="36.68359375" x="33.158203125" y="25.1494140625">admin<y:LabelModel>
+              <y:SmartNodeLabelModel distance="4.0"/>
+            </y:LabelModel>
+            <y:ModelParameter>
+              <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
+            </y:ModelParameter>
+          </y:NodeLabel>
+          <y:Shape type="roundrectangle"/>
+        </y:ShapeNode>
+      </data>
+    </node>
+    <node id="n1">
+      <data key="d6">
+        <y:ShapeNode>
+          <y:Geometry height="69.0" width="103.0" x="193.0" y="-11.5"/>
+          <y:Fill color="#ADF4A6" transparent="false"/>
+          <y:BorderStyle color="#000000" type="line" width="1.0"/>
+          <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.701171875" modelName="custom" textColor="#000000" visible="true" width="38.025390625" x="32.4873046875" y="25.1494140625">author<y:LabelModel>
+              <y:SmartNodeLabelModel distance="4.0"/>
+            </y:LabelModel>
+            <y:ModelParameter>
+              <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
+            </y:ModelParameter>
+          </y:NodeLabel>
+          <y:Shape type="roundrectangle"/>
+        </y:ShapeNode>
+      </data>
+    </node>
+    <node id="n2">
+      <data key="d6">
+        <y:SVGNode>
+          <y:Geometry height="64.53585815429688" width="56.560157775878906" x="216.21992111206055" y="-132.03585815429688"/>
+          <y:Fill color="#CCCCFF" transparent="false"/>
+          <y:BorderStyle color="#000000" type="line" width="1.0"/>
+          <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.701171875" modelName="custom" textColor="#000000" visible="true" width="62.37109375" x="-2.905467987060547" y="-27.814727783203125">John, ID=2<y:LabelModel>
+              <y:SmartNodeLabelModel distance="4.0"/>
+            </y:LabelModel>
+            <y:ModelParameter>
+              <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.5" nodeRatioX="0.0" nodeRatioY="-0.5" offsetX="0.0" offsetY="-9.113555908203125" upX="0.0" upY="-1.0"/>
+            </y:ModelParameter>
+          </y:NodeLabel>
+          <y:SVGNodeProperties usingVisualBounds="true"/>
+          <y:SVGModel svgBoundsPolicy="0">
+            <y:SVGContent refid="1"/>
+          </y:SVGModel>
+        </y:SVGNode>
+      </data>
+    </node>
+    <node id="n3">
+      <data key="d6">
+        <y:SVGNode>
+          <y:Geometry height="66.76200103759766" width="56.554100036621094" x="57.22294998168945" y="-133.14892959594727"/>
+          <y:Fill color="#CCCCFF" transparent="false"/>
+          <y:BorderStyle color="#000000" type="line" width="1.0"/>
+          <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.701171875" modelName="custom" textColor="#000000" visible="true" width="62.37109375" x="-2.908496856689453" y="-27.701656341552734">Jane, ID=1<y:LabelModel>
+              <y:SmartNodeLabelModel distance="4.0"/>
+            </y:LabelModel>
+            <y:ModelParameter>
+              <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.5" nodeRatioX="0.0" nodeRatioY="-0.5" offsetX="0.0" offsetY="-9.000484466552734" upX="0.0" upY="-1.0"/>
+            </y:ModelParameter>
+          </y:NodeLabel>
+          <y:SVGNodeProperties usingVisualBounds="true"/>
+          <y:SVGModel svgBoundsPolicy="0">
+            <y:SVGContent refid="2"/>
+          </y:SVGModel>
+        </y:SVGNode>
+      </data>
+    </node>
+    <node id="n4">
+      <data key="d6">
+        <y:ShapeNode>
+          <y:Geometry height="69.0" width="103.0" x="34.0" y="197.5"/>
+          <y:Fill color="#99CCFF" transparent="false"/>
+          <y:BorderStyle color="#000000" type="line" width="1.0"/>
+          <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.701171875" modelName="custom" textColor="#000000" visible="true" width="64.71484375" x="19.142578125" y="25.1494140625">updatePost<y:LabelModel>
+              <y:SmartNodeLabelModel distance="4.0"/>
+            </y:LabelModel>
+            <y:ModelParameter>
+              <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
+            </y:ModelParameter>
+          </y:NodeLabel>
+          <y:Shape type="roundrectangle"/>
+        </y:ShapeNode>
+      </data>
+    </node>
+    <node id="n5">
+      <data key="d6">
+        <y:ShapeNode>
+          <y:Geometry height="69.0" width="103.0" x="193.0" y="197.5"/>
+          <y:Fill color="#99CCFF" transparent="false"/>
+          <y:BorderStyle color="#000000" type="line" width="1.0"/>
+          <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.701171875" modelName="custom" textColor="#000000" visible="true" width="89.388671875" x="6.8056640625" y="25.1494140625">updateOwnPost<y:LabelModel>
+              <y:SmartNodeLabelModel distance="4.0"/>
+            </y:LabelModel>
+            <y:ModelParameter>
+              <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
+            </y:ModelParameter>
+          </y:NodeLabel>
+          <y:Shape type="roundrectangle"/>
+        </y:ShapeNode>
+      </data>
+    </node>
+    <node id="n6">
+      <data key="d6">
+        <y:ShapeNode>
+          <y:Geometry height="69.0" width="103.0" x="352.0" y="197.5"/>
+          <y:Fill color="#99CCFF" transparent="false"/>
+          <y:BorderStyle color="#000000" type="line" width="1.0"/>
+          <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.701171875" modelName="custom" textColor="#000000" visible="true" width="61.36328125" x="20.818359375" y="25.1494140625">createPost<y:LabelModel>
+              <y:SmartNodeLabelModel distance="4.0"/>
+            </y:LabelModel>
+            <y:ModelParameter>
+              <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
+            </y:ModelParameter>
+          </y:NodeLabel>
+          <y:Shape type="roundrectangle"/>
+        </y:ShapeNode>
+      </data>
+    </node>
+    <node id="n7">
+      <data key="d6">
+        <y:ShapeNode>
+          <y:Geometry height="29.535858154296875" width="103.0" x="193.0" y="167.96414184570312"/>
+          <y:Fill color="#FFCC00" transparent="false"/>
+          <y:BorderStyle color="#000000" type="line" width="1.0"/>
+          <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.701171875" modelName="custom" textColor="#000000" visible="true" width="64.03515625" x="19.482421875" y="5.4173431396484375">AuthorRule<y:LabelModel>
+              <y:SmartNodeLabelModel distance="4.0"/>
+            </y:LabelModel>
+            <y:ModelParameter>
+              <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
+            </y:ModelParameter>
+          </y:NodeLabel>
+          <y:Shape type="roundrectangle"/>
+        </y:ShapeNode>
+      </data>
+    </node>
+    <edge id="e0" source="n4" target="n0">
+      <data key="d10">
+        <y:PolyLineEdge>
+          <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
+          <y:LineStyle color="#000000" type="line" width="1.0"/>
+          <y:Arrows source="none" target="standard"/>
+          <y:BendStyle smoothed="false"/>
+        </y:PolyLineEdge>
+      </data>
+    </edge>
+    <edge id="e1" source="n4" target="n5">
+      <data key="d10">
+        <y:PolyLineEdge>
+          <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
+          <y:LineStyle color="#000000" type="line" width="1.0"/>
+          <y:Arrows source="none" target="standard"/>
+          <y:BendStyle smoothed="false"/>
+        </y:PolyLineEdge>
+      </data>
+    </edge>
+    <edge id="e2" source="n1" target="n0">
+      <data key="d10">
+        <y:PolyLineEdge>
+          <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
+          <y:LineStyle color="#000000" type="line" width="1.0"/>
+          <y:Arrows source="none" target="standard"/>
+          <y:BendStyle smoothed="false"/>
+        </y:PolyLineEdge>
+      </data>
+    </edge>
+    <edge id="e3" source="n6" target="n1">
+      <data key="d10">
+        <y:PolyLineEdge>
+          <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0">
+            <y:Point x="403.5" y="23.0"/>
+          </y:Path>
+          <y:LineStyle color="#000000" type="line" width="1.0"/>
+          <y:Arrows source="none" target="standard"/>
+          <y:BendStyle smoothed="false"/>
+        </y:PolyLineEdge>
+      </data>
+    </edge>
+    <edge id="e4" source="n1" target="n2">
+      <data key="d10">
+        <y:PolyLineEdge>
+          <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
+          <y:LineStyle color="#000000" type="line" width="1.0"/>
+          <y:Arrows source="none" target="standard"/>
+          <y:BendStyle smoothed="false"/>
+        </y:PolyLineEdge>
+      </data>
+    </edge>
+    <edge id="e5" source="n0" target="n3">
+      <data key="d10">
+        <y:PolyLineEdge>
+          <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
+          <y:LineStyle color="#000000" type="line" width="1.0"/>
+          <y:Arrows source="none" target="standard"/>
+          <y:BendStyle smoothed="false"/>
+        </y:PolyLineEdge>
+      </data>
+    </edge>
+    <edge id="e6" source="n7" target="n1">
+      <data key="d10">
+        <y:PolyLineEdge>
+          <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
+          <y:LineStyle color="#000000" type="line" width="1.0"/>
+          <y:Arrows source="none" target="standard"/>
+          <y:BendStyle smoothed="false"/>
+        </y:PolyLineEdge>
+      </data>
+    </edge>
+  </graph>
+  <data key="d0">
+    <y:Resources>
+      <y:Resource id="1">&lt;?xml version="1.0" encoding="utf-8"?&gt;
+&lt;svg version="1.1" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+	 width="57px" height="65px" viewBox="0 0 57 65" enable-background="new 0 0 57 65" xml:space="preserve"&gt;
+&lt;g&gt;
+	
+		&lt;linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="26.3398" y1="3115.7266" x2="27.5807" y2="3145.5239" gradientTransform="matrix(1 0 0 1 0.3203 -3091.7656)"&gt;
+		&lt;stop  offset="0.2711" style="stop-color:#FFAB4F"/&gt;
+		&lt;stop  offset="1" style="stop-color:#FFD28F"/&gt;
+	&lt;/linearGradient&gt;
+	&lt;path fill="url(#SVGID_1_)" stroke="#ED9135" stroke-miterlimit="10" d="M49.529,51.225c-4.396-4.396-10.951-5.884-12.063-6.109
+		V37.8H19.278c0,0,0.038,6.903,0,6.868c0,0-6.874,0.997-12.308,6.432C1.378,56.691,0.5,62.77,0.5,62.77
+		c0,1.938,1.575,3.492,3.523,3.492h48.51c1.947,0,3.521-1.558,3.521-3.492C56.055,62.768,54.211,55.906,49.529,51.225z"/&gt;
+	&lt;path id="body_18_" fill="#ECECEC" stroke="#9B9B9B" stroke-miterlimit="10" d="M0.5,62.768c0,1.938,1.575,3.494,3.523,3.494h48.51
+		c1.947,0,3.521-1.559,3.521-3.494c0,0-1.844-6.861-6.525-11.543c-4.815-4.813-11.244-6.146-11.244-6.146
+		c-1.771,1.655-5.61,3.802-10.063,3.802c-4.453,0-8.292-2.146-10.063-3.802c0,0-5.755,0.586-11.189,6.021
+		C1.378,56.689,0.5,62.768,0.5,62.768z"/&gt;
+	
+		&lt;radialGradient id="SVGID_2_" cx="22.6621" cy="21.707" r="17.7954" gradientTransform="matrix(1 0 0 -1 0.04 64.1543)" gradientUnits="userSpaceOnUse"&gt;
+		&lt;stop  offset="0" style="stop-color:#FCB57A"/&gt;
+		&lt;stop  offset="1" style="stop-color:#FF8C36"/&gt;
+	&lt;/radialGradient&gt;
+	&lt;path fill="url(#SVGID_2_)" stroke="#E55E03" d="M28.106,33.486c-8.112,0-12.688,4.313-12.688,10.438
+		c0,7.422,12.688,10.438,12.688,10.438s14.688-3.016,14.688-10.438C42.793,38.75,36.215,33.486,28.106,33.486z M26.288,53.051
+		c0,0-7.135-2.093-8.805-7.201c-0.222-0.682,0.147-1.156,0.795-1.521V37.8h20.188v6.663c0.235,0.352,1.109,0.737,1.229,1.387
+		C40.445,49.917,26.288,53.051,26.288,53.051z"/&gt;
+	
+		&lt;radialGradient id="SVGID_3_" cx="15.2056" cy="831.1875" r="32.3071" gradientTransform="matrix(1 0 0 1 0.0801 -773.6914)" gradientUnits="userSpaceOnUse"&gt;
+		&lt;stop  offset="0" style="stop-color:#FCB57A"/&gt;
+		&lt;stop  offset="1" style="stop-color:#FF8C36"/&gt;
+	&lt;/radialGradient&gt;
+	&lt;path fill="url(#SVGID_3_)" stroke="#E55E03" d="M49.529,51.225c-2.239-2.24-5.041-3.724-7.396-4.67
+		c-2.854,5.51-14.021,7.807-14.021,7.807s-10.472-2.483-12.387-8.514c-2.439,0.771-5.787,2.287-8.749,5.25
+		c-5.592,5.592-6.47,11.67-6.47,11.67c0,1.938,1.575,3.492,3.523,3.492h48.51c1.946,0,3.521-1.558,3.521-3.492
+		C56.055,62.768,54.211,55.906,49.529,51.225z"/&gt;
+	
+		&lt;radialGradient id="SVGID_4_" cx="17.0723" cy="18.4907" r="11.8931" gradientTransform="matrix(1 0 0 -1 0.04 64.1543)" gradientUnits="userSpaceOnUse"&gt;
+		&lt;stop  offset="0" style="stop-color:#FCB57A"/&gt;
+		&lt;stop  offset="1" style="stop-color:#FF8C36"/&gt;
+	&lt;/radialGradient&gt;
+	&lt;path fill="url(#SVGID_4_)" stroke="#E55E03" d="M13.404,44.173c1.15-1.81,2.039-3.832,3.332-5.397
+		c-0.514,1.027-1.669,4.084-1.669,5.148c0,5.186,10.366,9.079,14.688,10.438c-3.472,1.627-9.134-1.498-11.334-2.359
+		c-3.601-1.419-4.071-3.063-5.89-4.854C12.523,47.135,12.878,45,13.404,44.173z"/&gt;
+	
+		&lt;radialGradient id="SVGID_5_" cx="31.8184" cy="19.3525" r="14.63" gradientTransform="matrix(1 0 0 -1 0.04 64.1543)" gradientUnits="userSpaceOnUse"&gt;
+		&lt;stop  offset="0" style="stop-color:#FCB57A"/&gt;
+		&lt;stop  offset="1" style="stop-color:#FF8C36"/&gt;
+	&lt;/radialGradient&gt;
+	&lt;path fill="url(#SVGID_5_)" stroke="#E55E03" d="M45.777,43.924c-1.317-1.568-5.11-9.424-6.604-6.617
+		c0.516,1.025,3.617,3.693,3.617,6.617c0,5.186-10.271,8.576-16.699,9.145c1.429,4.938,11.373,1.293,13.805-0.313
+		c3.563-2.354,4.563-5.133,7.854-3.705C47.754,49.045,48.006,46.574,45.777,43.924z"/&gt;
+	
+		&lt;radialGradient id="SVGID_6_" cx="30.4893" cy="4.8721" r="5.2028" gradientTransform="matrix(1 0 0 -1 0.04 64.1543)" gradientUnits="userSpaceOnUse"&gt;
+		&lt;stop  offset="0" style="stop-color:#FCB57A"/&gt;
+		&lt;stop  offset="1" style="stop-color:#FF8C36"/&gt;
+	&lt;/radialGradient&gt;
+	&lt;path fill="url(#SVGID_6_)" stroke="#E55E03" d="M30.777,54.167c0.357,0.836-0.153,1.983-0.352,2.813
+		c-0.256,1.084-0.072,2.104,0.102,3.186c0.164,1.02,0.156,2.107,0.25,3.167c0.082,0.916,0.482,1.849,0.357,2.75"/&gt;
+	
+		&lt;radialGradient id="SVGID_7_" cx="23.2871" cy="5.3008" r="5.5143" gradientTransform="matrix(1 0 0 -1 0.04 64.1543)" gradientUnits="userSpaceOnUse"&gt;
+		&lt;stop  offset="0" style="stop-color:#FCB57A"/&gt;
+		&lt;stop  offset="1" style="stop-color:#FF8C36"/&gt;
+	&lt;/radialGradient&gt;
+	&lt;path fill="url(#SVGID_7_)" stroke="#E55E03" d="M23.695,53.417c-0.508,0.584-0.476,2.209-0.398,3
+		c0.116,1.183,0.456,2.099,0.333,3.333c-0.192,1.943,0.154,4.479-0.436,6.333"/&gt;
+	
+		&lt;radialGradient id="face_x5F_white_1_" cx="27.5835" cy="3117.4922" r="23.425" fx="23.0139" fy="3115.0024" gradientTransform="matrix(1 0 0 1 0.3203 -3091.7656)" gradientUnits="userSpaceOnUse"&gt;
+		&lt;stop  offset="0" style="stop-color:#FFD28F"/&gt;
+		&lt;stop  offset="1" style="stop-color:#FFAB4F"/&gt;
+	&lt;/radialGradient&gt;
+	&lt;path id="face_x5F_white_3_" fill="url(#face_x5F_white_1_)" stroke="#ED9135" stroke-miterlimit="10" d="M43.676,23.357
+		c0.086,10.2-6.738,18.52-15.25,18.586c-8.5,0.068-15.464-8.146-15.55-18.344C12.794,13.4,19.618,5.079,28.123,5.012
+		C36.627,4.945,43.59,13.158,43.676,23.357z"/&gt;
+	
+		&lt;linearGradient id="face_highlight_1_" gradientUnits="userSpaceOnUse" x1="6468.501" y1="-12291.5195" x2="6492.1304" y2="-12384.9688" gradientTransform="matrix(0.275 0 0 -0.2733 -1752.8849 -3351.7349)"&gt;
+		&lt;stop  offset="0" style="stop-color:#FFFFFF;stop-opacity:0.24"/&gt;
+		&lt;stop  offset="1" style="stop-color:#FFFFFF;stop-opacity:0.16"/&gt;
+	&lt;/linearGradient&gt;
+	&lt;path id="face_highlight_3_" fill="url(#face_highlight_1_)" d="M28.415,5.625c-6.035,0.047-10.747,4.493-12.787,10.386
+		c-0.664,1.919-0.294,4.043,0.98,5.629c2.73,3.398,5.729,6.283,9.461,8.088c3.137,1.518,7.535,2.385,11.893,1.247
+		c2.274-0.592,3.988-2.459,4.375-4.766c0.187-1.094,0.293-2.289,0.283-3.553C42.54,13.244,36.729,5.56,28.415,5.625z"/&gt;
+	&lt;path id="Hair_Young_Black_1_" fill="#5C5C5C" stroke="#353535" stroke-linecap="round" stroke-linejoin="round" d="M20.278,13.25
+		c3.417,4.333,9.333,6.917,9.333,6.917l-1.417-3.5c0,0,7.094,4.691,8.083,4.333c0.968-0.2-1.082-3.807-1.082-3.807
+		s3.138,1.795,4.854,3.969c1.803,2.28,4.285,3.504,4.285,3.504S47.027,2.719,27.289,2.744C8.278,2.709,12.058,27.678,12.058,27.678
+		L14.695,17c0,0,0.914,5.757,1.399,4.875C17.861,15.211,18.861,11.5,20.278,13.25z"/&gt;
+&lt;/g&gt;
+&lt;/svg&gt;
+</y:Resource>
+      <y:Resource id="2">&lt;?xml version="1.0" encoding="utf-8"?&gt;
+&lt;svg version="1.1" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+	 width="57px" height="67px" viewBox="0 0 57 67" enable-background="new 0 0 57 67" xml:space="preserve"&gt;
+&lt;g&gt;
+	
+		&lt;linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="26.3398" y1="3115.7266" x2="27.5807" y2="3145.5239" gradientTransform="matrix(1 0 0 1 0.3203 -3091.7656)"&gt;
+		&lt;stop  offset="0.2711" style="stop-color:#FFAB4F"/&gt;
+		&lt;stop  offset="1" style="stop-color:#FFD28F"/&gt;
+	&lt;/linearGradient&gt;
+	&lt;path fill="url(#SVGID_1_)" stroke="#ED9135" stroke-miterlimit="10" d="M49.529,51.225c-4.396-4.396-10.951-5.884-12.063-6.109
+		V37.8H19.278c0,0,0.038,6.903,0,6.868c0,0-6.874,0.997-12.308,6.432C1.378,56.691,0.5,62.77,0.5,62.77
+		c0,1.938,1.575,3.492,3.523,3.492h48.51c1.947,0,3.521-1.558,3.521-3.492C56.055,62.768,54.211,55.906,49.529,51.225z"/&gt;
+	
+		&lt;radialGradient id="face_x5F_white_1_" cx="27.5835" cy="3117.4922" r="23.425" fx="23.0139" fy="3115.0024" gradientTransform="matrix(1 0 0 1 0.3203 -3091.7656)" gradientUnits="userSpaceOnUse"&gt;
+		&lt;stop  offset="0" style="stop-color:#FFD28F"/&gt;
+		&lt;stop  offset="1" style="stop-color:#FFAB4F"/&gt;
+	&lt;/radialGradient&gt;
+	&lt;path id="face_x5F_white_3_" fill="url(#face_x5F_white_1_)" stroke="#ED9135" stroke-miterlimit="10" d="M43.676,23.357
+		c0.086,10.199-6.738,18.52-15.25,18.586c-8.5,0.068-15.464-8.146-15.55-18.344C12.794,13.4,19.618,5.079,28.123,5.012
+		C36.627,4.945,43.59,13.158,43.676,23.357z"/&gt;
+	
+		&lt;linearGradient id="face_highlight_1_" gradientUnits="userSpaceOnUse" x1="6468.5" y1="-12286.8594" x2="6492.1294" y2="-12380.3086" gradientTransform="matrix(0.275 0 0 -0.2733 -1752.8849 -3350.4617)"&gt;
+		&lt;stop  offset="0" style="stop-color:#FFFFFF;stop-opacity:0.24"/&gt;
+		&lt;stop  offset="1" style="stop-color:#FFFFFF;stop-opacity:0.16"/&gt;
+	&lt;/linearGradient&gt;
+	&lt;path id="face_highlight_3_" fill="url(#face_highlight_1_)" d="M28.415,5.625c-6.035,0.047-10.747,4.493-12.787,10.386
+		c-0.664,1.919-0.294,4.043,0.98,5.629c2.73,3.398,5.729,6.283,9.461,8.088c3.137,1.518,7.535,2.385,11.893,1.247
+		c2.274-0.592,3.988-2.459,4.375-4.766c0.187-1.094,0.293-2.289,0.283-3.553C42.54,13.244,36.729,5.56,28.415,5.625z"/&gt;
+	&lt;path id="Hair_Female_1_Red_1_" fill="#FAE1AA" stroke="#E2B354" stroke-linecap="round" stroke-linejoin="round" d="M28.372,0.5
+		C17.537,0.5,8.269,7.748,9.153,26.125c0.563,6.563,5.862,12.042,9.366,13.531c-2.929-10.968-0.304-25.021-0.585-25.526
+		c-0.281-0.505,3.536,6.728,3.536,6.728l3.183-8.312c5.541,4.28,0.393,11.309,1.049,11.058c4.26-1.631,5.34-9.228,5.34-9.228
+		s2.729,3.657,2.701,5.504c-0.054,3.562,2.194-6.067,2.194-6.067l1.027,2.031c6.727,9.822,3.684,16.208,1.648,22.781
+		c15.666-0.703,12.291-10.48,9.66-18.407C43.59,6.092,39.206,0.5,28.372,0.5z"/&gt;
+	
+		&lt;linearGradient id="body_1_" gradientUnits="userSpaceOnUse" x1="95.9063" y1="-3134.2153" x2="31.5133" y2="-3134.2153" gradientTransform="matrix(0.9852 0 0 -0.9852 -34.4844 -3031.9851)"&gt;
+		&lt;stop  offset="0" style="stop-color:#49AD33"/&gt;
+		&lt;stop  offset="1" style="stop-color:#C2DA92"/&gt;
+	&lt;/linearGradient&gt;
+	&lt;path id="body_8_" fill="url(#body_1_)" stroke="#008D33" d="M0.5,62.768c0,1.938,1.575,3.494,3.523,3.494h48.51
+		c1.947,0,3.521-1.559,3.521-3.494c0,0-1.844-6.861-6.525-11.543c-4.815-4.813-8.244-5.146-8.244-5.146
+		c-1.444,6.983-8.555,8.786-13.007,8.786s-11.322-2.643-11.941-9.439c0,0-4.559,1.199-9.367,5.674
+		C1.378,56.689,0.5,62.768,0.5,62.768z"/&gt;
+&lt;/g&gt;
+&lt;/svg&gt;
+</y:Resource>
+    </y:Resources>
+  </data>
+</graphml>
diff --git a/docs/guide-pt-BR/images/rbac-hierarchy-2.png b/docs/guide-pt-BR/images/rbac-hierarchy-2.png
new file mode 100644
index 0000000..e77c564
Binary files /dev/null and b/docs/guide-pt-BR/images/rbac-hierarchy-2.png differ
diff --git a/docs/guide-pt-BR/images/start-app-installed.png b/docs/guide-pt-BR/images/start-app-installed.png
new file mode 100644
index 0000000..a70f3e6
Binary files /dev/null and b/docs/guide-pt-BR/images/start-app-installed.png differ
diff --git a/docs/guide-pt-BR/images/start-country-list.png b/docs/guide-pt-BR/images/start-country-list.png
new file mode 100644
index 0000000..6994da2
Binary files /dev/null and b/docs/guide-pt-BR/images/start-country-list.png differ
diff --git a/docs/guide-pt-BR/images/start-entry-confirmation.png b/docs/guide-pt-BR/images/start-entry-confirmation.png
new file mode 100644
index 0000000..ed442a4
Binary files /dev/null and b/docs/guide-pt-BR/images/start-entry-confirmation.png differ
diff --git a/docs/guide-pt-BR/images/start-form-validation.png b/docs/guide-pt-BR/images/start-form-validation.png
new file mode 100644
index 0000000..f386528
Binary files /dev/null and b/docs/guide-pt-BR/images/start-form-validation.png differ
diff --git a/docs/guide-pt-BR/images/start-gii-country-grid.png b/docs/guide-pt-BR/images/start-gii-country-grid.png
new file mode 100644
index 0000000..746663c
Binary files /dev/null and b/docs/guide-pt-BR/images/start-gii-country-grid.png differ
diff --git a/docs/guide-pt-BR/images/start-gii-country-update.png b/docs/guide-pt-BR/images/start-gii-country-update.png
new file mode 100644
index 0000000..51f2d38
Binary files /dev/null and b/docs/guide-pt-BR/images/start-gii-country-update.png differ
diff --git a/docs/guide-pt-BR/images/start-gii-crud-preview.png b/docs/guide-pt-BR/images/start-gii-crud-preview.png
new file mode 100644
index 0000000..d7becdd
Binary files /dev/null and b/docs/guide-pt-BR/images/start-gii-crud-preview.png differ
diff --git a/docs/guide-pt-BR/images/start-gii-crud.png b/docs/guide-pt-BR/images/start-gii-crud.png
new file mode 100644
index 0000000..a3aa21b
Binary files /dev/null and b/docs/guide-pt-BR/images/start-gii-crud.png differ
diff --git a/docs/guide-pt-BR/images/start-gii-model-preview.png b/docs/guide-pt-BR/images/start-gii-model-preview.png
new file mode 100644
index 0000000..080be64
Binary files /dev/null and b/docs/guide-pt-BR/images/start-gii-model-preview.png differ
diff --git a/docs/guide-pt-BR/images/start-gii-model.png b/docs/guide-pt-BR/images/start-gii-model.png
new file mode 100644
index 0000000..59c16a4
Binary files /dev/null and b/docs/guide-pt-BR/images/start-gii-model.png differ
diff --git a/docs/guide-pt-BR/images/start-gii.png b/docs/guide-pt-BR/images/start-gii.png
new file mode 100644
index 0000000..28c75b6
Binary files /dev/null and b/docs/guide-pt-BR/images/start-gii.png differ
diff --git a/docs/guide-pt-BR/images/start-hello-world.png b/docs/guide-pt-BR/images/start-hello-world.png
new file mode 100644
index 0000000..30d1aca
Binary files /dev/null and b/docs/guide-pt-BR/images/start-hello-world.png differ
diff --git a/docs/guide-pt-BR/start-databases.md b/docs/guide-pt-BR/start-databases.md
new file mode 100644
index 0000000..0360b4a
--- /dev/null
+++ b/docs/guide-pt-BR/start-databases.md
@@ -0,0 +1,293 @@
+Trabalhando com Bancos de Dados
+===============================
+
+Esta seção descreverá como criar uma nova página que exibe dados de países
+buscados de uma tabela do banco de dados chamada `country`. Para isso, você
+configurará uma conexão com o banco de dados, criará uma classe de
+[Active Record](db-active-record.md), definirá uma [action](structure-controllers.md) (ação),
+e criará uma [view](structure-views.md) (visão).
+
+Através deste tutorial, você aprenderá como:
+
+* Configurar uma conexão de BD
+* Definir uma classe de Active Record
+* Consultar dados usando a classe de Active Record
+* Exibir dados em uma view de modo paginado
+
+Perceba que para terminar essa seção, você deve ter conhecimento e experiência
+básica usando bancos de dados. Em particular, você deveria saber como criar um
+banco de dados, e como executar declarações SQL usando uma ferramente de cliente
+de BD.
+
+
+Preparando o Banco de Dados <a name="preparing-database"></a>
+---------------------------
+
+Para começar, crie um banco de dados chamado `yii2basic`, a partir do qual você
+buscará os dados em sua aplicação. Você pode criar um banco de dados SQLite, MySQL,
+PostgreSQL, MSSQL ou Oracle, já que o Yii tem suporte embutido a muitas aplicações
+de bancos de dados. Por questões de simplicidade, será assumido o uso do MySQL
+na descrição a seguir.
+
+Em seguida, crie uma tabela chamada `country` no banco de dados, e insira alguns
+dados de exemplo. Você pode rodar as seguintes declarações SQL para fazê-lo:
+
+```sql
+CREATE TABLE `country` (
+  `code` CHAR(2) NOT NULL PRIMARY KEY,
+  `name` CHAR(52) NOT NULL,
+  `population` INT(11) NOT NULL DEFAULT '0'
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+
+INSERT INTO `country` VALUES ('AU','Australia',18886000);
+INSERT INTO `country` VALUES ('BR','Brazil',170115000);
+INSERT INTO `country` VALUES ('CA','Canada',1147000);
+INSERT INTO `country` VALUES ('CN','China',1277558000);
+INSERT INTO `country` VALUES ('DE','Germany',82164700);
+INSERT INTO `country` VALUES ('FR','France',59225700);
+INSERT INTO `country` VALUES ('GB','United Kingdom',59623400);
+INSERT INTO `country` VALUES ('IN','India',1013662000);
+INSERT INTO `country` VALUES ('RU','Russia',146934000);
+INSERT INTO `country` VALUES ('US','United States',278357000);
+```
+
+Neste ponto, você tem um banco de dados chamado `yii2basic`, e dentro dele uma
+tabela `country` com três colunas, contendo dez linhas de dados.
+
+Configurando uma Conexão do BD <a name="configuring-db-connection"></a>
+------------------------------
+
+Antes de prosseguir, certifique-se de que você possui instalados tanto a
+extensão [PDO](http://www.php.net/manual/en/book.pdo.php) do PHP quanto o driver
+do PDO para a base que você está usando (por exemplo, `pdo_mysql` para o MySQL).
+Este é um requisito básico se a sua aplicação usa um banco de dados relacional.
+
+Tendo estes instalados, abra o arquivo `config/db.php` e mude os parâmetros para
+que estejam corretos para o seu banco de dados. Por padrão, o arquivo contém
+o seguinte:
+
+```php
+<?php
+
+return [
+    'class' => 'yii\db\Connection',
+    'dsn' => 'mysql:host=localhost;dbname=yii2basic',
+    'username' => 'root',
+    'password' => '',
+    'charset' => 'utf8',
+];
+```
+
+O arquivo `config/db.php` é uma ferramenta de [configuração](concept-configurations.md)
+típica baseada em arquivos. Este arquivo de configuração em particular especifica
+os parâmetros necessários para criar e inicializar uma instância de [[yii\db\Connection]]
+através da qual você pode fazer consultas de SQL ao banco de dados subjacente.
+
+A conexão de BD configurada acima pode ser acessada no código da aplicação
+através da expressão `Yii::$app->db`.
+
+> Info: O arquivo `config/db.php` será incluso pela configuração principal da
+  aplicação `config/web.php`, que especifica como a instância da [aplicação](structure-applications.md)
+  deverá ser inicializada. Para mais informações, por favor consulte a seção sobre [Configurações](concept-configurations.md).
+
+
+Criando um Active Record <a name="creating-active-record"></a>
+------------------------
+
+Para representar e buscar os dados da tabela `country`, crie uma classe que
+deriva de [Active Record](db-active-record.md) chamada `Country`, e salve-a
+no arquivo `models/Country.php`.
+
+```php
+<?php
+
+namespace app\models;
+
+use yii\db\ActiveRecord;
+
+class Country extends ActiveRecord
+{
+}
+```
+
+A classe `Country` estende de [[yii\db\ActiveRecord]]. Você não precisa escrever
+nenhum código nela! Só com o código acima, o Yii adivinhará o nome da tabela
+associada a partir do nome da classe.
+
+> Info: Se não houver nenhuma correspondência direta do nome da classe com o nome
+  da tabela, você pode sobrescrever o método [[yii\db\ActiveRecord::tableName()]] 
+  para especificar explicitamente o nome da tabela associada.
+
+Usando a classe `Country`, você pode manipular facilmente os dados na tabela
+`country`, conforme é demonstrado nestes fragmentos:
+
+```php
+use app\models\Country;
+
+// obtém todas as linhas da tabela country e as ordena pela coluna "name"
+$countries = Country::find()->orderBy('name')->all();
+
+// obtém a linha cuja chave primária é "US"
+$country = Country::findOne('US');
+
+// exibe "United States"
+echo $country->name;
+
+// altera o nome do país para ser "U.S.A." e o salva no banco de dados
+$country->name = 'U.S.A.';
+$country->save();
+```
+
+> Info: O Active Record é uma maneira poderosa de acessar e manipular os dados
+  do banco de dados de um modo orientado a objeto. Você pode encontrar informações
+  mais detalhadas na seção [Active Record](db-active-record.md). Alternativamente,
+  você também pode interagir com o banco de dados usando um método de acesso aos
+  dados de baixo nível chamado [Data Access Objects](db-dao.md).
+
+
+Criando uma Action <a name="creating-action"></a>
+------------------
+
+Para expor os dados de países aos usuários finais, você precisaria de uma nova
+action. Ao invés de colocar a nova action no controller (controlador) `site`,
+como você fez nas seções anteriores, faz mais sentido criar um novo controller
+especificamente para todas as actions relacionadas aos dados de países. Chame
+este novo controller de `CountryController`, e crie uma action `index` nele,
+conforme o exemplo a seguir.
+
+```php
+<?php
+
+namespace app\controllers;
+
+use yii\web\Controller;
+use yii\data\Pagination;
+use app\models\Country;
+
+class CountryController extends Controller
+{
+    public function actionIndex()
+    {
+        $query = Country::find();
+
+        $pagination = new Pagination([
+            'defaultPageSize' => 5,
+            'totalCount' => $query->count(),
+        ]);
+
+        $countries = $query->orderBy('name')
+            ->offset($pagination->offset)
+            ->limit($pagination->limit)
+            ->all();
+
+        return $this->render('index', [
+            'countries' => $countries,
+            'pagination' => $pagination,
+        ]);
+    }
+}
+```
+
+Salve o código acima em um arquivo `controllers/CountryController.php`.
+
+A action `index` chama `Country::find()`. Este método do Active Record constrói
+uma consulta do BD e retorna todos os dados da tabela `country`. Para limitar o
+número de países retornados em cada requisição, a consulta é paginada com a ajuda
+de um objeto [[yii\data\Pagination]]. O objeto `Pagination` serve para dois propósitos:
+
+* Definir as cláusulas `offset` e `limit` da declaração SQL representada pela
+  consulta de modo que apenas retorne uma única página de dados por vez (no máximo
+  5 linhas por página).
+* É usado para que a view exiba um paginador que consite de uma lista de botões
+  para as páginas, conforme será explicado na próxima sub-seção.
+
+No final do código, a action `index` renderiza uma view chamada `index`, e passa
+para ela os dados dos países bem como as informações de paginação.
+
+
+Criando uma View <a name="creating-view"></a>
+----------------
+
+Dentro do diretório `views`, primeiro crie um sub-diretório chamado `country`.
+Esta pasta será usada para guardar todas as views renderizadas pelo controller
+`country`. Dentro do diretório `views/country`, crie um arquivo `index.php`
+contendo o seguinte:
+
+```php
+<?php
+use yii\helpers\Html;
+use yii\widgets\LinkPager;
+?>
+<h1>Countries</h1>
+<ul>
+<?php foreach ($countries as $country): ?>
+    <li>
+        <?= Html::encode("{$country->name} ({$country->code})") ?>:
+        <?= $country->population ?>
+    </li>
+<?php endforeach; ?>
+</ul>
+
+<?= LinkPager::widget(['pagination' => $pagination]) ?>
+```
+
+A view tem duas seções relativas à exibição dos dados dos países. Na primeira parte,
+os dados de países fornecidos são cruzados e renderizados como uma lista do HTML.
+Na segunda parte, um widget [[yii\widgets\LinkPager]] é renderizado usando as
+informações de paginação passadas pela action. O widget `LinkPager` exibe uma
+lista de botões para as páginas. Ao clicar em qualquer um deles atualizará
+os dados dos países com a página correspondente.
+
+
+Testando <a name="trying-it-out"></a>
+--------
+
+Para verificar se todo o código acima funciona, use o seu navegador para
+acessar a seguinte URL:
+
+```
+http://hostname/index.php?r=country/index
+```
+
+![Lista de Países](images/start-country-list.png)
+
+Primeiramente, você verá uma lista exibindo cinco países. Abaixo dos países,
+você verá um paginador com quatro botões. Se você clicar no botão "2", você
+verá a página exibindo outros cinco países no banco de dados: a segunda
+página de registros. Observe mais cuidadosamente e você perceberá que a URL no
+browser mudou para
+
+```
+http://hostname/index.php?r=country/index&page=2
+```
+
+Por baixo dos panos, [[yii\data\Pagination|Pagination]] está fornecendo toda
+a funcionalidade necessária para paginar um conjunto de dados:
+
+* Inicialmente, [[yii\data\Pagination|Pagination]] representa a primeira página,
+  que reflete a consulta SELECT de países com a cláusula `LIMIT 5 OFFSET 0`.
+  Como resultado, os primeiros cinco países serão buscados e exibidos.
+* O widget [[yii\widgets\LinkPager|LinkPager]] renderiza os botões das páginas
+  usando as URLs criadas pelo [[yii\data\Pagination::createUrl()|Pagination]].
+  As URLs conterão um parâmetro `page`, que representa os diferentes números de
+  páginas.
+* Se você clicar no botão da página "2", uma nova requisição para a rota
+  `country/index` será disparada e tratada. [[yii\data\Pagination|Pagination]] lê
+  o parâmetro `page` da URL e define o número da página atual como sendo 2. A nova
+  consulta de países então terá a cláusula `LIMIT 5 OFFSET 5` e retornará os
+  próximos cinco países para a exibição.
+
+
+Resumo <a name="summary"></a>
+------
+
+Nesta seção, você aprendeu como trabalhar com um banco de dados. Você também
+aprendeu como buscar e exibir dados em páginas com a ajuda do
+[[yii\data\Pagination]] e do [[yii\widgets\LinkPager]].
+
+Na próxima seção, você aprenderá como usar a poderosa ferramenta geradora de códigos,
+chamada [Gii](tool-gii.md), para ajudá-lo a implementar rapidamente algumas
+funcionalidades comumente necessárias, tais como as operações CRUD
+(Criar-Ler-Atualizar-Excluir) para trabalhar com os dados em uma tabela do
+banco de dados. Na verdade, todo o código que você acabou de escrever pode ser
+gerado automaticamente no Yii usando a ferramenta Gii.
diff --git a/docs/guide-pt-BR/start-looking-ahead.md b/docs/guide-pt-BR/start-looking-ahead.md
new file mode 100644
index 0000000..47dd89f
--- /dev/null
+++ b/docs/guide-pt-BR/start-looking-ahead.md
@@ -0,0 +1,45 @@
+Seguindo em Frente
+==================
+
+Se você leu a seção "Primeiros Passos" inteira, você criou uma aplicação Yii
+completa. Neste processo, você aprendeu como implementar algumas funcionalidades
+comumente necessárias, tais como obter dados de usuários através de um formulário
+HTML, consultar dados de um banco de dados, e exibir os dados de modo paginado.
+Você também aprendeu a usar o [Gii](tool-gii.md) para gerar código automaticamente.
+Usar o Gii para a geração de código torna a carga do seu processo de desenvolvimento
+Web uma tarefa tão simples quanto preencher alguns formulários.
+
+Esta seção resume as referências sobre o Yii que lhe ajudarão a ser mais produtivo
+usando o framework.
+
+* Documentação
+    - O Guia Definitivo:
+      Conforme o nome indica, o guia define precisamente como o Yii deve funcionar
+      e fornece orientações gerais sobre como usar o Yii. É o tutorial
+      mais importante, e que você deveria ler antes de escrever qualquer código
+      com o Yii.
+    - A Referência de Classes (Class Reference):
+      Especifica o uso de todas as classes disponibilizadas pelo Yii. Deve ser
+      principalmente usado quando você estiver escrevendo o código e quiser entender
+      o uso de uma classe, método ou propriedade em particular. O uso da referência
+      de classes só é melhor depois de um entendimento contextual do framework
+      inteiro.
+    - Os Artigos do Wiki:
+      Os artigos do wiki escritos pelos usuários do Yii baseados em suas próprias
+      experiências. A maioria deles são escritos como receitas de bolo, e mostram
+      como resolver problemas em particular usando o Yii. Enquanto a qualidade destes
+      artigos pode não ser tão boa quanto a do Guia Definitivo, eles ainda assim
+      são úteis porque são mais abrangentes e frequentemente fornecem
+      soluções prontas para serem usadas.
+    - Livros
+* [Extensões](http://www.yiiframework.com/extensions/):
+  O Yii ostenta uma biblioteca de milhares de extensões contribuídas por usuários,
+  que podem facilmente ser plugadas em suas aplicações, desta forma tornando
+  o seu desenvolvimento ainda mais rápido e mais fácil.
+* Comunidade
+    - Fórum: <http://www.yiiframework.com/forum/>
+    - Chat do IRC: O canal #yii na rede freenode (<irc://irc.freenode.net/yii>)
+    - GitHub: <https://github.com/yiisoft/yii2>
+    - Facebook: <https://www.facebook.com/groups/yiitalk/>
+    - Twitter: <https://twitter.com/yiiframework>
+    - LinkedIn: <https://www.linkedin.com/groups/yii-framework-1483367>
diff --git a/docs/guide-ru/caching-fragment.md b/docs/guide-ru/caching-fragment.md
new file mode 100644
index 0000000..a4d014d
--- /dev/null
+++ b/docs/guide-ru/caching-fragment.md
@@ -0,0 +1,147 @@
+Кэширование фрагментов
+================
+
+Кэширование фрагментов относится к кэшированию фрагментов страницы. Например, если страница отображает в таблице суммарные годовые продажи, мы можем сохранить эту таблицу в кэше с целью экономии времени, требуемого для создании таблицы при каждом запросе. Кэширование фрагментов основано на [кэшировании данных](caching-data.md).
+
+Для кэширование  фрагментов используйте следующий код в [представлении](structure-views.md):
+
+```php
+if ($this->beginCache($id)) {
+
+    // ... здесь создаём содержимое ...
+
+    $this->endCache();
+}
+```
+
+Таким образом заключите то, что вы хотите закэшировать между вызовом [[yii\base\View::beginCache()|beginCache()]] и
+[[yii\base\View::endCache()|endCache()]]. Если содержимое будет найдено в кэше, [[yii\base\View::beginCache()|beginCache()]]
+отобразит закэшированное содержимое и вернёт false, минуя генерацию содержимого.
+В противном случае, будет выполнен код генерации контента и когда будет вызван [[yii\base\View::endCache()|endCache()]], то сгенерированное содержимое будет записано и сохранено в кэше.
+
+Также как и [кэширование данных](caching-data.md), для кэширования фрагментов требуется уникальный идентификатор для определения кэшируемого фрагмента.
+
+
+## Параметры кэширования <a name="caching-options"></a>
+
+Вызывая метод [[yii\base\View::beginCache()|beginCache()]], мы можем передать в качестве второго аргумента массив, содержащий параметры кэширования для управления кэшированием фрагмента. Заглядывая за кулисы, можно увидеть, что этот массив будет использоваться для настройки виджета [[yii\widgets\FragmentCache]], который реализует фактическое кэширование фрагментов.
+
+### Срок хранения <a name="duration"></a>
+
+Наверное, наиболее часто используемым параметром является [[yii\widgets\FragmentCache::duration|duration]].
+Он определяет какое количество секунд содержимое будет оставаться действительным (корректным). Следующий код помещает фрагмент в кэш не более, чем на час::
+
+```php
+if ($this->beginCache($id, ['duration' => 3600])) {
+
+    // ... здесь создаём содержимое ...
+
+    $this->endCache();
+}
+```
+
+Если мы не установим длительность (срок хранения), она будет равна значению по умолчанию (60 секунд). Это значит, что кэшированное содержимое станет недействительным через 60 секунд.
+
+
+### Зависимости <a name="dependencies"></a>
+
+Также как и [кэширование данных](caching-data.md#cache-dependencies), кэшируемое содержимое фрагмента тоже может иметь зависимости. Например, отображение содержимого сообщения зависит от того, изменено или нет это сообщение.
+
+Для определения зависимости мы устанавливаем параметр [[yii\widgets\FragmentCache::dependency|dependency]], который может быть либо объектом [[yii\caching\Dependency]], либо массивом настроек, который может быть использован для создания объекта [[yii\caching\Dependency]]. Следующий код определяет содержимое фрагмента, зависящее от изменения значения столбца `updated_at`:
+
+```php
+$dependency = [
+    'class' => 'yii\caching\DbDependency',
+    'sql' => 'SELECT MAX(updated_at) FROM post',
+];
+
+if ($this->beginCache($id, ['dependency' => $dependency])) {
+
+    // ... здесь создаём содержимое ...
+
+    $this->endCache();
+}
+```
+
+
+### Вариации <a name="variations"></a>
+
+Кэшируемое содержимое может быть изменено в соответствии с некоторыми параметрами. Например, для веб-приложений, поддерживающих несколько языков, одна и та же часть кода может создавать содержимое на нескольких языках. Поэтому у вас может возникнуть желание кэшировать содержимое в зависимости от текущего языка приложения.
+
+Чтобы задать вариации кэша, установите параметр [[yii\widgets\FragmentCache::variations|variations]], который должен быть массивом, содержащим скалярные значения, каждое из которых представляет определенный коэффициент вариации. Например, 
+чтобы кэшировать содержимое в зависимости от языка приложения, вы можете использовать следующий код:
+
+```php
+if ($this->beginCache($id, ['variations' => [Yii::$app->language]])) {
+
+    // ... здесь создаём содержимое ...
+
+    $this->endCache();
+}
+```
+
+
+### Переключение кэширования <a name="toggling-caching"></a>
+
+Иногда может потребоваться включать кеширование фрагментов только для определённых условий. Например, страницу с формой мы хотим кэшировать только тогда, когда обращение к ней произошло впервые (посредством GET запроса). Любое последующее отображение формы (посредством POST запроса) не должно быть кэшировано, потому что может содержать данные, введённые пользователем. Для этого мы задаём параметр [[yii\widgets\FragmentCache::enabled|enabled]]:
+
+```php
+if ($this->beginCache($id, ['enabled' => Yii::$app->request->isGet])) {
+
+    // ... здесь создаём содержимое ...
+
+    $this->endCache();
+}
+```
+
+
+## Вложенное кэширование <a name="nested-caching"></a>
+
+Кэширование фрагментов может быть вложенным. Это значит, что кэшируемый фрагмент окружён более крупным фрагментом (содержится в нём), который также кэшируется. Например, комментарии кэшируются во внутреннем фрагменте кэша, и они же кэшируются вместе с содержимым сообщения во внешнем фрагменте кэша. Следующий код демонстрирует как два фрагмента кэша могут быть вложенными:
+
+```php
+if ($this->beginCache($id1)) {
+
+    // ...логика создания контента...
+
+    if ($this->beginCache($id2, $options2)) {
+
+        // ...логика создания контента...
+
+        $this->endCache();
+    }
+
+    // ...логика создания контента...
+
+    $this->endCache();
+}
+```
+
+Параметры кэширования могут быть различными для вложенных кэшей. Например, внутренний и внешний кэши в вышеприведённом примере могут иметь разные сроки хранения. Даже когда данные внешнего кэша уже не являются актуальными, внутренний кеш может содержать актуальный фрагмент. Тем не менее, обратное не верно. Если внешний кэш актуален, данные будут отдаваться из него даже если внутренний кэш содержит устаревшие данные. Следует проявлять осторожность при выставлении срока хранения и задания зависимостей для вложенных кэшей. В противном случае вы можете получить устаревшие данные.
+
+
+## Динамическое содержимое <a name="dynamic-content"></a>
+
+Когда используется кэширование фрагментов, вы можете столкнуться с ситуацией когда большой фрагмент содержимого статичен за исключением одного или нескольких мест. Например, заголовок страницы может отображаться в главном меню вместе с 
+именем текущего пользователя. Еще одна проблема в том, что содержимое, которое было закэшировано, может содержать PHP код, который должен выполняться для каждого запроса (например код для регистрации в asset bundle). Обе проблемы могут быть решены с помощью, так называемой функции *динамического содержимого*.
+
+Динамическое содержимое значит, что часть вывода не будет закэширована даже если она заключена в кэширование фрагментов. Чтобы сделать содержимое динамическим постоянно, оно должно быть создано, используя специальный PHP код.
+
+Вы можете вызвать [[yii\base\View::renderDynamic()]] в пределах кэширования фрагмента для вставки динамического содержимого 
+в нужное место, как в примере ниже:
+
+```php
+if ($this->beginCache($id1)) {
+
+    // ...логика создания контента...
+
+    echo $this->renderDynamic('return Yii::$app->user->identity->name;');
+
+    // ...логика создания контента...
+
+    $this->endCache();
+}
+```
+
+Метод [[yii\base\View::renderDynamic()|renderDynamic()]] принимает некоторую часть PHP кода как параметр.
+Возвращаемое значение этого кода будет вставлено в динамическое содержимое. Этот PHP код будет выполняться для каждого запроса, независимо от того находится ли он внутри кэширования фрагмента или нет.
diff --git a/docs/guide-ru/caching-http.md b/docs/guide-ru/caching-http.md
new file mode 100644
index 0000000..a6afd52
--- /dev/null
+++ b/docs/guide-ru/caching-http.md
@@ -0,0 +1,113 @@
+HTTP кэширование
+============
+
+Кроме серверного кэширования, которое мы описали в предыдущих разделах, веб-приложения также могут использовать кэширование на стороне клиента, чтобы сэкономить время для формирования и передачи одного и того же содержания страницы.
+
+Чтобы использовать кэширование на стороне клиента, вы можете настроить [[yii\filters\HttpCache]] в качестве фильтра для действия контроллера, отображающего результат, который может быть закэширован на стороне клиента. [[yii\filters\HttpCache|HttpCache]] работает только для `GET` и `HEAD` запросов. Для этих запросов он может обрабатывать три вида HTTP заголовков, относящихся к кэшированию:
+
+* [[yii\filters\HttpCache::lastModified|Last-Modified]]
+* [[yii\filters\HttpCache::etagSeed|Etag]]
+* [[yii\filters\HttpCache::cacheControlHeader|Cache-Control]]
+
+
+## Заголовок `Last-Modified` <a name="last-modified"></a>
+
+Заголовок `Last-Modified` использует временную метку timestamp, чтобы показать была ли страница изменена после того, как клиент закэшировал её.
+
+Вы можете настроить свойство [[yii\filters\HttpCache::lastModified]], чтобы включить отправку заголовка `Last-Modified`. Свойство должно содержать PHP-функцию, возвращающую временную метку UNIX timestamp времени последнего изменения страницы. Сигнатура PHP-функции должна совпадать со следующей,
+
+```php
+/**
+ * @param Action $action объект действия, которое в настоящее время обрабатывается
+ * @param array $params значение свойства "params"
+ * @return integer временная метка UNIX timestamp, возвращающая время последнего изменения страницы
+ */
+function ($action, $params)
+```
+
+Ниже приведён пример использования заголовка `Last-Modified`:
+
+```php
+public function behaviors()
+{
+    return [
+        [
+            'class' => 'yii\filters\HttpCache',
+            'only' => ['index'],
+            'lastModified' => function ($action, $params) {
+                $q = new \yii\db\Query();
+                return $q->from('post')->max('updated_at');
+            },
+        ],
+    ];
+}
+```
+
+Приведенный выше код устанавливает, что HTTP кэширование должно быть включено только для действия `index`. Он 
+генерирует `Last-Modified` HTTP заголовок на основе времени последнего сообщения. Когда браузер в первый раз посещает страницу `index`, то страница будет сгенерирована на сервере и отправлена в браузер; если браузер снова зайдёт на эту страницу и с тех пор ни один пост не обновится, то сервер не будет пересоздавать страницу и браузер будет использовать закэшированную на стороне клиента версию. В результате, будет пропущено как создание страницы на стороне сервера, так и передача содержания страницы клиенту.
+
+
+## Заголовок `ETag` <a name="etag"></a>
+
+Заголовок "Entity Tag" (или коротко `ETag`) используется для передачи хэша содержания страницы. Если страница была изменена, то хэш страницы тоже изменится. Сравнивая хэш на стороне клиента с хэшем, генерируемым на стороне сервера, кэш может определить, была ли станица изменена и требуется ли её передавать заново.
+
+Вы можете настроить свойство [[yii\filters\HttpCache::etagSeed]], чтобы включить передачу заголовка `ETag`. Свойство должно содержать PHP-функцию, возвращающий seed для генерации ETag хэша. Сигнатура PHP-функции должна совпадать со следующей,
+
+```php
+/**
+ * @param Action $action объект действия, которое в настоящее время обрабатывается
+ * @param array $params значение свойства "params"
+ * @return string строка используемая как seed для генерации ETag хэша
+ */
+function ($action, $params)
+```
+
+Ниже приведён пример использования заголовка `ETag`:
+
+```php
+public function behaviors()
+{
+    return [
+        [
+            'class' => 'yii\filters\HttpCache',
+            'only' => ['view'],
+            'etagSeed' => function ($action, $params) {
+                $post = $this->findModel(\Yii::$app->request->get('id'));
+                return serialize([$post->title, $post->content]);
+            },
+        ],
+    ];
+}
+```
+
+Приведенный выше код устанавливает, что HTTP кэширование должно быть включено только для действия `view`. Он 
+генерирует `ETag` HTTP заголовок на основе заголовка и содержания последнего сообщения. Когда браузер в первый раз посещает страницу `view`, то страница будет сгенерирована на сервере и отправлена в браузер; если браузер снова зайдёт на эту страницу и с тех пор ни один пост не обновится, то сервер не будет пересоздавать страницу и браузер будет использовать закэшированную на стороне клиента версию. В результате, будет пропущено как создание страницы на стороне сервера, так и передача содержание страницы клиенту.
+
+ETags позволяет применять более сложные и/или более точные стратегии кэширования, чем заголовок `Last-Modified`. 
+Например, ETag станет невалидным (некорректным), если на сайте была включена другая тема
+
+Ресурсоёмкая генерация ETag может противоречить цели использования `HttpCache` и внести излишнюю нагрузку, 
+т.к. он должен пересоздаваться при каждом запросе. Попробуйте найти простое выражение, которое инвалидирует кэш, если содержание страницы было изменено.
+
+> Примечание: В соответствии с [RFC 7232](http://tools.ietf.org/html/rfc7232#section-2.4),
+  `HttpCache` будет отправлять как `ETag` заголовок, так и `Last-Modified` заголовок, если они оба были настроены.
+  И если клиент отправляет как `If-None-Match` заголовок, так и `If-Modified-Since` заголовок, то только первый из них будет принят.
+
+
+## Заголовок `Cache-Control` <a name="cache-control"></a>
+
+Заголовок `Cache-Control` определяет общую политику кэширования страниц. Вы можете включить его отправку, настроив свойство [[yii\filters\HttpCache::cacheControlHeader]]. По-умолчанию будет отправлен следующий заголовок:
+
+```
+Cache-Control: public, max-age=3600
+```
+
+## Ограничитель кэша сессий <a name="session-cache-limiter"></a>
+
+Когда на странице используются сессии, PHP автоматически отправляет некоторые связанные с кэшем HTTP заголовки, определённые в настройке `session.cache_limiter` в php.ini. Эти заголовки могут вмешиваться или отключать кэширование, которое вы ожидаете от `HttpCache`. Чтобы предотвратить эту проблему, по-умолчанию `HttpCache` будет автоматически отключать отправку этих заголовков. Если вы хотите изменить это поведение, вы должны настроить свойство [[yii\filters\HttpCache::sessionCacheLimiter]]. Это свойство может принимать строковое значение, включая `public`, `private`, `private_no_expire` и `nocache`. Пожалуйста, обратитесь к руководству PHP о [session_cache_limiter()](http://www.php.net/manual/en/function.session-cache-limiter.php)
+для объяснения этих значений.
+
+
+## SEO подтекст <a name="seo-implications"></a>
+
+Поисковые боты, как правило, с уважением относятся к заголовкам кэширования. Поскольку некоторые из поисковых систем имеют ограничение на количество страниц для одного домена, которые они обрабатывают в течение определенного промежутка времени, то предоставление заголовков кэширования может помочь индексации, поскольку будет уменьшено число обрабатываемых страниц.
diff --git a/docs/guide-ru/concept-properties.md b/docs/guide-ru/concept-properties.md
index 0128dd8..b8c863f 100644
--- a/docs/guide-ru/concept-properties.md
+++ b/docs/guide-ru/concept-properties.md
@@ -2,8 +2,8 @@
 ========
 
 В PHP, переменные-члены класса называются *свойства*. Эти переменные являются частью объявления класса и используются для
-хранения состояния объектов этого класса (т.е. именно этим отличается однин экземпляр класса от другого). На практике
-вам часто придётся производить чтение и запись свойств особым образом. Например, вам может понадобится обрезать строку
+хранения состояния объектов этого класса (т.е. именно этим отличается один экземпляр класса от другого). На практике
+вам часто придётся производить чтение и запись свойств особым образом. Например, вам может понадобиться обрезать строку
 при её записи в поле `label`. Для этого вы *можете* использовать следующий код:
 
 ```php
diff --git a/docs/guide-ru/intro-yii.md b/docs/guide-ru/intro-yii.md
index 298535b..dc0e046 100644
--- a/docs/guide-ru/intro-yii.md
+++ b/docs/guide-ru/intro-yii.md
@@ -24,8 +24,7 @@ Yii – это универсальный фреймворк и может бы�
   шаблонам проектирования.
 - Yii является full-stack фреймворком и включает в себя проверенные и хорошо зарекомендовавшие себя возможности, такие как
   ActiveRecord для реляционных и NoSQL баз данных, поддержку REST API, многоуровневое кеширование и другие.
-- Yii отлично расширяем. Вы можете настроить или заменить практически любую часть основного кода. Используя архитектуру
-  расшрений легко делиться кодом или использовать код сообщества.
+- Yii отлично расширяем. Вы можете настроить или заменить практически любую часть основного кода. Используя архитектуру расширений легко делиться кодом или использовать код сообщества.
 - Одна из главных целей Yii – производительность.
 
 Yii — не проект одного человека. Он поддерживается и развивается [сильной командой][] и большим сообществом разработчиков,
diff --git a/docs/guide-ru/runtime-logging.md b/docs/guide-ru/runtime-logging.md
index 4c223ae..05fef8a 100644
--- a/docs/guide-ru/runtime-logging.md
+++ b/docs/guide-ru/runtime-logging.md
@@ -15,7 +15,7 @@
 \Yii::info('Привет, я - тестовое сообщение лога');
 ```
 
-Вы можете логгировать как данные срокового типа, так и более сложные структуры данных, такие как массивы и объекты. 
+Вы можете логгировать как данные строкового типа, так и более сложные структуры данных, такие как массивы и объекты. 
 Если логгируемые данные - не строка, обработчики логов по умолчанию сериализуют значение, используя [[yii\helpers\Vardumper::export()]].
 
 ### Категории сообщений
diff --git a/docs/guide-ru/structure-controllers.md b/docs/guide-ru/structure-controllers.md
index 06b3a58..9c74ea9 100644
--- a/docs/guide-ru/structure-controllers.md
+++ b/docs/guide-ru/structure-controllers.md
@@ -114,7 +114,7 @@ class SiteController extends Controller
 
 ID контроллеров также могут содержать префикс подпапки. Например, в `admin/article` часть `article` является контроллером в 
 подпапке `admin` в [[yii\base\Application::controllerNamespace|пространстве имен контроллеров]].
-Допустимыми символами для префиксов подпапок являются: Английские буквы в нижнем  и верхнем регистре, символы, подчеркивания и
+Допустимыми символами для префиксов подпапок являются: Английские буквы в нижнем  и верхнем регистре, символы подчеркивания и
 слэш, где слэш используется в качестве разграничителя для многовложенных подпапок (например `panels/admin`).
 
 
@@ -252,7 +252,7 @@ class SiteController extends Controller
 
 ### Отдельные действия <a name="standalone-actions"></a>
 
-Отдельные действия определяются в качестве классов, унаследованных от [[yii\base\Action]] иди его потомков.
+Отдельные действия определяются в качестве классов, унаследованных от [[yii\base\Action]] или его потомков.
 Например, в Yii релизах, присутствуют [[yii\web\ViewAction]] и [[yii\web\ErrorAction]], оба из которых являются
 отдельными действиями.
 
diff --git a/docs/guide-ru/structure-views.md b/docs/guide-ru/structure-views.md
index 1534f8c..5191513 100644
--- a/docs/guide-ru/structure-views.md
+++ b/docs/guide-ru/structure-views.md
@@ -562,7 +562,7 @@ $this->registerLinkTag([
 
 - [[yii\base\View::EVENT_BEFORE_RENDER|EVENT_BEFORE_RENDER]]: вызывается в начале рендеринга файла в контроллере. 
 Обработчики этого события могут придать атрибуту [[yii\base\ViewEvent::isValid]] значение `false`, чтобы отменить процесс рендеринга.
-- [[yii\base\View::EVENT_AFTER_RENDER|EVENT_AFTER_RENDER]]: событие инициируется вызовом [[yii\base\View::beginPage()]] в шаблонах.
+- [[yii\base\View::EVENT_AFTER_RENDER|EVENT_AFTER_RENDER]]: событие инициируется после рендеринга файла вызовом [[yii\base\View::afterRender()]].
   Обработчики события могут получать результат рендеринга через [[yii\base\ViewEvent::output]] и могут изменять это свойство для изменения 
 результата рендеринга.
 - [[yii\base\View::EVENT_BEGIN_PAGE|EVENT_BEGIN_PAGE]]: инициируется вызовом [[yii\base\View::beginPage()]] в шаблонах.
diff --git a/docs/guide-uz/README.md b/docs/guide-uz/README.md
index e59380a..1631591 100644
--- a/docs/guide-uz/README.md
+++ b/docs/guide-uz/README.md
@@ -1,7 +1,7 @@
 Yii 2.0 bo'yicha to'liq qo'llanma
-=============================
+=================================
 
-Ushbu qo'llanma [Yii qo'llanmalarining holati bilan](http://www.yiiframework.com/doc/terms/) bilan mos holda yo'lga qo'yildi.
+Ushbu qo'llanma [Yii qo'llanmalarining holati](http://www.yiiframework.com/doc/terms/) bilan mos holda yo'lga qo'yildi.
 
 All Rights Reserved.
 
diff --git a/docs/guide-uz/intro-upgrade-from-v1.md b/docs/guide-uz/intro-upgrade-from-v1.md
new file mode 100644
index 0000000..5834dfe
--- /dev/null
+++ b/docs/guide-uz/intro-upgrade-from-v1.md
@@ -0,0 +1,96 @@
+1.1 dan keyingi yangilanishlar
+==============================
+
+Yii 2.0 talqini uchun batamom boshqatdan yozilganligi bois 1.1 va 2.0 talqinlar orasida ko'p farqlar mavjud.
+Shu tufayli 1.1 dan keyingi yangilanishlar minor talqinlar (talqinlarning bir biridan 1-xonasidan keyingi xonalaridagi sonlari farq qiladiganlari) orasidagi yangilanishlar kabi sodda ko'rinishda bo'lmaydi.
+Ushbu qo'llanmada ikki talqin orasidagi asossiy farq yangilanishlari keltirilgan.
+
+Agar siz ilgari Yii 1.1 ni ishlatmagan bo'lsangiz u holda ushbu bo'limni tashlab, [Ishni boshlash][start-installation.md] bo'limiga o'tishingiz mumkin.
+
+Shuningdek shuni unutmangki Yii 2.0 bu yerda yozilganidan ko'proq imkoniyatlarga ega. Qaysi imkoniyatlar qo'shilganini bilish uchun qo'llanmani o'qib chiqish tavsiya etiladi. Balkim siz bunga qadar o'zingiz uchun zarur deb bilib yaratgan imkoniyat endi freymvorkning bir qismidir. 
+
+
+O'rnatish
+---------
+
+Yii ning 2.0 talqini PHP uchun bog'liqliklarni boshqaruvchi hisoblangan [Composer](https://getcomposer.org/) ga butunlay asoslangan. 
+Freymvorkni o'rnatish va shuningdek kengaytirish Composer orqali qilinadi. Yii 2.0 ni o'rnatish bo'yicha yanada batafsilroq ma'lumot 
+[Yii ni o'rnatish](start-installation.md) bo'limida keltirilgan. Yii 2.0 uchun qanday qilib kengaytmalar yaratish yoki 1.1 talqindagi mavjud kengaytmalarni qanday qilib 2.0 talqinga adaptiatsiyalash ko'rsatmalari [Kengaytmalarni yaratish](extend-creating-extensions.md) bo'limida ko'rsatilgan.
+
+
+PHP talabi
+----------
+
+Yii 2.0 talqin Yii 1.1 talqinda qo'llanilgan PHP 5.2 ga nisbatan ancha yaxshilangan PHP 5.4 yoki undan yuqorisini islatadi. 
+Shu tufayli siz nazarda tutishingiz kerak bo'lgan tildagi ko'p o'zgarishlar mavjud. 
+Quyida PHP ning asosiy o'zgarishlari keltirilgan:
+
+- [Nomlar sohasi](http://php.net/manual/ru/language.namespaces.php);
+- [Anonim funksiyalar](http://php.net/manual/ru/functions.anonymous.php);
+- Massivlar uchun qisqa sintaksisni qo'llash: `[...elementlar...]` ni `array(...элементы...)` o'rniga;
+- Qisqartirilgan teglarni qo'llash `<?=` ko'rinish fayllarida chiqarish uchun.
+  PHP 5.4 talqinida ushbu imkoniyatni hech qanday sozlashlarsiz qo'llash mumkin;
+- [SPL ning klaslari va interfeyslari](http://php.net/manual/ru/book.spl.php);
+- [Kechroq statik bog'lash (LSB)](http://php.net/manual/ru/language.oop5.late-static-bindings.php);
+- [Sana va vaqt uchun klaslar](http://php.net/manual/ru/book.datetime.php);
+- [Treytlar](http://php.net/manual/ru/language.oop5.traits.php);
+- [Xalqarolashtirish (Intl)](http://php.net/manual/ru/book.intl.php); Xalqarolashtirish imkoniyatlaridan foydalanish maqsadida Yii 2.0 PHP ning `intl` kengaytmasini ishlatadi.
+
+
+Nomlar sohasi
+-------------
+
+Yii 2.0 ning asosiy o'zgarishlaridan biri bu nomlar sohasi hisoblanadi. Freymvorkning deyarli har bir sinfi nomlar sohasida joylashgan, masalan, `yii\web\Request`.
+"C" qo'shimchasi endi klaslar nomlarida ishlatilmaydi.
+Klaslarni nomlash kelishuvi direktoriyalar strukturasiga asoslanilgan. Masalan, `yii\web\Request` ushbu yozuv klasning yii freymvork direktoriyasidagi web/Request.php faylida joylashganini anglatadi.
+(Yii ning klaslarni yuklovchisi evaziga siz freymvork klaslarini hech qanday vositachisiz boglab qo'yishingiz mumkin).
+
+
+Komponent va obekt
+------------------
+
+Yii 2.0 da 1.1 dagi `CComponent` klas ikkita klasga ajratilgan: [[yii\base\Object]] va [[yii\base\Component]].
+[[yii\base\Object|Object]] klas oddiy asos klas bo'lib xususiyatlar uchun [getter va setter](concept-properties.md) larni ishlatishga imkon beradi. 
+[[yii\base\Component|Component]] klas [[yii\base\Object|Object]] klasdan voris bo'lib [xodisalar](concept-events.md) va 
+[o'zini tutish](concept-behaviors.md) larni qo'llab quvvatlaydi.
+
+Agar sizni klasingizga xodisalar funksiyalari yoki o'zini tutishlar kerak bo'lmasa asos klas sifatida [[yii\base\Object|Object]] ni qo'llashingiz mumkin. Ushbu holat asosan asos strukturali klaslar yaratilayotgan vaqtda yuz beradi.
+
+
+Obekt sozlashlari
+-----------------
+
+[[yii\base\Object|Object]] klas obektlarni sozlashni yagona usulini tashkillashtiradi. Ixtiyoriy [[yii\base\Object|Object]] ga voris bo'lgan klas (agar kerak bo'lsa) o'zini sozlashi uchun quyidagi ko'rinishda o'ziga konstruktor yaratishi mumkin: 
+
+```php
+class MyClass extends \yii\base\Object
+{
+    public function __construct($param1, $param2, $config = [])
+    {
+        // ... sozlashlar qo'llanilishidan oldin initsializatsiyalash (e'lon qilish va qiymatlash) 
+
+        parent::__construct($config);
+    }
+
+    public function init()
+    {
+        parent::init();
+
+        // ... sozlashlar qo'llanilganidan keyin initsializatsiyalash
+    }
+}
+```
+
+Yuqoridagi misolda oxirgi parametr obekt xususiyatlarini qiymatlovchi sozlashlar massivi ya'ni kalit-qiymat formatidagi juftlikdan iborat bo'lishi kerak. Siz sozlashlar qo'llanilganidan keyin initsializatsiya ishini amalga oshirish uchun oldindan [[yii\base\Object::init()|init()]] metod yaratib qo'yishingiz mumkin.
+
+Ushbu kelishuvga asoslanib siz sozlash massivi yordamida yangi obektlarni yaratish va sozlashingiz mumkin:
+
+```php
+$object = Yii::createObject([
+    'class' => 'MyClass',
+    'property1' => 'abc',
+    'property2' => 'cde',
+], [$param1, $param2]);
+```
+
+Sozlashlar haqidagi batafsil ma'lumotlar [Obektlarni sozlash](concept-configurations.md) bo'limida keltirilgan.
diff --git a/docs/guide/README.md b/docs/guide/README.md
index 614ac4c..8b0b6cf 100644
--- a/docs/guide/README.md
+++ b/docs/guide/README.md
@@ -90,14 +90,14 @@ Getting Data from Users
 
 * [Creating Forms](input-forms.md)
 * [Validating Input](input-validation.md)
-* **TBD** [Uploading Files](input-file-upload.md)
+* [Uploading Files](input-file-upload.md)
 * **TBD** [Getting Data for Multiple Models](input-multiple-models.md)
 
 
 Displaying Data
 ---------------
 
-* **TBD** [Data Formatting](output-formatter.md)
+* [Data Formatting](output-formatter.md)
 * **TBD** [Pagination](output-pagination.md)
 * **TBD** [Sorting](output-sorting.md)
 * [Data Providers](output-data-providers.md)
@@ -169,7 +169,7 @@ Special Topics
 * [Internationalization](tutorial-i18n.md)
 * [Mailing](tutorial-mailing.md)
 * [Performance Tuning](tutorial-performance-tuning.md)
-* **TBD** [Shared Hosting Environment](tutorial-shared-hosting.md)
+* [Shared Hosting Environment](tutorial-shared-hosting.md)
 * [Template Engines](tutorial-template-engines.md)
 * [Working with Third-Party Code](tutorial-yii-integration.md)
 
diff --git a/docs/guide/concept-configurations.md b/docs/guide/concept-configurations.md
index 212bd1f..dd49665 100644
--- a/docs/guide/concept-configurations.md
+++ b/docs/guide/concept-configurations.md
@@ -130,7 +130,7 @@ an [entry script](structure-entry-scripts.md), where the class name is already g
 (new yii\web\Application($config))->run();
 ```
 
-For more details about configuring the `components` property of an application can be found
+More details about configuring the `components` property of an application can be found
 in the [Applications](structure-applications.md) section and the [Service Locator](concept-service-locator.md) section.
 
 
@@ -153,7 +153,7 @@ echo Menu::widget([
 ]);
 ```
 
-The above code creates a `Menu` widget and initializes its `activeItems` property to be false.
+The above code creates a `Menu` widget and initializes its `activateItems` property to be false.
 The `items` property is also configured with menu items to be displayed.
 
 Note that because the class name is already given, the configuration array should NOT have the `class` key.
@@ -215,7 +215,7 @@ $config = require('path/to/web.php');
 ## Default Configurations <a name="default-configurations"></a>
 
 The [[Yii::createObject()]] method is implemented based on a [dependency injection container](concept-di-container.md).
-It allows you to specify a set of the so-called *default configurations* which will be applied to ANY instances of
+It allows you to specify a set of the so-called *default configurations* which will be applied to ALL instances of
 the specified classes when they are being created using [[Yii::createObject()]]. The default configurations
 can be specified by calling `Yii::$container->set()` in the [bootstrapping](runtime-bootstrapping.md) code.
 
diff --git a/docs/guide/concept-events.md b/docs/guide/concept-events.md
index 76c3ae3..cb8740a 100644
--- a/docs/guide/concept-events.md
+++ b/docs/guide/concept-events.md
@@ -202,7 +202,7 @@ Sometimes, you may want to respond to an event triggered by *every* instance of 
 a specific instance. Instead of attaching an event handler to every instance, you may attach the handler
 on the *class level* by calling the static method [[yii\base\Event::on()]].
 
-For example, an [Active Record](db-active-record.md) object will trigger an [[yii\base\ActiveRecord::EVENT_AFTER_INSERT]]
+For example, an [Active Record](db-active-record.md) object will trigger an [[yii\db\BaseActiveRecord::EVENT_AFTER_INSERT|EVENT_AFTER_INSERT]]
 event whenever it inserts a new record into the database. In order to track insertions done by *every*
 [Active Record](db-active-record.md) object, you may use the following code:
 
@@ -216,8 +216,8 @@ Event::on(ActiveRecord::className(), ActiveRecord::EVENT_AFTER_INSERT, function 
 });
 ```
 
-The event handler will be invoked whenever an instance of [[yii\base\ActiveRecord|ActiveRecord]], or one of its child classes, triggers
-the [[yii\base\ActiveRecord::EVENT_AFTER_INSERT|EVENT_AFTER_INSERT]] event. In the handler, you can get the object
+The event handler will be invoked whenever an instance of [[yii\db\ActiveRecord|ActiveRecord]], or one of its child classes, triggers
+the [[yii\db\BaseActiveRecord::EVENT_AFTER_INSERT|EVENT_AFTER_INSERT]] event. In the handler, you can get the object
 that triggered the event through `$event->sender`.
 
 When an object triggers an event, it will first call instance-level handlers, followed by the class-level handlers.
diff --git a/docs/guide/concept-properties.md b/docs/guide/concept-properties.md
index 4a98e85..0052b2f 100644
--- a/docs/guide/concept-properties.md
+++ b/docs/guide/concept-properties.md
@@ -10,7 +10,7 @@ $object->label = trim($label);
 ```
 
 The drawback of the above code is that you would have to call `trim()` everywhere in your code where you might set the `label`
-property. If, in the future, the `label` property gets a new requirement, such as the first letter must be captialized, you would again have to modify every bit of code that assigns a value to `label`. The repetition of code leads to bugs, and is a practice you want to avoid as much as possible.
+property. If, in the future, the `label` property gets a new requirement, such as the first letter must be capitalized, you would again have to modify every bit of code that assigns a value to `label`. The repetition of code leads to bugs, and is a practice you want to avoid as much as possible.
 
 To solve this problem, Yii introduces a base class called [[yii\base\Object]] that supports defining properties
 based on *getter* and *setter* class methods. If a class needs that functionality, it should extend from
@@ -28,7 +28,7 @@ namespace app\components;
 
 use yii\base\Object;
 
-class Foo extend Object
+class Foo extends Object
 {
     private $_label;
 
@@ -44,10 +44,10 @@ class Foo extend Object
 }
 ```
 
-(To be clear, the getter and setter methods create the property `label`, which in this case internally refer to a private attributed named `_label`.)
+(To be clear, the getter and setter methods create the property `label`, which in this case internally refers to a private attribute named `_label`.)
 
 Properties defined by getters and setters can be used like class member variables. The main difference is that
-when such a property is being read, the corresponding getter method will be called;  when the property is
+when such property is being read, the corresponding getter method will be called;  when the property is
 being assigned a value, the corresponding setter method will be called. For example:
 
 ```php
@@ -58,20 +58,20 @@ $label = $object->label;
 $object->label = 'abc';
 ```
 
-A property defined by a getter without a setter is *read only*. Trying to assign a value to such a property will cause
+A property defined by a getter without a setter is *read only*. Trying to assign a value to such property will cause
 an [[yii\base\InvalidCallException|InvalidCallException]]. Similarly, a property defined by a setter without a getter
-is *write only*, and trying to read such a property will also cause an exception. It is not common to have write-only
+is *write only*, and trying to read such property will also cause an exception. It is not common to have write-only
 properties.
 
 There are several special rules for, and limitations on, the properties defined via getters and setters:
 
 * The names of such properties are *case-insensitive*. For example, `$object->label` and `$object->Label` are the same.
   This is because method names in PHP are case-insensitive.
-* If the name of such a property is the same as a class member variable, the latter will take precedence.
+* If the name of such property is the same as a class member variable, the latter will take precedence.
   For example, if the above `Foo` class has a member variable `label`, then the assignment `$object->label = 'abc'`
   will affect the *member variable* 'label'; that line would not call the  `setLabel()` setter method.
 * These properties do not support visibility. It makes no difference for the visibility of a property
   if the defining getter or setter method is public, protected or private.
-* The properties can only be defined by *non-static* getters and/or setters. Static methods will not be treated in this same manner.
+* The properties can only be defined by *non-static* getters and/or setters. Static methods will not be treated in the same manner.
 
-Returning back to the problem described at the beginning of this guide, instead of calling `trim()` everywhere a `label` value is assigned, `trim()` now only needs to be invoked within the setter `setLabel()`. And if a new requirement comes that requires the label be initially capitalized, the `setLabel()` method can quickly be modified without touching any other code. The one change will universally affect every assignment to `label`.
+Returning back to the problem described at the beginning of this guide, instead of calling `trim()` everywhere a `label` value is assigned, `trim()` now only needs to be invoked within the setter `setLabel()`. And if a new requirement comes that requires the label to be initially capitalized, the `setLabel()` method can quickly be modified without touching any other code. The one change will universally affect every assignment to `label`.
diff --git a/docs/guide/db-active-record.md b/docs/guide/db-active-record.md
index 43805b3..d6fd439 100644
--- a/docs/guide/db-active-record.md
+++ b/docs/guide/db-active-record.md
@@ -35,7 +35,8 @@ Below is the list of databases that are currently supported by Yii Active Record
 * SQLite 2 and 3: via [[yii\db\ActiveRecord]]
 * Microsoft SQL Server 2010 or later: via [[yii\db\ActiveRecord]]
 * Oracle: via [[yii\db\ActiveRecord]]
-* CUBRID 9.1 or later: via [[yii\db\ActiveRecord]]
+* CUBRID 9.3 or later: via [[yii\db\ActiveRecord]] (Note that due to a [bug](http://jira.cubrid.org/browse/APIS-658) in
+  the cubrid PDO extension, quoting of values will not work, so you need CUBRID 9.3 as the client as well as the server)
 * Sphnix: via [[yii\sphinx\ActiveRecord]], requires `yii2-sphinx` extension
 * ElasticSearch: via [[yii\elasticsearch\ActiveRecord]], requires `yii2-elasticsearch` extension
 * Redis 2.6.12 or later: via [[yii\redis\ActiveRecord]], requires `yii2-redis` extension
@@ -330,6 +331,16 @@ $customer->loadDefaultValues();
 // ... render HTML form for $customer ...
 ```
 
+If you want to set some initial values for the attributes yourself you can override the `init()` method
+of the active record class and set the values there. For example to set the default value for the `status` attribute:
+
+```php
+public function init()
+{
+    parent::init();
+    $this->status = 'active';
+}
+```
 
 Active Record Life Cycles
 -------------------------
diff --git a/docs/guide/db-dao.md b/docs/guide/db-dao.md
index 05fe922..40bb4d3 100644
--- a/docs/guide/db-dao.md
+++ b/docs/guide/db-dao.md
@@ -1,16 +1,19 @@
-Database basics
+Database Access Objects
 ===============
 
 > Note: This section is under development.
 
-Yii has a database access layer built on top of PHP's [PDO](http://www.php.net/manual/en/book.pdo.php). It provides
-uniform API and solves some inconsistencies between different DBMS. By default Yii supports the following DBMS:
+Yii includes a database access layer built on top of PHP's [PDO](http://www.php.net/manual/en/book.pdo.php). The database access objects (DAO) interface provides a
+uniform API, and solves some inconsistencies that exist between different database applications. Whereas Active Record provides database interactions through models, and the Query Builder assists in composing dynamic queries, DAO is a simple and efficient way to execute straight SQL on your database. You'll want to use DAO when the query to be run is expensive and/or no application models--and their corresponding business logic--are required.
+
+By default, Yii supports the following DBMS:
 
 - [MySQL](http://www.mysql.com/)
 - [MariaDB](https://mariadb.com/)
 - [SQLite](http://sqlite.org/)
 - [PostgreSQL](http://www.postgresql.org/)
-- [CUBRID](http://www.cubrid.org/): version 9.1.0 or higher.
+- [CUBRID](http://www.cubrid.org/): version 9.3 or higher. (Note that due to a [bug](http://jira.cubrid.org/browse/APIS-658) in
+  the cubrid PDO extension, quoting of values will not work, so you need CUBRID 9.3 as the client as well as the server)
 - [Oracle](http://www.oracle.com/us/products/database/overview/index.html)
 - [MSSQL](https://www.microsoft.com/en-us/sqlserver/default.aspx): version 2005 or higher.
 
@@ -18,8 +21,7 @@ uniform API and solves some inconsistencies between different DBMS. By default Y
 Configuration
 -------------
 
-In order to start using database you need to configure database connection component first by adding `db` component
-to application configuration (for "basic" web application it's `config/web.php`) like the following:
+To start interacting with a database (using DAO or otherwise), you need to configure the application's database connection component. The Data Source Name (DSN) configures to which database application and specific database the application should connect:
 
 ```php
 return [
@@ -45,8 +47,11 @@ return [
 ];
 ```
 
-There is a peculiarity when you want to work with the database through the `ODBC` layer. When using `ODBC`,
-connection `DSN` doesn't indicate uniquely what database type is being used. That's why you have to override
+Please refer to the [PHP manual](http://www.php.net/manual/en/function.PDO-construct.php) for more details
+on the format of the DSN string. Refer to [[yii\db\Connection]] for the full list of properties you can configure in the class.
+
+A peculiarity exists when you want to work with the database through the `ODBC` layer. When using `ODBC`, the
+connection `DSN` doesn't uniquely indicate what database type is being used. For that reason, you have to override the
 `driverName` property of [[yii\db\Connection]] class to disambiguate that:
 
 ```php
@@ -59,37 +64,57 @@ connection `DSN` doesn't indicate uniquely what database type is being used. Tha
 ],
 ```
 
-Please refer to the [PHP manual](http://www.php.net/manual/en/function.PDO-construct.php) for more details
-on the format of the DSN string.
+Overriding `driverName` is not necessary when not going through ODBC. 
 
-After the connection component is configured you can access it using the following syntax:
+Given the "db" component's configuration in the application, you can access the database connection using:
 
 ```php
 $connection = \Yii::$app->db;
 ```
 
-You can refer to [[yii\db\Connection]] for a list of properties you can configure. Also note that you can define more
-than one connection component and use both at the same time if needed:
+You can define more
+than one connection component:
+
+```php
+return [
+    // ...
+    'components' => [
+        // ...
+        'db' => [
+            'class' => 'yii\db\Connection',
+            'dsn' => 'mysql:host=localhost;dbname=mydatabase', 
+            'username' => 'root',
+            'password' => '',
+            'charset' => 'utf8',
+        ],
+        'secondDb' => [
+            'class' => 'yii\db\Connection',
+            'dsn' => 'sqlite:/path/to/database/file', 
+        ],
+    ],
+    // ...
+];
+```
+
+Now you can use both database connections at the same time as needed:
 
 ```php
 $primaryConnection = \Yii::$app->db;
 $secondaryConnection = \Yii::$app->secondDb;
 ```
 
-If you don't want to define the connection as an [application component](structure-application-components.md) you can instantiate it directly:
+If you don't want to define the connection as an [application component](structure-application-components.md), you can instantiate it directly:
 
 ```php
 $connection = new \yii\db\Connection([
     'dsn' => $dsn,
-     'username' => $username,
-     'password' => $password,
+    'username' => $username,
+    'password' => $password,
 ]);
 $connection->open();
 ```
 
-
-> **Tip**: if you need to execute additional SQL queries right after establishing a connection you can add the
-> following to your application configuration file:
+> Tip: If you need to execute an SQL query immediately after establishing a connection (e.g., to set the timezone or character set), you can add the following to your application configuration file:
 >
 ```php
 return [
@@ -108,51 +133,53 @@ return [
 ];
 ```
 
-Basic SQL queries
------------------
+Executing Basic SQL Queries
+---------------------------
 
-Once you have a connection instance you can execute SQL queries using [[yii\db\Command]].
+Once you have a database connection instance, you can execute SQL queries using [[yii\db\Command]].
 
-### SELECT
+### Running SELECT Queries
 
-When query returns a set of rows:
+When the query to be executed returns a set of rows, you'll use `queryAll`:
 
 ```php
 $command = $connection->createCommand('SELECT * FROM post');
 $posts = $command->queryAll();
 ```
 
-When only a single row is returned:
+When the query to be executed only returns a single row, you'll use `queryOne`:
 
 ```php
 $command = $connection->createCommand('SELECT * FROM post WHERE id=1');
 $post = $command->queryOne();
 ```
 
-When there are multiple values from the same column:
+When the query returns multiple rows but only one column, you'll use `queryColumn`:
 
 ```php
 $command = $connection->createCommand('SELECT title FROM post');
 $titles = $command->queryColumn();
 ```
 
-When there's a scalar value:
+When the query only returns a scalar value, you'll use `queryScalar`:
 
 ```php
 $command = $connection->createCommand('SELECT COUNT(*) FROM post');
 $postCount = $command->queryScalar();
 ```
 
-### UPDATE, INSERT, DELETE etc.
+### Running Queries That Don't Return Values
 
-If SQL executed doesn't return any data you can use command's `execute` method:
+If SQL executed doesn't return any data--for example, INSERT, UPDATE, and DELETE, you can use command's `execute` method:
 
 ```php
 $command = $connection->createCommand('UPDATE post SET status=1 WHERE id=1');
 $command->execute();
 ```
 
-Alternatively the following syntax that takes care of proper table and column names quoting is possible:
+Alternatively, you can use dedicated `insert`, `update`, and `delete` method. These methods will properly quote table and column names used in your query, and you only need to provide the necessary values:
+
+[[Ought to put a link to the reference docs here.]]
 
 ```php
 // INSERT
@@ -175,28 +202,26 @@ $connection->createCommand()->update('user', ['status' => 1], 'age > 30')->execu
 $connection->createCommand()->delete('user', 'status = 0')->execute();
 ```
 
-Quoting table and column names
+Quoting Table and Column Names
 ------------------------------
 
-Most of the time you would use the following syntax for quoting table and column names:
+To make column and table names safe to use in queries, you can have Yii properly quote them for you:
 
 ```php
 $sql = "SELECT COUNT([[$column]]) FROM {{table}}";
 $rowCount = $connection->createCommand($sql)->queryScalar();
 ```
 
-In the code above `[[X]]` will be converted to properly quoted column name while `{{Y}}` will be converted to properly
-quoted table name.
+In the code above, `[[$column]]` will be converted to properly quoted column name, while `{{table}}` will be converted to a properly-quoted table name.
 
-For table names there's a special variant `{{%Y}}` that allows you to automatically appending table prefix if it is set:
+There's a special variant on this syntax specific to tablenames: `{{%Y}}` automatically appends the application's table prefix to the provided value, if a table prefix has been set:
 
 ```php
 $sql = "SELECT COUNT([[$column]]) FROM {{%table}}";
 $rowCount = $connection->createCommand($sql)->queryScalar();
 ```
 
-The code above will result in selecting from `tbl_table` if you have table prefix configured like the following in your
-config file:
+The code above will result in selecting from `tbl_table`, if you have table prefix configured like so:
 
 ```php
 return [
@@ -221,10 +246,10 @@ $sql = "SELECT COUNT($column) FROM $table";
 $rowCount = $connection->createCommand($sql)->queryScalar();
 ```
 
-Prepared statements
+Using Prepared Statements
 -------------------
 
-In order to securely pass query parameters you can use prepared statements:
+To securely pass query parameters to your queries, you should make use of prepared statements. First, create a named placeholder in your query (using the syntax `:placeholder`). Then bind the placeholder to a variable and execute the query:
 
 ```php
 $command = $connection->createCommand('SELECT * FROM post WHERE id=:id');
@@ -232,7 +257,7 @@ $command->bindValue(':id', $_GET['id']);
 $post = $command->queryOne();
 ```
 
-Another usage is performing a query multiple times while preparing it only once:
+Another purpose for prepared statements (aside from improved security) is the ability to execute a query multiple times while preparing it only once:
 
 ```php
 $command = $connection->createCommand('DELETE FROM post WHERE id=:id');
@@ -245,11 +270,13 @@ $id = 2;
 $command->execute();
 ```
 
-Transactions
-------------
+Notice that you bind the placeholder to the variable before the execution, and then change the value of that variable before each subsequent execution (this is often done with loops). Executing queries in this manner can be vastly more efficient than running each query one at a time. 
+
+Performing Transactions
+-----------------------
 
-When running multiple related queries in a sequence you may need to wrap them in a transaction to
-ensure you data is consistent. Yii provides a simple interface to work with transactions in simple
+When running multiple, related queries in a sequence, you may need to wrap them in a transaction to
+protect your data's integrity. Transactions allow you to write a series of queries such that they'll all succeed or have no effect whatsoever. Yii provides a simple interface to work with transactions in simple
 cases but also for advanced usage when you need to define isolation levels.
 
 The following code shows a simple pattern that all code that uses transactional queries should follow:
diff --git a/docs/guide/db-migrations.md b/docs/guide/db-migrations.md
old mode 100755
new mode 100644
diff --git a/docs/guide/input-validation.md b/docs/guide/input-validation.md
index 964706f..0122046 100644
--- a/docs/guide/input-validation.md
+++ b/docs/guide/input-validation.md
@@ -391,7 +391,7 @@ class CountryValidator extends Validator
     public function validateAttribute($model, $attribute)
     {
         if (!in_array($model->$attribute, ['USA', 'Web'])) {
-            $this->addError($attribute, 'The country must be either "USA" or "Web".');
+            $this->addError($model, $attribute, 'The country must be either "USA" or "Web".');
         }
     }
 }
diff --git a/docs/guide/intro-upgrade-from-v1.md b/docs/guide/intro-upgrade-from-v1.md
index d3ada54..a973ac9 100644
--- a/docs/guide/intro-upgrade-from-v1.md
+++ b/docs/guide/intro-upgrade-from-v1.md
@@ -143,7 +143,7 @@ supported in most places in the Yii core code. For example, [[yii\caching\FileCa
 both a path alias and a normal directory path.
 
 A path alias is also closely related to a class namespace. It is recommended that a path
-alias be defined for each root namespace, thereby allowing you to use Yii the class autoloader without
+alias be defined for each root namespace, thereby allowing you to use Yii class autoloader without
 any further configuration. For example, because `@yii` refers to the Yii installation directory,
 a class like `yii\web\Request` can be autoloaded. If you use a third party library,
 such as the Zend Framework, you may define a path alias `@Zend` that refers to that framework's installation
diff --git a/docs/guide/output-theming.md b/docs/guide/output-theming.md
index bcb527f..34c4f5d 100644
--- a/docs/guide/output-theming.md
+++ b/docs/guide/output-theming.md
@@ -8,7 +8,7 @@ when rendered. A single application may use multiple themes and each may provide
 time only one theme can be active.
 
 > Note: Themes usually do not meant to be redistributed since views are too application specific. If you want to
-  redistribute customized look and feel consider CSS and JavaScript files in form of [asset bundles](assets.md) instead.
+  redistribute customized look and feel consider CSS and JavaScript files in form of [asset bundles](structure-assets.md) instead.
 
 Configuring a theme
 -------------------
diff --git a/docs/guide/runtime-sessions-cookies.md b/docs/guide/runtime-sessions-cookies.md
index d0d28d9..d5fa4bb 100644
--- a/docs/guide/runtime-sessions-cookies.md
+++ b/docs/guide/runtime-sessions-cookies.md
@@ -3,14 +3,14 @@ Sessions and Cookies
 
 Sessions and cookies allow data to be persisted across multiple user requests. In plain PHP, you may access them
 through the global variables `$_SESSION` and `$_COOKIE`, respectively. Yii encapsulates sessions and cookies as objects
-and thus allows you to access them in an object-oriented fashion with additional nice enhancements. 
+and thus allows you to access them in an object-oriented fashion with additional nice enhancements.
 
 
 ## Sessions <a name="sessions"></a>
 
 Like [requests](runtime-requests.md) and [responses](runtime-responses.md), you can get access to sessions via
 the `session` [application component](structure-application-components.md) which is an instance of [[yii\web\Session]],
-by default. 
+by default.
 
 
 ### Opening and Closing Sessions <a name="opening-closing-sessions"></a>
@@ -74,7 +74,7 @@ if it has not been done so before. This is different from accessing session data
 an explicit call of `session_start()`.
 
 When working with session data that are arrays, the `session` component has a limitation which prevents you from
-directly modifying an array element. For example, 
+directly modifying an array element. For example,
 
 ```php
 $session = Yii::$app->session;
@@ -122,7 +122,7 @@ $session['captcha.lifetime'] = 3600;
 For better performance and code readability, we recommend the last workaround. That is, instead of storing
 an array as a single session variable, you store each array element as a session variable which shares the same
 key prefix with other array elements.
- 
+
 
 ### Custom Session Storage <a name="custom-session-storage"></a>
 
@@ -131,7 +131,7 @@ session classes implementing different session storage:
 
 * [[yii\web\DbSession]]: stores session data in a database table.
 * [[yii\web\CacheSession]]: stores session data in a cache with the help of a configured [cache component](caching-data.md#cache-components).
-* [[yii\redis\Session]]: stores session data using [redis](http://redis.io/) as the storage medium
+* [[yii\redis\Session]]: stores session data using [redis](http://redis.io/) as the storage medium.
 * [[yii\mongodb\Session]]: stores session data in a [MongoDB](http://www.mongodb.org/).
 
 All these session classes support the same set of API methods. As a result, you can switch to use a different
@@ -174,7 +174,10 @@ where 'BLOB' refers to the BLOB-type of your preferred DBMS. Below are the BLOB 
 - PostgreSQL: BYTEA
 - MSSQL: BLOB
 
-Note that length of id column should be adjusted if `session.hash_function` is changed in `php.ini`.
+> Note: According to the php.ini setting of `session.hash_function`, you may need to adjust
+  the length of the `id` column. For example, if `session.hash_function=sha256`, you should use
+  length 64 instead of 40.
+
 
 ### Flash Data <a name="flash-data"></a>
 
@@ -191,7 +194,7 @@ $session = Yii::$app->session;
 // Request #1
 // set a flash message named as "postDeleted"
 $session->setFlash('postDeleted', 'You have successfully deleted your post.');
- 
+
 // Request #2
 // display the flash message named "postDeleted"
 echo $session->getFlash('postDeleted');
@@ -201,11 +204,11 @@ echo $session->getFlash('postDeleted');
 $result = $session->hasFlash('postDeleted');
 ```
 
-Like regular session data, you can store arbitrary data as flash data. 
- 
+Like regular session data, you can store arbitrary data as flash data.
+
 When you call [[yii\web\Session::setFlash()]], it will overwrite any existing flash data that has the same name.
 To append new flash data to the existing one(s) of the same name, you may call [[yii\web\Session::addFlash()]] instead.
-For example,
+For example:
 
 ```php
 $session = Yii::$app->session;
@@ -222,8 +225,8 @@ $alerts = $session->getFlash('alerts');
 ```
 
 > Note: Try not to use [[yii\web\Session::setFlash()]] together with [[yii\web\Session::addFlash()]] for flash data
-  of the same name. This is because the latter method will automatically turn the flash data into an array so that it 
-  can append new flash data of the same name. As a result, when you call [[yii\web\Session::getFlash()]], you may 
+  of the same name. This is because the latter method will automatically turn the flash data into an array so that it
+  can append new flash data of the same name. As a result, when you call [[yii\web\Session::getFlash()]], you may
   find sometimes you are getting an array while sometimes you are getting a string, depending on the order of
   the invocation of these two methods.
 
@@ -231,8 +234,8 @@ $alerts = $session->getFlash('alerts');
 ## Cookies <a name="cookies"></a>
 
 Yii represents each cookie as an object of [[yii\web\Cookie]]. Both [[yii\web\Request]] and [[yii\web\Response]]
-maintain a collection of cookies via the property named `cookies`. The cookie collection in the former represents 
-the cookies submitted in a request, while the cookie collection in the latter represents the cookies that are to 
+maintain a collection of cookies via the property named `cookies`. The cookie collection in the former represents
+the cookies submitted in a request, while the cookie collection in the latter represents the cookies that are to
 be sent to the user.
 
 
@@ -275,10 +278,10 @@ $cookies = Yii::$app->response->cookies;
 $cookies->add(new \yii\web\Cookie([
     'name' => 'language',
     'value' => 'zh-CN',
-]);
+]));
 
 // remove a cookie
-$cookies->remove('language');   
+$cookies->remove('language');
 // equivalent to the following
 unset($cookies['language']);
 ```
@@ -288,9 +291,9 @@ examples, the [[yii\web\Cookie]] class also defines other properties to fully re
 of cookies, such as [[yii\web\Cookie::domain|domain]], [[yii\web\Cookie::expire|expire]]. You may configure these
 properties as needed to prepare a cookie and then add it to the response's cookie collection.
 
-> Note: For better security, the default value of [[yii\web\Cookie::httpOnly]] is set true. This helps mitigate 
+> Note: For better security, the default value of [[yii\web\Cookie::httpOnly]] is set true. This helps mitigate
 the risk of client side script accessing the protected cookie (if the browser supports it). You may read
-the [httpOnly wiki article](https://www.owasp.org/index.php/HttpOnly) for more details. 
+the [httpOnly wiki article](https://www.owasp.org/index.php/HttpOnly) for more details.
 
 
 ### Cookie Validation <a name="cookie-validation"></a>
@@ -299,15 +302,15 @@ When you are reading and sending cookies through the `request` and `response` co
 two subsections, you enjoy the added security of cookie validation which protects cookies from being modified
 on the client side. This is achieved by signing each cookie with a hash string, which allows the application to
 tell if a cookie is modified on the client side or not. If so, the cookie will NOT be accessible through the
-[[yii\web\Request::cookies|cookie collection]] of the `request` component. 
+[[yii\web\Request::cookies|cookie collection]] of the `request` component.
 
 > Info: If a cookie fails the validation, you may still access it through `$_COOKIE`. This is because third-party
-libraries may manipulate cookies in their own way, which does not involve cookie validation. 
+libraries may manipulate cookies in their own way, which does not involve cookie validation.
 
-Cookie validation is enabled by default. You can disable it by setting the [[yii\web\Request::enableCookieValidation]] 
+Cookie validation is enabled by default. You can disable it by setting the [[yii\web\Request::enableCookieValidation]]
 property to be false, although we strongly recommend you do not do so.
 
-> Note: Cookies that are directly read/sent via `$_COOKIE` and `setcookie()` will NOT be validated. 
+> Note: Cookies that are directly read/sent via `$_COOKIE` and `setcookie()` will NOT be validated.
 
 When using cookie validation, you must specify a [[yii\web\Request::cookieValidationKey]] that will be used to generate
 the aforementioned hash strings. You can do so by configuring the `request` component in the application configuration:
diff --git a/docs/guide/runtime-url-handling.md b/docs/guide/runtime-url-handling.md
index 0d7bc94..b38ebfa 100644
--- a/docs/guide/runtime-url-handling.md
+++ b/docs/guide/runtime-url-handling.md
@@ -3,36 +3,39 @@ URL Parsing and Generation
 
 > Note: This section is under development.
 
-The concept of URL management in Yii is fairly simple. URL management is based on the premise that the application uses
-internal routes and parameters everywhere. The framework itself will then translate routes into URLs, and vice versa, according to the URL manager's configuration. This approach allows you to change site-wide URLs merely by
-editing a single configuration file, without ever touching the application code.
+The concept of *URL management* in Yii is fairly simple: the application simply uses internal routes and parameters everywhere. The framework itself will then translate routes into URLs, and vice versa, according to the URL manager's configuration. This approach allows you to make site-wide changes to URLs merely by
+editing a single configuration file, without ever touching any application code.
 
-Internal routes
+Internal Routes
 ---------------
 
-When implementing an application using Yii, you'll deal with internal routes, often referred to as routes and parameters.
-Each controller and controller action has a corresponding internal route such as `site/index` or `user/create`.
-In the first example, `site` is referred to as the *controller ID* while `index` is referred to as the *action ID*. In the
-second example, `user` is the controller ID and `create` is the action ID. If the controller belongs to a *module*, the
-internal route is prefixed with the module ID. For example `blog/post/index` for a blog module (with `post` being the
-controller ID and `index` being the action ID).
+When implementing an application using Yii, you'll deal with *internal* routes, often referred to as "routes and parameters".
+Each controller and controller action has a corresponding internal route, such as `site/index` or `user/create`.
+
+In the first example, `site` is the *controller ID*, while `index` is the *action ID*. In the
+second example, `user` is the controller ID and `create` is the action ID. 
+
+If the controller belongs to a *module*, the
+internal route is prefixed with the module ID: for example, `blog/post/index` represents a blog module, the module's `post` 
+controller, and the `index` action.
 
 Creating URLs
 -------------
 
-The most important rule for creating URLs in your site is to always do so using the URL manager. The URL manager is a built-in application component named `urlManager`. This component is accessible from both web and console applications via
-`\Yii::$app->urlManager`. The component makes available the two following URL creation methods:
+The most important rule for creating URLs in your site is to always do so through the URL manager. The URL manager is a built-in application component fittingly named `urlManager`. This component is accessible from both web and console applications via
+`\Yii::$app->urlManager`. The component makes available two methods for creating URLs:
 
 - `createUrl($params)`
 - `createAbsoluteUrl($params, $schema = null)`
 
 The `createUrl` method creates an URL relative to the application root, such as `/index.php/site/index/`.
-The `createAbsoluteUrl` method creates an URL prefixed with the proper protocol and hostname:
-`http://www.example.com/index.php/site/index`. The former is suitable for internal application URLs, while the latter
-is used when you need to create URLs for external resources, such as connecting to third party services, sending email,
-generating RSS feeds etc.
+The `createAbsoluteUrl` method creates an URL that beings with with the proper protocol and hostname:
+`http://www.example.com/index.php/site/index`. Relative URLs, and the `createUrl` method are suitable for internal application URLs, while absolute URLs, and the `createAbsoluteUrl` method, are appropriate when you need to create URLs for external resources, such as connecting to third party services, sending email,
+generating RSS feeds, etc.
+
+Both methods can be passed parameters used to further customize the URL, such as appending values to pass along as part of the request.
 
-Some examples:
+Some examples of these two methods:
 
 ```php
 echo \Yii::$app->urlManager->createUrl(['site/page', 'id' => 'about']);
@@ -43,8 +46,8 @@ echo \Yii::$app->urlManager->createAbsoluteUrl('blog/post/index');
 // http://www.example.com/index.php/blog/post/index/
 ```
 
-The exact format of the URL depends on how the URL manager is configured. The above
-examples may also output:
+The exact format of the resuting URL depends on how the URL manager is configured. The above
+examples could also output:
 
 * `/site/page/id/about/`
 * `/index.php?r=site/page&id=about`
@@ -53,8 +56,8 @@ examples may also output:
 * `http://www.example.com/blog/post/index/`
 * `http://www.example.com/index.php?r=blog/post/index`
 
-In order to simplify URL creation there is [[yii\helpers\Url]] helper. Assuming we're at `/index.php?r=management/default/users&id=10` the following
-is how `Url` helper works:
+In order to simplify URL creation, Yii has the [[yii\helpers\Url]] helper. Assuming the current URL is `/index.php?r=management/default/users&id=10`, the following
+shows how the `Url` helper works:
 
 ```php
 use yii\helpers\Url;
@@ -67,7 +70,6 @@ echo Url::to('');
 // /index.php?r=management/default/page&id=contact
 echo Url::toRoute(['page', 'id' => 'contact']);
 
-
 // same module, different controller and action
 // /index.php?r=management/post/index
 echo Url::toRoute('post/index');
@@ -97,12 +99,12 @@ Url::remember(); // save URL to be used later
 Url::previous(); // get previously saved URL
 ```
 
-> **Tip**: In order to generate URL with a hashtag, for example `/index.php?r=site/page&id=100#title`, you need to
+> **Tip**: In order to generate a URL containing a hashtag, for example `/index.php?r=site/page&id=100#title`, you need to
   specify the parameter named `#` using `Url::to(['post/read', 'id' => 100, '#' => 'title'])`.
 
-There's also `Url::canonical()` method that allows you to generate
-[canonical URL](https://en.wikipedia.org/wiki/Canonical_link_element) for the currently executing action.
-The method ignores all action parameters except ones passed via action arguments:
+There's also the `Url::canonical()` method that allows you to generate
+[canonical URLs](https://en.wikipedia.org/wiki/Canonical_link_element) for the current action.
+This method ignores all action parameters except for ones specifically passed via action arguments:
 
 ```php
 namespace app\controllers;
@@ -119,15 +121,17 @@ class CanonicalController extends Controller
 }
 ```
 
-When accessed as `/index.php?r=canonical/test&page=hello&number=42` canonical URL will be `/index.php?r=canonical/test&page=hello`.
+When accessed as `/index.php?r=canonical/test&page=hello&number=42`, the canonical URL will be `/index.php?r=canonical/test&page=hello`.
 
 Customizing URLs
 ----------------
 
 By default, Yii uses a query string format for URLs, such as `/index.php?r=news/view&id=100`. In order to make URLs
-human-friendly i.e., more readable, you need to configure the `urlManager` component in the application's configuration
+human-friendly (i.e., more legible), you need to configure the `urlManager` component in the application's configuration
 file. Enabling "pretty" URLs will convert the query string format to a directory-based format: `/index.php/news/view?id=100`.
-Disabling the `showScriptName` parameter means that `index.php` will not be part of the URLs. Here's the relevant part of
+
+
+Disabling the `showScriptName` parameter further customizes the URL such that `index.php` will be omitted. Here's the relevant part of
 the application's configuration file:
 
 ```php
@@ -143,10 +147,10 @@ return [
 ];
 ```
 
-Note that this configuration will only work if the web server has been properly configured for Yii, see
+Note that this configuration will only work if the web server has also been properly configured for Yii, see
 [installation](start-installation.md#recommended-apache-configuration).
 
-### Named parameters
+### Named Parameters
 
 A rule can be associated with a few `GET` parameters. These `GET` parameters appear in the rule's pattern as special tokens in the following format:
 
@@ -155,11 +159,11 @@ A rule can be associated with a few `GET` parameters. These `GET` parameters app
 ```
 
 `ParameterName` is a name of a `GET` parameter, and the optional `ParameterPattern` is the regular expression that should
-be used to match the value of the `GET` parameter. In case `ParameterPattern` is omitted, it means the parameter
+be used to match the value of the `GET` parameter. When `ParameterPattern` is omitted, it means the parameter
 should match any characters except `/`. When creating a URL, these parameter tokens will be replaced with the
 corresponding parameter values; when parsing a URL, the corresponding GET parameters will be populated with the parsed results.
 
-Let's use some examples to explain how URL rules work. We assume that our rule set consists of three rules:
+Let's use some examples to explain how URL rules work. Asusuming that the rule set consists of three rules:
 
 ```php
 [
@@ -173,29 +177,27 @@ Let's use some examples to explain how URL rules work. We assume that our rule s
 - Calling `Url::toRoute(['post/read', 'id' => 100])` generates `/index.php/post/100`. The second rule is applied.
 - Calling `Url::toRoute(['post/read', 'year' => 2008, 'title' => 'a sample post'])` generates
   `/index.php/post/2008/a%20sample%20post`. The third rule is applied.
-- Calling `Url::toRoute('post/read')` generates `/index.php/post/read`. None of the rules is applied, convention is used
-  instead.
+- Calling `Url::toRoute('post/read')` generates `/index.php/post/read`. None of the rules is applied; convention is used instead.
 
 In summary, when using `createUrl` to generate a URL, the route and the `GET` parameters passed to the method are used to
-decide which URL rule to be applied. If every parameter associated with a rule can be found in the `GET` parameters passed
+decide which URL rule will be applied. If every parameter associated with a rule can be found in the `GET` parameters passed
 to `createUrl`, and if the route of the rule also matches the route parameter, the rule will be used to generate the URL.
 
 If the `GET` parameters passed to `Url::toRoute` are more than those required by a rule, the additional parameters will
-appear in the query string. For example, if we call `Url::toRoute(['post/read', 'id' => 100, 'year' => 2008])`, we will
-obtain `/index.php/post/100?year=2008`.
+appear in the query string. For example, the call `Url::toRoute(['post/read', 'id' => 100, 'year' => 2008])`, will
+generate `/index.php/post/100?year=2008`.
 
-As we mentioned earlier, the other purpose of URL rules is to parse the requesting URLs. Naturally, this is an inverse
-process of URL creation. For example, when a user requests for `/index.php/post/100`, the second rule in the above example
-will apply, which resolves in the route `post/read` and the `GET` parameter `['id' => 100]` (accessible via
+As mentioned earlier, the other purpose of URL rules is to parse the requesting URLs. Naturally, this is the inverse of URL creation. For example, when a user requests for `/index.php/post/100`, the second rule in the above example
+will apply, which resolves to the route `post/read` with the `GET` parameter `['id' => 100]` (accessible via
 `Yii::$app->request->get('id')`).
 
 ### Parameterizing Routes
 
-We may reference named parameters in the route part of a rule. This allows a rule to be applied to multiple routes based
-on matching criteria. It may also help reduce the number of rules needed for an application, and thus improve the overall
+Rules may also make use of named parameters as part of a route. Named parameters allow a rule to be applied to multiple routes based
+on matching criteria. Named parameters may also help reduce the number of rules needed for an application, and thus improve the overall
 performance.
 
-We use the following example rules to illustrate how to parameterize routes with named parameters:
+The following example rules illustrate how to parameterize routes with named parameters:
 
 ```php
 [
@@ -205,19 +207,19 @@ We use the following example rules to illustrate how to parameterize routes with
 ]
 ```
 
-In the above example, we use two named parameters in the route part of the rules: `controller` and `action`. The former matches a controller ID to be either post or comment, while the latter matches an action ID to be create, update or delete. You may name the parameters differently as long as they do not conflict with GET parameters that may appear in URLs.
+In the above example, two named parameters are found in the route part of the rules: `controller` and `action`. The former matches a controller ID that's either "post" or "comment", while the latter matches an action ID that could be "create", "update", or "delete". You may name the parameters differently as long as they do not conflict with any GET parameters that may appear in your URLs.
 
 Using the above rules, the URL `/index.php/post/123/create` will be parsed as the route `post/create` with `GET` parameter
-`id=123`. Given the route `comment/list` and `GET` parameter `page=2`, we can create a URL `/index.php/comments?page=2`.
+`id=123`. Given the route `comment/list` and `GET` parameter `page=2`, Yii can create a URL `/index.php/comments?page=2`.
 
-### Parameterizing  hostnames
+### Parameterizing Hostnames
 
 It is also possible to include hostnames in the rules for parsing and creating URLs. One may extract part of the hostname
 to be a `GET` parameter. This is especially useful for handling subdomains. For example, the URL
 `http://admin.example.com/en/profile` may be parsed into GET parameters `user=admin` and `lang=en`. On the other hand,
-rules with hostname may also be used to create URLs with parameterized hostnames.
+rules with hostnames may also be used to create URLs with parameterized hostnames.
 
-In order to use parameterized hostnames, simply declare URL rules with host info, e.g.:
+In order to use parameterized hostnames, simply declare the URL rules while including the host info:
 
 ```php
 [
@@ -225,13 +227,13 @@ In order to use parameterized hostnames, simply declare URL rules with host info
 ]
 ```
 
-In the above example the first segment of the hostname is treated as the user parameter while the first segment
-of the path info is treated as the lang parameter. The rule corresponds to the `user/profile` route.
+In the above example, the first segment of the hostname is treated as the "user" parameter while the first segment
+of the pat is treated as the "lang" parameter. The rule corresponds to the `user/profile` route.
 
 Note that [[yii\web\UrlManager::showScriptName]] will not take effect when a URL is being created using a rule with a parameterized hostname.
 
 Also note that any rule with a parameterized hostname should NOT contain the subfolder if the application is under
-a subfolder of the Web root. For example, if the application is under `http://www.example.com/sandbox/blog`, then we
+a subfolder of the web root. For example, if the application is under `http://www.example.com/sandbox/blog`, then you
 should still use the same URL rule as described above without the subfolder `sandbox/blog`.
 
 ### Faking URL Suffix
diff --git a/docs/guide/security-authorization.md b/docs/guide/security-authorization.md
index 6a09699..b4827c9 100644
--- a/docs/guide/security-authorization.md
+++ b/docs/guide/security-authorization.md
@@ -219,8 +219,8 @@ Building authorization data is all about the following tasks:
 
 Depending on authorization flexibility requirements the tasks above could be done in different ways.
 
-If your permissions hierarchy doesn't change at all and you have a fixed number of users you can create a console
-command that will initialize authorization data once via APIs offered by `authManager`:
+If your permissions hierarchy doesn't change at all and you have a fixed number of users you can create a
+[console command](tutorial-console.md#create-command) command that will initialize authorization data once via APIs offered by `authManager`:
 
 ```php
 <?php
@@ -347,7 +347,7 @@ $rule = new \app\rbac\AuthorRule;
 $auth->add($rule);
 
 // add the "updateOwnPost" permission and associate the rule with it.
-$updateOwnPost = $this->auth->createPermission('updateOwnPost');
+$updateOwnPost = $auth->createPermission('updateOwnPost');
 $updateOwnPost->description = 'Update own post';
 $updateOwnPost->ruleName = $rule->name;
 $auth->add($updateOwnPost);
diff --git a/docs/guide/start-installation.md b/docs/guide/start-installation.md
index 62ba189..06851b2 100644
--- a/docs/guide/start-installation.md
+++ b/docs/guide/start-installation.md
@@ -26,7 +26,7 @@ by running `composer self-update`.
 
 With Composer installed, you can install Yii by running the following commands under a Web-accessible folder:
 
-    composer global require "fxp/composer-asset-plugin:1.0.0-beta2"
+    composer global require "fxp/composer-asset-plugin:1.0.0-beta3"
     composer create-project --prefer-dist yiisoft/yii2-app-basic basic
 
 The first command installs the [composer asset plugin](https://github.com/francoispluchino/composer-asset-plugin/)
diff --git a/docs/guide/structure-application-components.md b/docs/guide/structure-application-components.md
old mode 100755
new mode 100644
diff --git a/docs/guide/structure-assets.md b/docs/guide/structure-assets.md
index 9d2efb0..8e7b26e 100644
--- a/docs/guide/structure-assets.md
+++ b/docs/guide/structure-assets.md
@@ -388,7 +388,7 @@ the following syntax and file name extensions:
 - [CoffeeScript](http://coffeescript.org/): `.coffee`
 - [TypeScript](http://www.typescriptlang.org/): `.ts`
 
-Yii relies on the installed pre-processor tools to convert assets. For example, o use [LESS](http://lesscss.org/)
+Yii relies on the installed pre-processor tools to convert assets. For example, to use [LESS](http://lesscss.org/)
 you should install the `lessc` pre-processor command.
 
 You can customize the pre-processor commands and the supported extended syntax by configuring
diff --git a/docs/guide/structure-views.md b/docs/guide/structure-views.md
index 85c3b6d..b8553d8 100644
--- a/docs/guide/structure-views.md
+++ b/docs/guide/structure-views.md
@@ -636,7 +636,7 @@ to these events to inject content into views or process the rendering results be
 
 - [[yii\base\View::EVENT_BEFORE_RENDER|EVENT_BEFORE_RENDER]]: triggered at the beginning of rendering a file
   in a controller. Handlers of this event may set [[yii\base\ViewEvent::isValid]] to be false to cancel the rendering process.
-- [[yii\base\View::EVENT_AFTER_RENDER|EVENT_AFTER_RENDER]]: triggered by the call of [[yii\base\View::beginPage()]] in layouts.
+- [[yii\base\View::EVENT_AFTER_RENDER|EVENT_AFTER_RENDER]]: triggered after rendering a file by the call of [[yii\base\View::afterRender()]].
   Handlers of this event may obtain the rendering result through [[yii\base\ViewEvent::output]] and may modify
   this property to change the rendering result.
 - [[yii\base\View::EVENT_BEGIN_PAGE|EVENT_BEGIN_PAGE]]: triggered by the call of [[yii\base\View::beginPage()]] in layouts.
diff --git a/docs/guide/test-overview.md b/docs/guide/test-overview.md
index 0243cce..5ab442d 100644
--- a/docs/guide/test-overview.md
+++ b/docs/guide/test-overview.md
@@ -29,8 +29,8 @@ The process of developing a feature is the following:
 After it's done the process is repeated again for another feature or improvement. If existing feature is to be changed,
 tests should be changed as well.
 
-> **Tip**: If you feel that you are loosing time doing a lot of small and simple iterations try covering more by your
-> test scenario so you do more before executing tests again. If you're debugging too much try doing the opposite.
+> **Tip**: If you feel that you are losing time doing a lot of small and simple iterations, try covering more by your
+> test scenario so you do more before executing tests again. If you're debugging too much, try doing the opposite.
 
 The reason to create tests before doing any implemenation is that it allows you to focus on what do we want to achieve
 and fully dive into "how to do it" afterwards. Usually it leads to better abstractions and easier test maintenance when
diff --git a/docs/guide/tutorial-advanced-app.md b/docs/guide/tutorial-advanced-app.md
index 51b5726..67e06e3 100644
--- a/docs/guide/tutorial-advanced-app.md
+++ b/docs/guide/tutorial-advanced-app.md
@@ -17,8 +17,8 @@ If you do not have [Composer](http://getcomposer.org/), follow the instructions 
 
 With Composer installed, you can then install the application using the following commands:
 
-    composer global require "fxp/composer-asset-plugin:1.0.0-beta2"
-    composer create-project --prefer-dist --stability=dev yiisoft/yii2-app-advanced yii-application
+    composer global require "fxp/composer-asset-plugin:1.0.0-beta3"
+    composer create-project --prefer-dist yiisoft/yii2-app-advanced yii-application
 
 The first command installs the [composer asset plugin](https://github.com/francoispluchino/composer-asset-plugin/)
 which allows managing bower and npm package dependencies through Composer. You only need to run this command
diff --git a/docs/guide/tutorial-console.md b/docs/guide/tutorial-console.md
index ae96419..86c521b 100644
--- a/docs/guide/tutorial-console.md
+++ b/docs/guide/tutorial-console.md
@@ -6,7 +6,8 @@ Console applications
 Yii has full featured support for console applications, whose structure is very similar to a Yii web application. A console application
 consists of one or more [[yii\console\Controller]] classes, which are often referred to as "commands" in the console environment. Each controller can also have one or more actions, just like web controllers.
 
-Usage
+
+Usage <a name="usage"></a>
 -----
 
 You execute a console controller action using the following syntax:
@@ -23,13 +24,18 @@ be called from command line like so:
 yii migrate/create --migrationTable=my_migration
 ```
 
-In the above `yii` is the console application entry script described below.
+In the above `yii` is the console application entry script which is described below.
+
+> **Note**: When using `*` in console don't forget to quote it as `"*"` in order to avoid executing it as a shell
+> glob that will be replaced by all file names of the current directory.
+
 
-Entry script
+Entry script <a name="entry-script"></a>
 ------------
 
-The console application entry script is equivalent to the `index.php` bootstrap file used for the web application. The console entry script is typically called `yii`, and located in your application's root directory. The contents of the console application entry script contains
-code like the following:
+The console application entry script is equivalent to the `index.php` bootstrap file used for the web application.
+The console entry script is typically called `yii`, and located in your application's root directory.
+It contains code like the following:
 
 ```php
 #!/usr/bin/env php
@@ -52,14 +58,14 @@ $config = require(__DIR__ . '/config/console.php');
 $application = new yii\console\Application($config);
 $exitCode = $application->run();
 exit($exitCode);
-
 ```
 
 This script will be created as part of your application; you're free to edit it to suit your needs. The `YII_DEBUG` constant can be set `false` if you do
 not want to see a stack trace on error, and/or if you want to improve the overall performance. In both basic and advanced application
-templates, the console application entry script has debugging enabled to provide a more developer-friendly environment.
+templates, the console application entry script has debugging enabled by default to provide a more developer-friendly environment.
+
 
-Configuration
+Configuration <a name="configuration"></a>
 -------------
 
 As can be seen in the code above, the console application uses its own configuration file, named `console.php`. In this file
@@ -68,20 +74,18 @@ you should configure various [application components](structure-application-comp
 If your web application and the console application share a lot of configuration parameters and values, you may consider moving the common
 parts into a separate file, and including this file in both of the application configurations (web and console). You can see an example of this in the "advanced" application template.
 
-Sometimes, you may want to run a console command using an application configuration that is different from the one
-specified in the entry script. For example, you may want to use the `yii migrate` command to upgrade your
-test databases, which are configured in each individual test suite. To do change the configuration dynamically, simply specify a custom application configuration
-file via the `appconfig` option when executing the command:
-
-```
-yii <route> --appconfig=path/to/config.php ...
-```
-
-> **Note**: When using `*` in console don't forget to quote it as `"*"` in order to avoid executing it as a shell
-> command.
+> Tipp: Sometimes, you may want to run a console command using an application configuration that is different
+> from the one specified in the entry script. For example, you may want to use the `yii migrate` command to
+> upgrade your test databases, which are configured in each individual test suite. To do change the configuration
+> dynamically, simply specify a custom application configuration
+> file via the `appconfig` option when executing the command:
+> 
+> ```
+> yii <route> --appconfig=path/to/config.php ...
+> ```
 
 
-Creating your own console commands
+Creating your own console commands <a name="create-command"></a>
 ----------------------------------
 
 ### Console Controller and Action
diff --git a/docs/guide/tutorial-core-validators.md b/docs/guide/tutorial-core-validators.md
index b755542..ec1a14a 100644
--- a/docs/guide/tutorial-core-validators.md
+++ b/docs/guide/tutorial-core-validators.md
@@ -97,7 +97,7 @@ is as specified by the `operator` property.
 
 ```php
 [
-    [['from', 'to'], 'date'],
+    [['from_date', 'to_date'], 'date'],
 ]
 ```
 
@@ -113,6 +113,13 @@ specified via [[yii\validators\DateValidator::timestampAttribute|timestampAttrib
 - `timestampAttribute`: the name of the attribute to which this validator may assign the UNIX timestamp
   converted from the input date/time.
 
+In case the input is optional you may also want to add a default value filter in addition to the date validator
+to ensure empty input is stored as `NULL`. Other wise you may end up with dates like `0000-00-00` in your database
+or `1970-01-01` in the input field of a date picker.
+
+```php
+[['from_date', 'to_date'], 'default', 'value' => null],
+```
 
 ## [[yii\validators\DefaultValueValidator|default]] <a name="default"></a>
 
diff --git a/docs/guide/tutorial-mailing.md b/docs/guide/tutorial-mailing.md
index c3e9931..40190aa 100644
--- a/docs/guide/tutorial-mailing.md
+++ b/docs/guide/tutorial-mailing.md
@@ -61,7 +61,7 @@ $message->setTo(Yii::$app->params['adminEmail'])
 ```
 
 > Note: each 'mailer' extension comes in 2 major classes: 'Mailer' and 'Message'. 'Mailer' always knows
-  the class name and specific of the 'Message'. Do not attempt ot instantiate 'Message' object directly -
+  the class name and specific of the 'Message'. Do not attempt to instantiate 'Message' object directly -
   always use `compose()` method for it.
 
 You may also send several messages at once:
diff --git a/docs/guide/tutorial-performance-tuning.md b/docs/guide/tutorial-performance-tuning.md
index 5bdb928..cd38b77 100644
--- a/docs/guide/tutorial-performance-tuning.md
+++ b/docs/guide/tutorial-performance-tuning.md
@@ -85,7 +85,7 @@ Note that the `cache` [application component](structure-application-components.m
 It is possible to combine and minimize assets, typically JavaScript and CSS, in order to slightly improve page load
 time and therefore deliver better experience for end user of your application.
 
-In order to learn how it can be achieved, refer to [assets](assets.md) guide section.
+In order to learn how it can be achieved, refer to [assets](structure-assets.md) guide section.
 
 ### Using better storage for sessions
 
diff --git a/docs/guide/tutorial-shared-hosting.md b/docs/guide/tutorial-shared-hosting.md
new file mode 100644
index 0000000..fefe790
--- /dev/null
+++ b/docs/guide/tutorial-shared-hosting.md
@@ -0,0 +1,65 @@
+Shared Hosting Environment
+==========================
+
+Shared hosting environments are often quite limited about configuration and directory structure. Still in most cases
+you can run Yii 2.0 on these.
+
+Deploying basic application
+---------------------------
+
+Since there's typically only one webroot it is recommended to use basic application template. Refer to
+[Installing Yii chapter](start-installation.md) and install application template locally.
+
+### Add extras for webserver
+
+If webserver used is Apache you'll need to add `.htaccess` file with the following content to `web`
+(where `index.php` is):
+
+```
+Options +FollowSymLinks
+IndexIgnore */*
+
+RewriteEngine on
+
+# if a directory or a file exists, use it directly
+RewriteCond %{REQUEST_FILENAME} !-f
+RewriteCond %{REQUEST_FILENAME} !-d
+
+# otherwise forward it to index.php
+RewriteRule . index.php
+```
+
+In case of nginx you should not need any extra config files.
+
+### Renaming webroot
+
+If after connecting to your shared hosting via FTP or by other means you're seeing something like the following, you're
+most probably lucky.
+ 
+```
+config/
+logs/
+www/
+```
+
+In the above `www` is webserver directory root (i.e. webroot). It could be named differently. Common names are: `www`,
+`htdocs`, `public_html`. Since we have webroot in our basic application template named `web` we need to rename it to
+whatever hosting webroot is before uploading.
+
+### FTP root directory is writeable
+
+If you can write to the root level directory i.e. where `config`, `logs` and `www` are, just upload `assets`, `commands`
+etc. as is.
+
+### Check requirements
+
+In order to run Yii hosting should meet its requirements. The very minimum requirement is PHP 5.4. In order to check
+the rest copy `requirements.php` from root directory into webroot directory and run it via browser using
+`http://example.com/requirements.php` URL. Don't forget to delete the file afterwards.
+
+
+Deploying advanced application
+------------------------------
+
+Deploying advanced application to shared hosting is a bit trickier than doing it with basic application because it has
+two webroots.
\ No newline at end of file
diff --git a/docs/guide/tutorial-start-from-scratch.md b/docs/guide/tutorial-start-from-scratch.md
index 6af82aa..6bf43a4 100644
--- a/docs/guide/tutorial-start-from-scratch.md
+++ b/docs/guide/tutorial-start-from-scratch.md
@@ -3,13 +3,15 @@ Creating your own Application structure
 
 > Note: This section is under development.
 
-While the [basic](apps-basic.md) and [advanced](apps-advanced.md) application templates are great for most of your needs,
-you may want to create your own application template with which to start your projects.
+While the [basic](https://github.com/yiisoft/yii2/tree/master/apps/basic) and [advanced](https://github.com/yiisoft/yii2/tree/master/apps/advanced)
+application templates are great for most of your needs, you may want to create your own application template with which
+to start your projects.
 
-Application templates in Yii are simply repositories containing a `composer.json` file, and registered as a Composer package. Any repository can be identified as a Composer package, making it installable via `create-project` Composer command.
+Application templates in Yii are simply repositories containing a `composer.json` file, and registered as a Composer package.
+Any repository can be identified as a Composer package, making it installable via `create-project` Composer command.
 
-Since it's a bit too much to start building your entire template from scratch, it is better to use one of the built-in templates
-as a base. Let's use the basic template here.
+Since it's a bit too much to start building your entire template from scratch, it is better to use one of the built-in
+templates as a base. Let's use the basic template here.
 
 Clone the Basic Template
 ----------------------------------------
@@ -37,10 +39,10 @@ Next, actually modify the structure and contents of the application as you would
 Make a Package
 --------------
 
-With the template defined, create a Git repository from it, and push your files there. If you're going to open source your template, [Github](http://githumb.com) is the best place to host it. If you intend to keep your template non-collaborative, any Git repository site will do.
+With the template defined, create a Git repository from it, and push your files there. If you're going to open source your template, [Github](http://github.com) is the best place to host it. If you intend to keep your template non-collaborative, any Git repository site will do.
 
 Next, you need to register your package for Composer's sake. For public templates, the package should be registered at [Packagist](https://packagist.org/).
-For private templates, it is a bit more tricky to register the packge. For instructions, see the [Composer documentation](https://getcomposer.org/doc/05-repositories.md#hosting-your-own).
+For private templates, it is a bit more tricky to register the package. For instructions, see the [Composer documentation](https://getcomposer.org/doc/05-repositories.md#hosting-your-own).
 
 Use the Template
 ------
@@ -48,6 +50,6 @@ Use the Template
 That's all that's required to create a new Yii application template. Now you can create projects using your template:
 
 ```
-composer global require "fxp/composer-asset-plugin:1.0.0-beta2"
+composer global require "fxp/composer-asset-plugin:1.0.0-beta3"
 composer create-project --prefer-dist --stability=dev mysoft/yii2-app-coolone new-project
 ```
diff --git a/docs/guide/tutorial-template-engines.md b/docs/guide/tutorial-template-engines.md
index 722828b..019fdd8 100644
--- a/docs/guide/tutorial-template-engines.md
+++ b/docs/guide/tutorial-template-engines.md
@@ -21,8 +21,11 @@ component's behavior:
                 ],
                 'twig' => [
                     'class' => 'yii\twig\ViewRenderer',
-                    //'cachePath' => '@runtime/Twig/cache',
-                    //'options' => [], /*  Array of twig options */
+                    'cachePath' => '@runtime/Twig/cache',
+                    // Array of twig options:
+                    'options' => [
+                        'auto_reload' => true,
+                    ],
                     'globals' => ['html' => '\yii\helpers\Html'],
                     'uses' => ['yii\bootstrap'],
                 ],
diff --git a/docs/internals-es/translation-workflow.md b/docs/internals-es/translation-workflow.md
index 80e0759..cf08750 100644
--- a/docs/internals-es/translation-workflow.md
+++ b/docs/internals-es/translation-workflow.md
@@ -1,62 +1,58 @@
 Flujo de Trabajo de Traducción
 ==============================
 
-Yii se traduce en muchos idiomas con el fin de ser útil para desarrolladores de aplicaciones e internacionales. Dos áreas principales donde la contribución es muy bienvenida son la documentación y los mensajes del framework.
+Yii se traduce en muchos idiomas con el fin de ser útil para desarrolladores de aplicaciones e internacionales.
+Dos áreas principales donde la contribución es muy bienvenida son la documentación y los mensajes del framework.
 
-Framework Mensajes 
-------------------
+Mensajes del Framework 
+----------------------
 
-Framework tiene dos tipos de mensajes: excepciones que están destinados al desarrollador y nunca se traducen y mensajes 
+El framework tiene dos tipos de mensajes: excepciones que están destinadas al desarrollador y nunca se traducen, y mensajes 
 que en realidad son visibles para el usuario final, tales como errores de validación.
 
 El orden para comenzar con la traducción de mensajes:
 
-1. Comprobar `framework/messages/config.php` y asegúrese de que su lenguaje aparece en `lenguajes`. Si no, añadir su lenguaje allí (recuerde que debe mantener la lista en orden alfabético). El formato de código de idioma debe seguir [Código de Idiomas IETF](http://es.wikipedia.org/wiki/C%C3%B3digo_de_idioma_IETF), por ejemplo, `es`.
-2. Ir al `framework` y ejecutar `yii message/extract messages/config.php`.
-3. Traducir los mensajes en `framework/messages/your_lenguaje/yii.php`. Asegúrese de guardar el archivo con codificación UTF-8.
+1. Comprobar que en `framework/messages/config.php` su idioma aparece en `languages`. Si no, añade tu idioma allí (recuerda que debes mantener la lista en orden alfabético).
+El formato de código de idioma debe seguir el [Código de Idiomas IETF](http://es.wikipedia.org/wiki/C%C3%B3digo_de_idioma_IETF), por ejemplo, `es`.
+2. Ir al directorio `framework` y ejecutar el comando `yii message/extract messages/config.php`.
+3. Traducir los mensajes en `framework/messages/tu-idioma/yii.php`. Asegúrate de guardar el archivo con codificación UTF-8.
 4. [Crear un pull request](https://github.com/yiisoft/yii2/blob/master/docs/internals-es/git-workflow.md).
 
-Con el fin de mantener la traducción al día puede ejecutar `yii message/extract messages/config.php` nuevamente. Se volverán a extraer automáticamente los mensajes de mantenimiento intactos sin los cambios.
+Con el fin de mantener la traducción al día puedes ejecutar `yii message/extract messages/config.php` nuevamente.
+Se volverán a extraer automáticamente los mensajes de mantenimiento intactos sin los cambios.
 
-En el archivo de traducción de cada elemento de la matriz representa la traducción (valor) de un mensaje (clave). Si el valor está vacío, el mensaje se considera como no traducida. Los mensajes que ya no necesiten traducción tendrán sus traducciones encerrado entre un par de marcas »@@. Cadena de mensaje se puede utilizar con el formato de formas plurales. Compruebe [sección i18n de la guía](../guide-es/tutorial-i18n.md) para más detalles.
+En el archivo de traducción de cada elemento del `array` representa un mensaje (clave) y su la traducción (valor). Si el valor está vacío, el mensaje se considera como no traducido.
+Los mensajes que ya no necesiten traducción tendrán sus traducciones encerrado entre un par de marcas '@@'. El texto de los mensajes se puede utilizar con el formato de formas plurales.
+Chequea la [sección i18n de la guía](../guide-es/tutorial-i18n.md) para más detalles.
 
 Documentación
 -------------
 
-Coloque traducciones de documentación bajo `docs/<original>-<lenguaje>` donde `<original>` es el nombre de la documentación original como `guide` o `internals` y `<lenguaje>` es el código de Lenguaje de los docs Lenguaje se convierten a. Para la traducción de guias es `docs/guide-es`.
+Coloca las traducciones de la documentación bajo `docs/<original>-<language>` donde `<original>` es el nombre de la documentación original como `guide` o `internals`
+y `<language>` es el código del idioma al que se está traduciendo. Para la traducción al español de la guía, es `docs/guide-es`.
 
-Después del trabajo inicial se lleva a cabo usted puede conseguir lo que ha cambiado desde la última traducción del fichero usando un comando especial del directorio `build`:
+Después de que el trabajo inicial está hecho, puedes obtener los cambios desde la última traducción del archivo usando un comando especial del directorio `build`:
 
 ```
 php build translation "../docs/guide" "../docs/guide-es" "Reporte de traducción guia en Español" > report_guide_es.html
 ```
 
-Si se quejan de composer, ejecutar `composer install` en el directorio raíz.
+Si recibes un error de composer, ejecuta `composer install` en el directorio raíz.
 
 Convenios para la traducción
 ----------------------------
 
-- active record — sin traducción
-- cache — sin traducción
-- framework — sin traducción
-- helper — sin traducción
-- hash — sin traducción
-- id — sin traducción
-- widget — sin traducción
-- script — sin traducción
-- assets — sin traducción
-- bootstrapping | bootstrap — sin traducción
-- routing — sin traducción
-- logging — sin traducción
-- cookies — sin traducción
-- controller — controlador
-- model — modelo
-- view — vista
-- themes — temas o plantillas
-- behaviors — comportamientos
-- handlers — manipuladores
-- instantiating — instanciando
-- link — enlace
-- render — sin traducción
-- DatePicker — sin traducción
-- rendering — renderizando
+Las palabras en inglés que son propias del framework o de PHP se pueden dejar en el idioma original. Ejemplos: `namespace`, `assets`, `helper`, `widget`, etc.
+
+Para las palabras que están muy ligadas a conceptos extendidos se deben traducir y poner entre paréntesis su equivalente en el idioma original. Ejemplos : `petición` (request), `respuesta` (response), `comportamiento` (behavior), etc.
+
+Los bloques han de ser traducidos, las traducciones se muestran a continuación :
+
+* `Warning` : `Aviso`
+* `Note` : `Nota`
+* `Info` : `Información`
+* `Tip` : `Consejo`
+
+> Aclaraciones :
+* Sólo mencionar una vez entre paréntesis la palabra original en su primera aparición en el texto o en el fichero README.md .
+* Si una palabra se refiere a un concepto o acción se aplicará la traducción, si por el contrario se refiere a un tipo de dato de php o del framework no se debe traducir.
diff --git a/docs/internals-ja/automation.md b/docs/internals-ja/automation.md
new file mode 100644
index 0000000..65777a2
--- /dev/null
+++ b/docs/internals-ja/automation.md
@@ -0,0 +1,15 @@
+自動化
+======
+
+Yii の開発に取り組む際に、自動化できるタスクがいくつかあります:
+
+- フレームワークのルートディレクトリに配置されるクラスマップ `classes.php` の生成。
+  `./build/build classmap` を走らせて生成してください。
+
+- クラスファイルの中の、ゲッターとセッターによって導入されるプロパティを記述する `@property` 注釈の生成。
+  `./build/build php-doc/property` を走らせて注釈を更新してください。
+
+- コードスタイルと phpdoc コメントの些細な問題の修正。
+  `./build/build php-doc/fix` を走らせて修正してください。
+  このコマンドは完璧なものではないため、望ましくない変更があるかもしれませんので、コミットする前に変更点をチェックしてください。
+  `git add -p` を使って変更をプレビューすることも出来ます。
diff --git a/docs/internals-ja/git-workflow.md b/docs/internals-ja/git-workflow.md
new file mode 100644
index 0000000..a08718a
--- /dev/null
+++ b/docs/internals-ja/git-workflow.md
@@ -0,0 +1,176 @@
+Yii 2 寄稿者のための Git ワークフロー
+=====================================
+
+Yii の開発に寄稿したい、ですって? すばらしい! けれども、あなたの修正案が速やかに採用されるチャンスを増やすためには、
+どうか以下のステップを踏むようにしてください (最初の二つのステップは最初に寄稿するときにだけ必要になります)。
+あなたが git と github については初めてだという場合は、最初に [github help](http://help.github.com/) や [try git](https://try.github.com) を精査したり、[git internal data model](http://nfarina.com/post/9868516270/git-is-simpler) についていくらか学習したりする必要があるかもしれません。
+
+### 1. github で Yii リポジトリを [Fork](http://help.github.com/fork-a-repo/) し、あなたのフォークをあなたの開発環境にクローンする
+
+```
+git clone git@github.com:YOUR-GITHUB-USERNAME/yii2.git
+```
+
+Linux において、GitHub で GIT を設定するのに問題が生じたり、"Permission Denied (publickey)" のようなエラーが発生したりする場合は、
+[setup your GIT installation to work with GitHub](http://help.github.com/linux-set-up-git/) に従ってください。
+
+### 2. メインの Yii リポジトリを "upstream" という名前でリモートリポジトリとして追加する
+
+Yii をクローンしたディレクトリ、すなわち "yii2" に入って、以下のコマンドを打ち込みます:
+
+```
+git remote add upstream git://github.com/yiisoft/yii2.git
+```
+
+### 3. あなたが取り組んでいる問題が、修正するために著しい努力を要求するものである場合は、それに対する課題(issue)が作成されていることを確認する
+
+全ての新機能とバグ修正は、議論とドキュメンテーションのための単一の参照ポイントを提供するために、それに結びつく課題を持つべきです。
+数分間時間を取って、既存の課題リストに目を通し、あなたが寄稿しようとしている問題に合致するものが無いかどうか調べてください。
+もし課題リストにすでに挙っているのを見つけた場合は、その課題にコメントを残して、あなたがその項目について取り組もうとしていることを示してください。
+あなたが取り組もうとしている問題に合致する既存の課題が見つからなかった場合は、新しい課題を作成してください。単純な修正であれば、直接にプルリクエストをしてください。
+こうすることで、開発チームはあなたの提案をレビューし、将来にわたって適切なフィードバックを提供することが可能になります。
+
+> 小さな変更や、ドキュメンテーションの問題、または単純な修正については、課題を作成する必要はありません。それらについては、プルリクエストだけで十分です。
+
+### 4. メインの Yii ブランチから最新のコードをフェッチする
+
+```
+git fetch upstream
+```
+
+すべての新しい寄稿において、最新のコードに対して作業することを確実にするために、この作業から開始すべきです。
+
+### 5. 現在の Yii のマスターブランチに基いて、あなたの寄稿のための新しいブランチを作成する
+
+> これは非常に重要です。なぜなら、master ブランチを使うと、あなたのアカウントからは一つ以上のプルリクエストを送信することが出来なくなるからです。
+
+独立したバグ修正や変更は、各々、それ自身のブランチに入れるべきです。
+ブランチの名前は説明的なものにし、あなたのコードが関係する課題の番号で始まるようにしてください。
+特定の課題を修正するものでない場合は、番号を省略してください。
+例えば:
+
+```
+git checkout upstream/master
+git checkout -b 999-name-of-your-branch-goes-here
+```
+
+### 6. 魔法を使ってあなたのコードを書く
+
+動くことを確認してくださいね :)
+
+ユニットテストは常に歓迎されます。テストされ、十分にカバーされたコードは、あなたの寄稿をチェックするタスクを非常に単純化してくれます。
+ユニットテストの失敗を中身とする課題を立てることも許容されています。
+
+### 7. CHANGELOG を更新する
+
+CHANGELOG ファイルを編集して、あなたの修正を追加します。
+新しい行は、ファイル冒頭の "Work in progress" 見出しの下に挿入してください。
+チェンジログの行は、下記のどちらかのように書いてください:
+
+```
+Bug #999: バグ修正の内容説明 (あなたの名前)
+Enh #999: 機能拡張の内容説明 (あなたの名前)
+```
+
+`#999` は `Bug` または `Enh` が示している課題番号です。
+チェンジログはタイプ(`Bug`, `Enh`)によってグループ化し、課題番号順に並べます。
+
+非常に小さな修正、すなわち、タイポやドキュメンテーションの修正については、CHANGELOG を更新する必要はありません。
+
+### 8. 修正をコミットする
+
+以下のコマンドを使って、コミットしたいファイルや変更を [staging area](http://gitref.org/basic/#add) に追加します:
+
+```
+git add path/to/my/file.php
+```
+
+`-p` オプションを使って、コミットに含める変更を選択することも出来ます。
+
+説明的なコミットメッセージをいれて修正をコミットしてください。
+github があなたのコミットを自動的にチケットとリンクするように、`#XXX` という書式でチケット番号に言及することを忘れないでください:
+
+```
+git commit -m "A brief description of this change which fixes #42"
+```
+
+### 9. 最新の Yii コードを upstream からあなたのブランチに pull する
+
+```
+git pull upstream master
+```
+
+このステップは、プルリクエストを出す前にあなたのブランチが最新のコードを持っていることを確実にするためのものです。
+もし何かマージ衝突がある場合は、ここでそれを修正してから再度変更をコミットすべきです。
+こうすると、Yii 開発チームがワンクリックであなたの変更をマージすることが確実に出来るようになります。
+
+### 10. 衝突をすべて解消したら、あなたのコードを github にプッシュする
+
+```
+git push -u origin 999-name-of-your-branch-goes-here
+```
+
+`-u` パラメータによって、あなたのブランチが今後は自動的に github のブランチに対してプッシュおよびプルを行うようになります。
+つまり、次回 `git push` とタイプしたときには、git は既にどこにプッシュすればよいか知っている、ということです。
+
+### 11. upstream に対してプルリクエスト ( [pull request](http://help.github.com/send-pull-requests/)) を発行する
+
+github 上のあなたのリポジトリに入って、"Pull Request" をクリックし、右側にあるブランチを選び、コメントボックスにもう少し詳細を記述します。
+プルリクエストを課題とリンクさせるために、プルコメントのどこかに `#999` という書式で課題番号を記載します。
+
+> 各プルリクエストは単一の課題を解決すべきものであることに注意してください。
+
+### 12. 誰かがあなたのコードをレビューする
+
+誰かがあなたのコードをレビューします。あなたは修正を求められるかも知れません。その場合は、ステップ #6 に戻ってください 
+(現在のプルリクエストが open である限りは、別の新しいプルリクエストをする必要はありません)。
+あなたのコードが受け入れられた場合は、コードはメインブランチにマージされて、次回の Yii のリリースの一部となります。
+受け入れられなくても、落胆しないでください。
+必要とする機能は人によってさまざまに異なります。
+Yii は全ての人に対して全てを提供することは出来ません。
+その場合でも、あなたのコードは github 上で公開され続けて、それを必要とする人々が参照することが出来ます。
+
+### 13. クリーンアップする
+
+あなたのコードが受け入れられるか却下されるかした後、あなたが作業してきたブランチをローカルレポジトリおよび `origin` から削除することが出来ます。
+
+```
+git checkout master
+git branch -D 999-name-of-your-branch-goes-here
+git push origin --delete 999-name-of-your-branch-goes-here
+```
+
+### 注意:
+
+退行 (regression) を早期に発見するために、github 上の Yii コードベースへのマージは、すべて [Travis CI](http://travis-ci.org) に取り上げられて、自動化されたテストにかけられます。
+コアチームとしては、このサービスに過大な負担をかけたくないために、
+以下の場合にはマージの説明に [`[ci skip]`](http://about.travis-ci.org/docs/user/how-to-skip-a-build/) が含まれるようにします。
+すなわち、プルリクエストが:
+
+* javascript、css または画像ファイルだけに影響する場合
+* ドキュメンテーションを更新する場合
+* 固定の文字列だけを修正する場合 (例えば、翻訳のアップデート)
+
+がそうです。
+
+このようにすることによって、そもそもテストによってカバーされない変更に対しては、最初から travis がテストランを開始しないようにしています。
+
+### コマンド概要 (上級の寄稿者向け)
+
+```
+git clone git@github.com:YOUR-GITHUB-USERNAME/yii2.git
+git remote add upstream git://github.com/yiisoft/yii2.git
+```
+
+```
+git fetch upstream
+git checkout upstream/master
+git checkout -b 999-name-of-your-branch-goes-here
+
+/* 魔法を使い、必要なら changelog を更新 */
+
+git add path/to/my/file.php
+git commit -m "A brief description of this change which fixes #42 goes here"
+git pull upstream master
+git push -u origin 999-name-of-your-branch-goes-here
+```
diff --git a/docs/internals-ja/report-an-issue.md b/docs/internals-ja/report-an-issue.md
new file mode 100644
index 0000000..e0fa2db
--- /dev/null
+++ b/docs/internals-ja/report-an-issue.md
@@ -0,0 +1,18 @@
+課題を報告する
+==============
+
+あなたが報告する課題(issue 問題)がより迅速に解決されるように、課題を作成するときには下記のガイドラインに従って下さい:
+
+* 以下の情報を提供して下さい: PHP と Yii のバージョン、オペレーティングシステムとウェブサーバのタイプ、ブラウザのタイプとバージョン;
+* 出来れば、**完全な**エラーのコールスタックを提供して下さい。問題を説明するスクリーンショットは大いに歓迎します。
+* 問題を再現する手順を記述して下さい。問題を再現するコードを提供してくださるならば、なお一層良いでしょう。
+
+**以下の場合は課題を報告しないでください**
+
+* Yii の何らかの機能の使い方に関する質問。この目的のためには、[フォーラム](http://www.yiiframework.com/forum/index.php/forum/42-general-discussions-for-yii-20/) または [チャットルーム](http://www.yiiframework.com/chat/) を使うべきです。
+* 問題がセキュリティに関するものである場合。セキュリティ問題を報告するときは、[開発者に直接コンタクト](http://www.yiiframework.com/security/) してください。
+
+**課題の重複を避ける**
+
+課題を報告する前に、[既存の課題](https://github.com/yiisoft/yii2/issues) を検索して、あなたが報告しようとしている課題が既に報告されていたり解決されていたりしないかを確かめ、重複した課題を報告しないようにしてください。
+さらにまた、Yii の最新のバージョンを使ってみて、それでもまだ問題が残っているかどうかを確かめてください。
diff --git a/docs/internals-ja/translation-workflow.md b/docs/internals-ja/translation-workflow.md
new file mode 100644
index 0000000..6954c7f
--- /dev/null
+++ b/docs/internals-ja/translation-workflow.md
@@ -0,0 +1,44 @@
+翻訳ワークフロー
+================
+
+Yii は国際的なアプリケーションと開発者にとって役に立つように、数多くの言語に翻訳されています。
+貢献が大いに歓迎される主な領域はドキュメンテーションとフレームワークメッセージです。
+
+フレームワークメッセージ
+------------------------
+
+フレームワークは二種類のメッセージを持っています: 一つは開発者向けの例外メッセージで、これは決して翻訳されません。
+もう一つはエンドユーザーが実際に目にする検証エラーのようなメッセージです。
+
+メッセージの翻訳を開始するためには:
+
+1. `framework/messages/config.php` をチェックして、あなたの言語が `languages` のリストに挙っていることを確認してください。
+   もし挙っていなければ、あなたの言語をそこに追加します(リストをアルファベット順に保つことを忘れないでください)。
+   言語コードの形式は、例えば `ru` や `zh-CN` のように、[IETF言語タグ](http://ja.wikipedia.org/wiki/IETF%E8%A8%80%E8%AA%9E%E3%82%BF%E3%82%B0) に従うべきです。
+2. `framework` に入って、`yii message/extract messages/config.php` を走らせます。
+3. `framework/messages/your_language/yii.php` のメッセージを翻訳します。ファイルは必ず UTF-8 エンコーディングを使って保存してください。
+4. [プルリクエスト](https://github.com/yiisoft/yii2/blob/master/docs/internals/git-workflow.md)をします。
+
+あなたの翻訳を最新状態に保つために、`yii message/extract messages/config.php` を再び走らせることが出来ます。
+これによって、変更のなかった箇所には触れることなく、自動的にメッセージを再抽出することが出来ます。
+
+翻訳ファイルの中で、配列の各要素は、メッセージ(キー)と翻訳(値)をあらわします。
+値が空白の場合は、メッセージは翻訳されないものと見なされます。
+翻訳が不要になったメッセージは、翻訳が一組の '@@' マークで囲まれます。
+メッセージ文字列は複数形書式とともに使うことが出来ます。
+詳細は [ガイドの国際化の章](../guide-ja/tutorial-i18n.md) を参照してください。
+
+ドキュメンテーション
+--------------------
+
+ドキュメンテーションの翻訳は `docs/<original>-<language>` の下に置きます。
+ここで `<original>` は、`guide` や `internals` などの元の文書の名前であり、`<language>` は文書が翻訳先の言語のコードです。
+例えば、ロシア語のガイドの翻訳は `docs/guide-ru` です。
+
+初期の仕事が完了した後は、最新の翻訳以後に変更された元の文書の箇所を取得するために、`build` ディレクトリにある専用のコマンドを使うことが出来ます:
+
+```
+php build translation "../docs/guide" "../docs/guide-ru" "Russian guide translation report" > report_guide_ru.html
+```
+
+このコマンドが composer に関して不平を言うようであれば、ソースのルートディレクトリで `composer install` を実行してください。
diff --git a/docs/internals-ja/versions.md b/docs/internals-ja/versions.md
new file mode 100644
index 0000000..83fdd5a
--- /dev/null
+++ b/docs/internals-ja/versions.md
@@ -0,0 +1,35 @@
+Yii バージョン番号規約
+======================
+
+リリース
+--------
+
+A.B.C
+
+A = Yii2 では常に 2。
+B = メジャーバージョン。アップグレードのための説明をともなう非後方互換な変更。
+C = 後方互換な変更と追加。
+
+リリース候補
+------------
+
+A.B.C-rc
+A.B.C-rc2
+
+リリース候補を出したいときに用います。RC 番号は、安定したリリースを得て、致命的なバグと後方互換性に関する問題報告が無くなるまで、増加します。
+
+アルファとベータ
+----------------
+
+A.B.C-alpha
+A.B.C-alpha2
+
+アルファは、著しいバグがおそらく存在するであろう、不安定なバージョンです。
+API はまだ固まっておらず、大きく変更されるかもしれません。
+`alpha2` などは、コードと API の全体的な安定性によって、リリースされたり、リリースされなかったりします。
+
+A.B.C-beta
+A.B.C-beta2
+
+ベータはアルファに比べていくらか安定して、バグや API の不安定性が少なくなったものです。
+まだ API が変更されることがあり得ますが、そのためにはかなりの理由がなければならないでしょう。
diff --git a/docs/internals/translation-teams.md b/docs/internals/translation-teams.md
index 120400a..1dd56c2 100644
--- a/docs/internals/translation-teams.md
+++ b/docs/internals/translation-teams.md
@@ -29,6 +29,11 @@ Italian
 
 - Lorenzo Milesi, [@maxxer](https://github.com/maxxer), maxxer@yetopen.it
 
+Japanese
+-------
+
+- Nobuo Kihara 木原伸夫, [@softark](https://github.com/softark), softark@gmail.com
+
 Russian
 -------
 
@@ -41,6 +46,7 @@ Spanish
 
 - Luciano Baraglia, [@lucianobaraglia](https://github.com/lucianobaraglia)
 - Marco Da Silva, [@markmarco16](https://github.com/markmarco16), markmarco16@gmail.com
+- Daniel Gómez Pan [@pana1990](https://github.com/pana1990), pana_1990@hotmail.com
 
 Ukrainian
 ---------
diff --git a/docs/internals/versions.md b/docs/internals/versions.md
index fe21fd7..0c56b89 100644
--- a/docs/internals/versions.md
+++ b/docs/internals/versions.md
@@ -4,17 +4,21 @@ Yii version numbering
 Releases
 --------
 
+```
 A.B.C
+```
 
-A = For Yii2 it's always 2.
-B = Major version. Non-BC changes with upgrade instructions.
-C = BC changes and additions.
+- A = For Yii2 it's always 2.
+- B = Major version. Non-BC changes with upgrade instructions.
+- C = BC changes and additions.
 
 Release candidates
 ------------------
 
+```
 A.B.C-rc
 A.B.C-rc2
+```
 
 This is when we want to do a release candidate. RC number increments till we're getting a stable release with no
 critical bugs and backwards incompatibility reports.
@@ -22,14 +26,18 @@ critical bugs and backwards incompatibility reports.
 Alphas and betas
 ----------------
 
+```
 A.B.C-alpha
 A.B.C-alpha2
+```
 
 Alphas are unstable versions where significant bugs may and probably do exist. API isn't fixed yet and may be changed
 significantly. `alpha2` etc. may or may not be released based on overall stability of code and API.
 
+```
 A.B.C-beta
 A.B.C-beta2
+```
 
 Beta is more or less stable with less bugs and API instability than alphas. There still could be changes in API but
 there should be a significant reason for it.
diff --git a/extensions/apidoc/CHANGELOG.md b/extensions/apidoc/CHANGELOG.md
index 25c9a78..2ba0d7e 100644
--- a/extensions/apidoc/CHANGELOG.md
+++ b/extensions/apidoc/CHANGELOG.md
@@ -1,12 +1,17 @@
 Yii Framework 2 apidoc extension Change Log
 ===========================================
 
-2.0.0 under development
+2.0.1 under development
 -----------------------
 
 - no changes in this release.
 
 
+2.0.0 October 12, 2014
+----------------------
+
+- Chg: Updated cebe/markdown to 1.0.0 which includes breaking changes in its internal API (cebe)
+
 2.0.0-rc September 27, 2014
 ---------------------------
 
diff --git a/extensions/apidoc/composer.json b/extensions/apidoc/composer.json
index 5bdced9..aea7245 100644
--- a/extensions/apidoc/composer.json
+++ b/extensions/apidoc/composer.json
@@ -25,7 +25,7 @@
         "phpdocumentor/reflection-docblock": ">2.0.1",
         "nikic/php-parser": "0.9.*",
         "cebe/js-search": "*",
-        "cebe/markdown": "dev-master as 0.9.0",
+        "cebe/markdown": "~1.0.0",
         "cebe/markdown-latex": "*"
     },
     "autoload": {
diff --git a/extensions/apidoc/helpers/ApiMarkdown.php b/extensions/apidoc/helpers/ApiMarkdown.php
index dde0b83..3038547 100644
--- a/extensions/apidoc/helpers/ApiMarkdown.php
+++ b/extensions/apidoc/helpers/ApiMarkdown.php
@@ -40,7 +40,7 @@ class ApiMarkdown extends GithubMarkdown
         if (isset($block['language'])) {
             $class = isset($block['language']) ? ' class="language-' . $block['language'] . '"' : '';
 
-            return "<pre><code$class>" . $this->highlight(implode("\n", $block['content']) . "\n", $block['language']) . '</code></pre>';
+            return "<pre><code$class>" . $this->highlight($block['content'] . "\n", $block['language']) . "</code></pre>\n";
         } else {
             return parent::renderCode($block);
         }
@@ -49,7 +49,7 @@ class ApiMarkdown extends GithubMarkdown
     public static function highlight($code, $language)
     {
         if ($language !== 'php') {
-            return htmlspecialchars($code, ENT_NOQUOTES, 'UTF-8');
+            return htmlspecialchars($code, ENT_NOQUOTES | ENT_SUBSTITUTE, 'UTF-8');
         }
 
         // TODO improve code highlighting
@@ -68,39 +68,32 @@ class ApiMarkdown extends GithubMarkdown
         return $text;
     }
 
-    protected function inlineMarkers()
-    {
-        return array_merge(parent::inlineMarkers(), [
-            '[[' => 'parseApiLinks',
-        ]);
-    }
-
     /**
      * @inheritDoc
      */
     protected function renderHeadline($block)
     {
-        $content = $this->parseInline($block['content']);
+        $content = $this->renderAbsy($block['content']);
         $hash = Inflector::slug(strip_tags($content));
         $hashLink = "<a href=\"#$hash\" name=\"$hash\" class=\"hashlink\">&para;</a>";
-        $tag = 'h' . $block['level'];
 
+        $tag = 'h' . $block['level'];
         return "<$tag>$content $hashLink</$tag>";
     }
 
     /**
      * @inheritdoc
      */
-    protected function parseLink($markdown)
+    protected function renderLink($block)
     {
-        list($result, $skip) = parent::parseLink($markdown);
+        $result = parent::renderLink($block);
 
         // add special syntax for linking to the guide
         $result = preg_replace_callback('/href="guide:([A-z0-9-.#]+)"/i', function($match) {
             return 'href="' . static::$renderer->generateGuideUrl($match[1]) . '"';
         }, $result, 1);
 
-        return [$result, $skip];
+        return $result;
     }
 
     /**
diff --git a/extensions/apidoc/helpers/ApiMarkdownLaTeX.php b/extensions/apidoc/helpers/ApiMarkdownLaTeX.php
index 8447de4..d5c3cdf 100644
--- a/extensions/apidoc/helpers/ApiMarkdownLaTeX.php
+++ b/extensions/apidoc/helpers/ApiMarkdownLaTeX.php
@@ -30,21 +30,11 @@ class ApiMarkdownLaTeX extends GithubMarkdown
     protected $renderingContext;
 
 
-    protected function inlineMarkers()
+    protected function renderApiLink($block)
     {
-        return array_merge(parent::inlineMarkers(), [
-            '[[' => 'parseApiLinksLatex',
-        ]);
-    }
-
-    protected function parseApiLinksLatex($text)
-    {
-        list($html, $offset) = $this->parseApiLinks($text);
-
         // TODO allow break also on camel case
-        $latex = '\texttt{'.str_replace(['\\textbackslash', '::'], ['\allowbreak{}\\textbackslash', '\allowbreak{}::\allowbreak{}'], $this->escapeLatex(strip_tags($html))).'}';
-
-        return [$latex, $offset];
+        $latex = '\texttt{'.str_replace(['\\textbackslash', '::'], ['\allowbreak{}\\textbackslash', '\allowbreak{}::\allowbreak{}'], $this->escapeLatex(strip_tags($block[1]))).'}';
+        return $latex;
     }
 
     /**
diff --git a/extensions/apidoc/helpers/ApiMarkdownTrait.php b/extensions/apidoc/helpers/ApiMarkdownTrait.php
index 39e7b47..994834c 100644
--- a/extensions/apidoc/helpers/ApiMarkdownTrait.php
+++ b/extensions/apidoc/helpers/ApiMarkdownTrait.php
@@ -18,6 +18,9 @@ use yii\apidoc\models\TypeDoc;
  */
 trait ApiMarkdownTrait
 {
+    /**
+     * @marker [[
+     */
     protected function parseApiLinks($text)
     {
         $context = $this->renderingContext;
@@ -45,7 +48,7 @@ trait ApiMarkdownTrait
                     ];
 
                     return [
-                        '<span style="background: #f00;">' . $typeName . '::' . $subjectName . '</span>',
+                        ['text', '<span style="background: #f00;">' . $typeName . '::' . $subjectName . '</span>'],
                         $offset
                     ];
                 } else {
@@ -58,7 +61,7 @@ trait ApiMarkdownTrait
                         }
 
                         return [
-                            static::$renderer->createSubjectLink($subject, $title),
+                            ['apiLink', static::$renderer->createSubjectLink($subject, $title)],
                             $offset
                         ];
                     } else {
@@ -68,14 +71,14 @@ trait ApiMarkdownTrait
                         ];
 
                         return [
-                            '<span style="background: #ff0;">' . $type->name . '</span><span style="background: #f00;">::' . $subjectName . '</span>',
+                            ['text', '<span style="background: #ff0;">' . $type->name . '</span><span style="background: #f00;">::' . $subjectName . '</span>'],
                             $offset
                         ];
                     }
                 }
             } elseif ($context !== null && ($subject = $context->findSubject($object)) !== null) {
                 return [
-                    static::$renderer->createSubjectLink($subject, $title),
+                    ['apiLink', static::$renderer->createSubjectLink($subject, $title)],
                     $offset
                 ];
             }
@@ -86,12 +89,12 @@ trait ApiMarkdownTrait
             }
             if (($type = static::$renderer->apiContext->getType($object)) !== null) {
                 return [
-                    static::$renderer->createTypeLink($type, null, $title),
+                    ['apiLink', static::$renderer->createTypeLink($type, null, $title)],
                     $offset
                 ];
             } elseif (strpos($typeLink = static::$renderer->createTypeLink($object, null, $title), '<a href') !== false) {
                 return [
-                    $typeLink,
+                    ['apiLink', $typeLink],
                     $offset
                 ];
             }
@@ -101,11 +104,16 @@ trait ApiMarkdownTrait
             ];
 
             return [
-                '<span style="background: #f00;">' . $object . '</span>',
+                ['text', '<span style="background: #f00;">' . $object . '</span>'],
                 $offset
             ];
         }
 
-        return ['[[', 2];
+        return [['text', '[['], 2];
+    }
+
+    protected function renderApiLink($block)
+    {
+        return $block[1];
     }
 }
diff --git a/extensions/apidoc/helpers/IndexFileAnalyzer.php b/extensions/apidoc/helpers/IndexFileAnalyzer.php
index bfa6e61..6a69535 100644
--- a/extensions/apidoc/helpers/IndexFileAnalyzer.php
+++ b/extensions/apidoc/helpers/IndexFileAnalyzer.php
@@ -28,13 +28,13 @@ class IndexFileAnalyzer extends Markdown
     protected function renderHeadline($block)
     {
         if ($this->_chapter === 0) {
-            $this->title = $block['content'];
+            $this->title = $this->renderAbsy($block['content']);
             $this->introduction = '';
             $this->_chapter++;
         } else {
             $this->_chapter++;
             $this->_chapters[$this->_chapter] = [
-                'headline' => $block['content'],
+                'headline' => $this->renderAbsy($block['content']),
                 'content' => [],
             ];
         }
@@ -44,7 +44,7 @@ class IndexFileAnalyzer extends Markdown
     protected function renderParagraph($block)
     {
         if ($this->_chapter < 1) {
-            $this->introduction .= implode("\n", $block['content']);
+            $this->introduction .= $this->renderAbsy($block['content']);
         }
         return parent::renderParagraph($block);
     }
@@ -52,13 +52,14 @@ class IndexFileAnalyzer extends Markdown
     protected function renderList($block)
     {
         if ($this->_chapter > 0) {
-            foreach ($block['items'] as $item => $itemLines) {
-                if (preg_match('~\[([^\]]+)\]\(([^\)]+)\)(.*)~', implode("\n", $itemLines), $matches)) {
-                    $this->_chapters[$this->_chapter]['content'][] = [
-                        'headline' => $matches[1],
-                        'file' => $matches[2],
-                        'teaser' => $matches[3],
-                    ];
+            foreach ($block['items'] as $item => $absyElements) {
+                foreach($absyElements as $element) {
+                    if ($element[0] === 'link') {
+                        $this->_chapters[$this->_chapter]['content'][] = [
+                            'headline' => $this->renderAbsy($element['text']),
+                            'file' => $element['url'],
+                        ];
+                    }
                 }
             }
         }
diff --git a/extensions/authclient/BaseClient.php b/extensions/authclient/BaseClient.php
index 95b0d30..b22d9bb 100644
--- a/extensions/authclient/BaseClient.php
+++ b/extensions/authclient/BaseClient.php
@@ -9,6 +9,7 @@ namespace yii\authclient;
 
 use Yii;
 use yii\base\Component;
+use yii\base\InvalidConfigException;
 use yii\base\NotSupportedException;
 use yii\helpers\Inflector;
 use yii\helpers\StringHelper;
@@ -50,7 +51,23 @@ abstract class BaseClient extends Component implements ClientInterface
     private $_userAttributes;
     /**
      * @var array map used to normalize user attributes fetched from external auth service
-     * in format: rawAttributeName => normalizedAttributeName
+     * in format: normalizedAttributeName => sourceSpecification
+     * 'sourceSpecification' can be:
+     * - string, raw attribute name
+     * - array, pass to raw attribute value
+     * - callable, PHP callback, which should accept array of raw attributes and return normalized value.
+     *
+     * For example:
+     *
+     * ```php
+     * 'normalizeUserAttributeMap' => [
+     *      'about' => 'bio',
+     *      'language' => ['languages', 0, 'name'],
+     *      'fullName' => function ($attributes) {
+     *          return $attributes['firstName'] . ' ' . $attributes['lastName'];
+     *      },
+     *  ],
+     * ```
      */
     private $_normalizeUserAttributeMap;
     /**
@@ -229,13 +246,37 @@ abstract class BaseClient extends Component implements ClientInterface
     /**
      * Normalize given user attributes according to [[normalizeUserAttributeMap]].
      * @param array $attributes raw attributes.
+     * @throws InvalidConfigException on incorrect normalize attribute map.
      * @return array normalized attributes.
      */
     protected function normalizeUserAttributes($attributes)
     {
         foreach ($this->getNormalizeUserAttributeMap() as $normalizedName => $actualName) {
-            if (array_key_exists($actualName, $attributes)) {
-                $attributes[$normalizedName] = $attributes[$actualName];
+            if (is_scalar($actualName)) {
+                if (array_key_exists($actualName, $attributes)) {
+                    $attributes[$normalizedName] = $attributes[$actualName];
+                }
+            } else {
+                if (is_callable($actualName)) {
+                    $attributes[$normalizedName] = call_user_func($actualName, $attributes);
+                } elseif (is_array($actualName)) {
+                    $haystack = $attributes;
+                    $searchKeys = $actualName;
+                    $isFound = true;
+                    while (($key = array_shift($searchKeys)) !== null) {
+                        if (is_array($haystack) && array_key_exists($key, $haystack)) {
+                            $haystack = $haystack[$key];
+                        } else {
+                            $isFound = false;
+                            break;
+                        }
+                    }
+                    if ($isFound) {
+                        $attributes[$normalizedName] = $haystack;
+                    }
+                } else {
+                    throw new InvalidConfigException('Invalid actual name "' . gettype($actualName) . '" specified at "' . get_class($this) . '::normalizeUserAttributeMap"');
+                }
             }
         }
 
diff --git a/extensions/authclient/CHANGELOG.md b/extensions/authclient/CHANGELOG.md
index 0025be7..65b978a 100644
--- a/extensions/authclient/CHANGELOG.md
+++ b/extensions/authclient/CHANGELOG.md
@@ -1,12 +1,18 @@
 Yii Framework 2 authclient extension Change Log
 ===============================================
 
-2.0.0 under development
+2.0.1 under development
 -----------------------
 
 - no changes in this release.
 
 
+2.0.0 October 12, 2014
+----------------------
+
+- Enh #5135: Added ability to operate nested and complex attributes via `yii\authclient\BaseClient::normalizeUserAttributeMap` (zinzinday, klimov-paul)
+
+
 2.0.0-rc September 27, 2014
 ---------------------------
 
diff --git a/extensions/authclient/OAuth1.php b/extensions/authclient/OAuth1.php
index 5fdb286..9330a9a 100644
--- a/extensions/authclient/OAuth1.php
+++ b/extensions/authclient/OAuth1.php
@@ -13,7 +13,7 @@ use Yii;
 /**
  * OAuth1 serves as a client for the OAuth 1/1.0a flow.
  *
- * In oder to acquire access token perform following sequence:
+ * In order to acquire access token perform following sequence:
  *
  * ~~~
  * use yii\authclient\OAuth1;
diff --git a/extensions/authclient/README.md b/extensions/authclient/README.md
index 8591327..946ca47 100644
--- a/extensions/authclient/README.md
+++ b/extensions/authclient/README.md
@@ -32,7 +32,7 @@ It covers OpenID, OAuth1 and OAuth2 protocols.
 
 You need to setup auth client collection application component:
 
-```
+```php
 'components' => [
     'authClientCollection' => [
         'class' => 'yii\authclient\Collection',
@@ -53,7 +53,7 @@ You need to setup auth client collection application component:
 
 Then you need to add [[yii\authclient\AuthAction]] to some of your web controllers:
 
-```
+```php
 class SiteController extends Controller
 {
     public function actions()
@@ -76,7 +76,7 @@ class SiteController extends Controller
 
 You may use [[yii\authclient\widgets\AuthChoice]] to compose auth client selection:
 
-```
+```php
 <?= yii\authclient\widgets\AuthChoice::widget([
      'baseAuthUrl' => ['site/auth']
 ]) ?>
@@ -132,7 +132,8 @@ it may be not enough to access full external API functionality. This method is m
 fetch the external user account data.
 To use API calls, you need to setup [[yii\authclient\BaseOAuth::apiBaseUrl]] according to the
 API specification. Then you can call [[yii\authclient\BaseOAuth::api()]] method:
-```
+
+```php
 use yii\authclient\OAuth2;
 
 $client = new OAuth2;
@@ -155,7 +156,6 @@ Following predefined auth clients are available:
  - [[yii\authclient\clients\GoogleOAuth]] - [Google](https://www.google.com/) OAuth2 client
  - [[yii\authclient\clients\GoogleOpenId]] - [Google](https://www.google.com/) OpenID client
  - [[yii\authclient\clients\LinkedIn]] - [LinkedIn](http://www.linkedin.com/) OAuth2 client
- - [[yii\authclient\clients\LinkedIn]] - [LinkedIn](http://www.linkedin.com/) OAuth2 client
  - [[yii\authclient\clients\Live]] - [Microsoft Live](http://live.com/) OAuth2 client
  - [[yii\authclient\clients\Twitter]] - [Twitter](https://twitter.com/) OAuth1 client
  - [[yii\authclient\clients\VKontakte]] - [VKontakte](http://vk.com/) OAuth2 client
@@ -165,6 +165,33 @@ Following predefined auth clients are available:
 Please, refer to the particular client class documentation for its actual usage.
 
 
+Customize auth clients
+----------------------
+
+All predefined auth clients have a default configuration like `authUrl`, `apiBaseUrl` and so on.
+However in some cases you may want to change these values in order to achieve some specific results.
+For example: using `yii\authclient\clients\Facebook` you may want the auth window appear in popup display
+mode, which is setup via `authUrl`:
+
+```php
+'components' => [
+    'authClientCollection' => [
+        'class' => 'yii\authclient\Collection',
+        'clients' => [
+            'facebook' => [
+                'class' => 'yii\authclient\clients\Facebook',
+                // Facebook login form will be displayed in 'popup' mode
+                'authUrl' => 'https://www.facebook.com/dialog/oauth?display=popup',
+                'clientId' => 'facebook_client_id',
+                'clientSecret' => 'facebook_client_secret',
+            ],
+        ],
+    ]
+    ...
+]
+```
+
+
 Creating your own auth clients
 ------------------------------
 
@@ -179,7 +206,7 @@ for your extension:
 At this stage you can determine auth client default name, title and view options, declaring
 corresponding methods:
 
-```
+```php
 use yii\authclient\OAuth2;
 
 class MyAuthClient extends OAuth2
@@ -212,7 +239,7 @@ All you need is specify auth URL, by redeclaring "authUrl" field.
 You may also setup default required and/or optional attributes.
 For example:
 
-```
+```php
 use yii\authclient\OpenId;
 
 class MyAuthClient extends OpenId
@@ -240,7 +267,7 @@ You will need to specify:
 
 For example:
 
-```
+```php
 use yii\authclient\OAuth2;
 
 class MyAuthClient extends OAuth2
@@ -274,7 +301,7 @@ You will need to specify:
 
 For example:
 
-```
+```php
 use yii\authclient\OAuth1;
 
 class MyAuthClient extends OAuth1
diff --git a/extensions/bootstrap/BootstrapThemeAsset.php b/extensions/bootstrap/BootstrapThemeAsset.php
new file mode 100644
index 0000000..60747a9
--- /dev/null
+++ b/extensions/bootstrap/BootstrapThemeAsset.php
@@ -0,0 +1,27 @@
+<?php
+/**
+ * @link http://www.yiiframework.com/
+ * @copyright Copyright (c) 2008 Yii Software LLC
+ * @license http://www.yiiframework.com/license/
+ */
+
+namespace yii\bootstrap;
+
+use yii\web\AssetBundle;
+
+/**
+ * Asset bundle for the Twitter bootstrap default theme.
+ *
+ * @author Alexander Makarov <sam@rmcreative.ru>
+ * @since 2.0
+ */
+class BootstrapThemeAsset extends AssetBundle
+{
+    public $sourcePath = '@bower/bootstrap/dist';
+    public $css = [
+        'css/bootstrap-theme.css',
+    ];
+    public $depends = [
+        'yii\bootstrap\BootstrapAsset',
+    ];
+}
diff --git a/extensions/bootstrap/CHANGELOG.md b/extensions/bootstrap/CHANGELOG.md
index 4c99697..c6eb8c7 100644
--- a/extensions/bootstrap/CHANGELOG.md
+++ b/extensions/bootstrap/CHANGELOG.md
@@ -1,9 +1,15 @@
 Yii Framework 2 bootstrap extension Change Log
 ==============================================
 
-2.0.0 under development
+2.0.1 under development
 -----------------------
 
+- no changes in this release.
+
+
+2.0.0 October 12, 2014
+----------------------
+
 - Bug #5323: Nested dropdown does not work for `yii\bootstrap\DropDown` (aryraditya)
 - Bug #5336: `yii\bootstrap\DropDown` should register bootstrap plugin asset (zelenin) 
 - Chg #5231: Collapse `items` property uses `label` element instead of array key for headers (nkovacs)
diff --git a/extensions/bootstrap/Collapse.php b/extensions/bootstrap/Collapse.php
index a71c23d..80b9755 100644
--- a/extensions/bootstrap/Collapse.php
+++ b/extensions/bootstrap/Collapse.php
@@ -86,6 +86,7 @@ class Collapse extends Widget
 
     /**
      * Renders collapsible items as specified on [[items]].
+     * @throws InvalidConfigException if label isn't specified
      * @return string the rendering result
      */
     public function renderItems()
diff --git a/extensions/codeception/CHANGELOG.md b/extensions/codeception/CHANGELOG.md
index 6952760..679a645 100644
--- a/extensions/codeception/CHANGELOG.md
+++ b/extensions/codeception/CHANGELOG.md
@@ -1,12 +1,18 @@
 Yii Framework 2 Codeception extension Change Log
 ================================================
 
-2.0.0 under development
+2.0.1 under development
 -----------------------
 
 - no changes in this release.
 
 
+2.0.0 October 12, 2014
+----------------------
+
+- no changes in this release.
+
+
 2.0.0-rc September 27, 2014
 ---------------------------
 
diff --git a/extensions/composer/CHANGELOG.md b/extensions/composer/CHANGELOG.md
index 11577cd..1571ac2 100644
--- a/extensions/composer/CHANGELOG.md
+++ b/extensions/composer/CHANGELOG.md
@@ -1,12 +1,18 @@
 Yii Framework 2 composer extension Change Log
 =============================================
 
-2.0.0 under development
+2.0.1 under development
 -----------------------
 
 - no changes in this release.
 
 
+2.0.0 October 12, 2014
+----------------------
+
+- no changes in this release.
+
+
 2.0.0-rc September 27, 2014
 ---------------------------
 
diff --git a/extensions/debug/CHANGELOG.md b/extensions/debug/CHANGELOG.md
index 08660c6..9e89b70 100644
--- a/extensions/debug/CHANGELOG.md
+++ b/extensions/debug/CHANGELOG.md
@@ -1,9 +1,15 @@
 Yii Framework 2 debug extension Change Log
 ==========================================
 
-2.0.0 under development
+2.0.1 under development
 -----------------------
 
+- Enh #5600: Allow configuring debug panels in `yii\debug\Module::panels` as panel class name strings (qiangxue)
+
+
+2.0.0 October 12, 2014
+----------------------
+
 - no changes in this release.
 
 
diff --git a/extensions/debug/Module.php b/extensions/debug/Module.php
index d884d68..709d2d3 100644
--- a/extensions/debug/Module.php
+++ b/extensions/debug/Module.php
@@ -101,6 +101,9 @@ class Module extends \yii\base\Module implements BootstrapInterface
         }
 
         foreach ($this->panels as $id => $config) {
+            if (is_string($config)) {
+                $config = ['class' => $config];
+            }
             $config['module'] = $this;
             $config['id'] = $id;
             $this->panels[$id] = Yii::createObject($config);
diff --git a/extensions/debug/models/search/Mail.php b/extensions/debug/models/search/Mail.php
index 50d2c2c..f30076a 100644
--- a/extensions/debug/models/search/Mail.php
+++ b/extensions/debug/models/search/Mail.php
@@ -60,6 +60,9 @@ class Mail extends Base
     public $file;
 
 
+    /**
+     * @inheritdoc
+     */
     public function rules()
     {
         return [
diff --git a/extensions/debug/panels/AssetPanel.php b/extensions/debug/panels/AssetPanel.php
index 8a3a230..a6ca524 100644
--- a/extensions/debug/panels/AssetPanel.php
+++ b/extensions/debug/panels/AssetPanel.php
@@ -8,9 +8,7 @@
 namespace yii\debug\panels;
 
 use Yii;
-use yii\base\Event;
 use yii\helpers\Html;
-use yii\web\Application;
 use yii\debug\Panel;
 use yii\web\AssetBundle;
 use yii\web\AssetManager;
@@ -63,39 +61,6 @@ class AssetPanel extends Panel
             }
         }
         return $data;
-
-        $cssCount = 0;
-        $jsCount = 0;
-        foreach ($bundles as $bundle) {
-
-            $cssCount += count($bundle->css);
-            $jsCount += count($bundle->js);
-
-            array_walk($bundle->css, function(&$file, $key, $data) {
-                $file = Html::a($file, $data->baseUrl . '/' . $file, ['target' => '_blank']);
-            }, $bundle);
-
-            array_walk($bundle->js, function(&$file, $key, $data) {
-                $file = Html::a($file, $data->baseUrl . '/' . $file, ['target' => '_blank']);
-            }, $bundle);
-
-            array_walk($bundle->depends, function(&$depend) {
-                $depend = Html::a($depend, '#' . $depend);
-            });
-
-            $this->formatOptions($bundle->publishOptions);
-            $this->formatOptions($bundle->jsOptions);
-            $this->formatOptions($bundle->cssOptions);
-        }
-
-        $data = [
-            'totalBundles' => count($this->bundles),
-            'totalCssFiles' => $this->cssCount,
-            'totalJsFiles' => $this->jsCount,
-            'bundles' => $this->bundles,
-        ];
-        
-        return $data;
     }
 
     /**
diff --git a/extensions/debug/panels/DbPanel.php b/extensions/debug/panels/DbPanel.php
index 37bde4e..a654463 100644
--- a/extensions/debug/panels/DbPanel.php
+++ b/extensions/debug/panels/DbPanel.php
@@ -48,6 +48,14 @@ class DbPanel extends Panel
     }
 
     /**
+     * @return string short name of the panel, which will be use in summary.
+     */
+    public function getSummaryName()
+    {
+        return 'DB';
+    }
+
+    /**
      * @inheritdoc
      */
     public function getSummary()
diff --git a/extensions/debug/views/default/panels/db/detail.php b/extensions/debug/views/default/panels/db/detail.php
index 4bd839f..709291e 100644
--- a/extensions/debug/views/default/panels/db/detail.php
+++ b/extensions/debug/views/default/panels/db/detail.php
@@ -7,7 +7,7 @@ use yii\helpers\Html;
 use yii\grid\GridView;
 
 ?>
-<h1>Database Queries</h1>
+<h1><?= $panel->getName(); ?> Queries</h1>
 
 <?php
 
diff --git a/extensions/debug/views/default/panels/db/summary.php b/extensions/debug/views/default/panels/db/summary.php
index 454f299..91b5ec7 100644
--- a/extensions/debug/views/default/panels/db/summary.php
+++ b/extensions/debug/views/default/panels/db/summary.php
@@ -6,7 +6,7 @@
 <?php if ($queryCount): ?>
 <div class="yii-debug-toolbar-block">
     <a href="<?= $panel->getUrl() ?>" title="Executed <?= $queryCount ?> database queries which took <?= $queryTime ?>.">
-        DB <span class="label label-info"><?= $queryCount ?></span> <span class="label"><?= $queryTime ?></span>
+        <?= $panel->getSummaryName() ?> <span class="label label-info"><?= $queryCount ?></span> <span class="label"><?= $queryTime ?></span>
     </a>
 </div>
 <?php endif; ?>
diff --git a/extensions/elasticsearch/CHANGELOG.md b/extensions/elasticsearch/CHANGELOG.md
index d23fcf2..c672a67 100644
--- a/extensions/elasticsearch/CHANGELOG.md
+++ b/extensions/elasticsearch/CHANGELOG.md
@@ -1,9 +1,15 @@
 Yii Framework 2 elasticsearch extension Change Log
 ==================================================
 
-2.0.0 under development
+2.0.1 under development
 -----------------------
 
+- no changes in this release.
+
+
+2.0.0 October 12, 2014
+----------------------
+
 - Enh #3381: Added ActiveRecord::arrayAttributes() to define attributes that should be treated as array when retrieved via `fields` (cebe)
 
 
diff --git a/extensions/elasticsearch/Command.php b/extensions/elasticsearch/Command.php
index 0780773..f0771e8 100644
--- a/extensions/elasticsearch/Command.php
+++ b/extensions/elasticsearch/Command.php
@@ -9,7 +9,6 @@ namespace yii\elasticsearch;
 
 use yii\base\Component;
 use yii\base\InvalidCallException;
-use yii\base\InvalidParamException;
 use yii\helpers\Json;
 
 /**
diff --git a/extensions/elasticsearch/DebugPanel.php b/extensions/elasticsearch/DebugPanel.php
index 039a049..9be7aca 100644
--- a/extensions/elasticsearch/DebugPanel.php
+++ b/extensions/elasticsearch/DebugPanel.php
@@ -182,6 +182,9 @@ HTML;
         return $this->_timings = $timings;
     }
 
+    /**
+     * @inheritdoc
+     */
     public function save()
     {
         $target = $this->module->logTarget;
diff --git a/extensions/elasticsearch/Query.php b/extensions/elasticsearch/Query.php
index 57f141a..365e72c 100644
--- a/extensions/elasticsearch/Query.php
+++ b/extensions/elasticsearch/Query.php
@@ -9,7 +9,6 @@ namespace yii\elasticsearch;
 
 use Yii;
 use yii\base\Component;
-use yii\base\NotSupportedException;
 use yii\db\QueryInterface;
 use yii\db\QueryTrait;
 
diff --git a/extensions/faker/CHANGELOG.md b/extensions/faker/CHANGELOG.md
index 8063829..e6f0809 100644
--- a/extensions/faker/CHANGELOG.md
+++ b/extensions/faker/CHANGELOG.md
@@ -1,12 +1,18 @@
 Yii Framework 2 faker extension Change Log
 ==============================================
 
-2.0.0 under development
+2.0.1 under development
 -----------------------
 
 - no changes in this release.
 
 
+2.0.0 October 12, 2014
+----------------------
+
+- no changes in this release.
+
+
 2.0.0-rc September 27, 2014
 ---------------------------
 
diff --git a/extensions/gii/CHANGELOG.md b/extensions/gii/CHANGELOG.md
index f5f57a8..d990a33 100644
--- a/extensions/gii/CHANGELOG.md
+++ b/extensions/gii/CHANGELOG.md
@@ -1,10 +1,18 @@
 Yii Framework 2 gii extension Change Log
 ========================================
 
-2.0.0 under development
+2.0.1 under development
 -----------------------
 
-- no changes in this release.
+- Enh #5613: Added `--overwrite` option to Gii console command to support overwriting all files (motin, qiangxue)
+- Bug: Gii console command help information does not contain global options (qiangxue)
+
+
+2.0.0 October 12, 2014
+----------------------
+
+- Bug #5408: Gii console command incorrectly reports errors when there is actually no error (qiangxue)
+- Bug: Fixed table name regression caused by changed introduced in #4971 (samdark)
 
 
 2.0.0-rc September 27, 2014
diff --git a/extensions/gii/Generator.php b/extensions/gii/Generator.php
index 90d33ea..27ae8f2 100644
--- a/extensions/gii/Generator.php
+++ b/extensions/gii/Generator.php
@@ -262,7 +262,7 @@ abstract class Generator extends Model
      * @param array $answers
      * @param string $results this parameter receives a value from this method indicating the log messages
      * generated while saving the code files.
-     * @return boolean whether there is any error while saving the code files.
+     * @return boolean whether files are successfully saved without any error.
      */
     public function save($files, $answers, &$results)
     {
@@ -285,7 +285,7 @@ abstract class Generator extends Model
         $lines[] = "done!\n";
         $results = implode("\n", $lines);
 
-        return $hasError;
+        return !$hasError;
     }
 
     /**
diff --git a/extensions/gii/console/GenerateAction.php b/extensions/gii/console/GenerateAction.php
index 35567d8..4aa6ffc 100644
--- a/extensions/gii/console/GenerateAction.php
+++ b/extensions/gii/console/GenerateAction.php
@@ -56,7 +56,7 @@ class GenerateAction extends \yii\base\Action
             return;
         }
         echo "The following files will be generated:\n";
-        $skipAll = $this->controller->interactive ? null : true;
+        $skipAll = $this->controller->interactive ? null : !$this->controller->overwrite;
         $answers = [];
         foreach ($files as $file) {
             $path = $file->getRelativePath();
diff --git a/extensions/gii/console/GenerateController.php b/extensions/gii/console/GenerateController.php
index 604a4a0..3592f68 100644
--- a/extensions/gii/console/GenerateController.php
+++ b/extensions/gii/console/GenerateController.php
@@ -32,9 +32,11 @@ class GenerateController extends Controller
      */
     public $module;
     /**
-     * @var boolean whether to generate all files and overwrite existing files
+     * @var boolean whether to overwrite all existing code files when in non-interactive mode.
+     * Defaults to false, meaning none of the existing code files will be overwritten.
+     * This option is used only when `--interactive=0`.
      */
-    public $generate = false;
+    public $overwrite = false;
     /**
      * @var array a list of the available code generators
      */
@@ -119,16 +121,19 @@ class GenerateController extends Controller
      */
     public function options($id)
     {
-        if (isset($this->generators[$id])) {
-            $attributes = $this->generators[$id]->attributes;
-            unset($attributes['templates']);
-            return array_merge(
-                parent::options($id),
-                array_keys($attributes)
-            );
-        } else {
-            return parent::options($id);
+        $options = parent::options($id);
+        $options[] = 'overwrite';
+
+        if (!isset($this->generators[$id])) {
+            return $options;
         }
+
+        $attributes = $this->generators[$id]->attributes;
+        unset($attributes['templates']);
+        return array_merge(
+            $options,
+            array_keys($attributes)
+        );
     }
 
     /**
@@ -179,7 +184,7 @@ class GenerateController extends Controller
         unset($attributes['templates']);
         $hints = $action->generator->hints();
 
-        $options = [];
+        $options = parent::getActionOptionsHelp($action);
         foreach ($attributes as $name => $value) {
             $type = gettype($value);
             $options[$name] = [
diff --git a/extensions/gii/controllers/DefaultController.php b/extensions/gii/controllers/DefaultController.php
index 752bfab..f1da8f7 100644
--- a/extensions/gii/controllers/DefaultController.php
+++ b/extensions/gii/controllers/DefaultController.php
@@ -44,7 +44,7 @@ class DefaultController extends Controller
                 $generator->saveStickyAttributes();
                 $files = $generator->generate();
                 if (isset($_POST['generate']) && !empty($_POST['answers'])) {
-                    $params['hasError'] = $generator->save($files, (array) $_POST['answers'], $results);
+                    $params['hasError'] = !$generator->save($files, (array) $_POST['answers'], $results);
                     $params['results'] = $results;
                 } else {
                     $params['files'] = $files;
diff --git a/extensions/gii/generators/model/Generator.php b/extensions/gii/generators/model/Generator.php
index 276e7ef..93cf0c8 100644
--- a/extensions/gii/generators/model/Generator.php
+++ b/extensions/gii/generators/model/Generator.php
@@ -354,7 +354,7 @@ class Generator extends \yii\gii\Generator
             $viaLink = $this->generateRelationLink([$table->primaryKey[0] => $fks[$table->primaryKey[0]][1]]);
             $relationName = $this->generateRelationName($relations, $className0, $db->getTableSchema($table0), $table->primaryKey[1], true);
             $relations[$className0][$relationName] = [
-                "return \$this->hasMany($className1::className(), $link)->viaTable('{" . $this->generateTableName($table->name) . "}', $viaLink);",
+                "return \$this->hasMany($className1::className(), $link)->viaTable('" . $this->generateTableName($table->name) . "', $viaLink);",
                 $className1,
                 true,
             ];
@@ -363,7 +363,7 @@ class Generator extends \yii\gii\Generator
             $viaLink = $this->generateRelationLink([$table->primaryKey[1] => $fks[$table->primaryKey[1]][1]]);
             $relationName = $this->generateRelationName($relations, $className1, $db->getTableSchema($table1), $table->primaryKey[0], true);
             $relations[$className1][$relationName] = [
-                "return \$this->hasMany($className0::className(), $link)->viaTable('{" . $this->generateTableName($table->name) . "}', $viaLink);",
+                "return \$this->hasMany($className0::className(), $link)->viaTable('" . $this->generateTableName($table->name) . "', $viaLink);",
                 $className0,
                 true,
             ];
@@ -479,7 +479,7 @@ class Generator extends \yii\gii\Generator
         if ($this->isReservedKeyword($this->modelClass)) {
             $this->addError('modelClass', 'Class name cannot be a reserved PHP keyword.');
         }
-        if ((empty($this->tableName) || substr_compare($this->tableName, '*', -1)) && $this->modelClass == '') {
+        if ((empty($this->tableName) || substr_compare($this->tableName, '*', -1, 1)) && $this->modelClass == '') {
             $this->addError('modelClass', 'Model Class cannot be blank if table name does not end with asterisk.');
         }
     }
@@ -489,7 +489,7 @@ class Generator extends \yii\gii\Generator
      */
     public function validateTableName()
     {
-        if (strpos($this->tableName, '*') !== false && substr_compare($this->tableName, '*', -1)) {
+        if (strpos($this->tableName, '*') !== false && substr_compare($this->tableName, '*', -1, 1)) {
             $this->addError('tableName', 'Asterisk is only allowed as the last character.');
 
             return;
diff --git a/extensions/imagine/CHANGELOG.md b/extensions/imagine/CHANGELOG.md
index dd4e57a..c13516a 100644
--- a/extensions/imagine/CHANGELOG.md
+++ b/extensions/imagine/CHANGELOG.md
@@ -1,12 +1,18 @@
 Yii Framework 2 imagine extension Change Log
 ================================================
 
-2.0.0 under development
+2.0.1 under development
 -----------------------
 
 - no changes in this release.
 
 
+2.0.0 October 12, 2014
+----------------------
+
+- no changes in this release.
+
+
 2.0.0-rc September 27, 2014
 ---------------------------
 
diff --git a/extensions/jui/CHANGELOG.md b/extensions/jui/CHANGELOG.md
index 7cb3c95..27ba8fa 100644
--- a/extensions/jui/CHANGELOG.md
+++ b/extensions/jui/CHANGELOG.md
@@ -1,12 +1,18 @@
 Yii Framework 2 jui extension Change Log
 ========================================
 
-2.0.0 under development
+2.0.1 under development
 -----------------------
 
 - no changes in this release.
 
 
+2.0.0 October 12, 2014
+----------------------
+
+- no changes in this release.
+
+
 2.0.0-rc September 27, 2014
 ---------------------------
 
diff --git a/extensions/jui/DatePicker.php b/extensions/jui/DatePicker.php
index 77f8981..7766588 100644
--- a/extensions/jui/DatePicker.php
+++ b/extensions/jui/DatePicker.php
@@ -38,6 +38,14 @@ use yii\helpers\Json;
  * ]);
  * ```
  *
+ * Note that empty values like empty strings and 0 will result in a date displayed as `1970-01-01`.
+ * So to make sure empty values result in an empty text field in the datepicker you need to add a
+ * validation filter in your model that sets the value to `null` in case when no date has been entered:
+ *
+ * ```php
+ * [['from_date'], 'default', 'value' => null],
+ * ```
+ *
  * @see http://api.jqueryui.com/datepicker/
  * @author Alexander Kochetov <creocoder@gmail.com>
  * @author Carsten Brandt <mail@cebe.cc>
diff --git a/extensions/mongodb/CHANGELOG.md b/extensions/mongodb/CHANGELOG.md
index b54f53d..5319376 100644
--- a/extensions/mongodb/CHANGELOG.md
+++ b/extensions/mongodb/CHANGELOG.md
@@ -1,10 +1,17 @@
 Yii Framework 2 mongodb extension Change Log
 ============================================
 
-2.0.0 under development
+2.0.1 under development
 -----------------------
 
-- no changes in this release.
+- Enh #3855: Added debug toolbar panel for MongoDB (klimov-paul)
+
+
+2.0.0 October 12, 2014
+----------------------
+
+- Bug #5303: Fixed `yii\mongodb\Collection` unable to fetch default database name from DSN with parameters (klimov-paul)
+- Bug #5411: Fixed `yii\mongodb\ActiveRecord` unable to fetch 'hasMany' referred by array of `\MongoId` (klimov-paul)
 
 
 2.0.0-rc September 27, 2014
diff --git a/extensions/mongodb/Connection.php b/extensions/mongodb/Connection.php
index d97ce67..27578ed 100644
--- a/extensions/mongodb/Connection.php
+++ b/extensions/mongodb/Connection.php
@@ -148,7 +148,7 @@ class Connection extends Component
         if ($this->defaultDatabaseName === null) {
             if (isset($this->options['db'])) {
                 $this->defaultDatabaseName = $this->options['db'];
-            } elseif (preg_match('/^mongodb:\\/\\/.+\\/(.+)$/s', $this->dsn, $matches)) {
+            } elseif (preg_match('/^mongodb:\\/\\/.+\\/([^?&]+)/s', $this->dsn, $matches)) {
                 $this->defaultDatabaseName = $matches[1];
             } else {
                 throw new InvalidConfigException("Unable to determine default database name from dsn.");
diff --git a/extensions/mongodb/README.md b/extensions/mongodb/README.md
index 4ee7a70..19171b5 100644
--- a/extensions/mongodb/README.md
+++ b/extensions/mongodb/README.md
@@ -288,6 +288,32 @@ return [
   is very basic and definitely requires adjustments.
 
 
+Using the MongoDB DebugPanel
+----------------------------
+
+The yii2 MongoDB extensions provides a debug panel that can be integrated with the yii debug module
+and shows the executed MongoDB queries.
+
+Add the following to you application config to enable it (if you already have the debug module
+enabled, it is sufficient to just add the panels configuration):
+
+```php
+    // ...
+    'bootstrap' => ['debug'],
+    'modules' => [
+        'debug' => [
+            'class' => 'yii\\debug\\Module',
+            'panels' => [
+                'mongodb' => [
+                    'class' => 'yii\\mongodb\\debug\\MongoDbPanel',
+                ],
+            ],
+        ],
+    ],
+    // ...
+```
+
+
 Using Migrations
 ----------------
 
diff --git a/extensions/mongodb/debug/MongoDbPanel.php b/extensions/mongodb/debug/MongoDbPanel.php
new file mode 100644
index 0000000..e8b5e2e
--- /dev/null
+++ b/extensions/mongodb/debug/MongoDbPanel.php
@@ -0,0 +1,51 @@
+<?php
+/**
+ * @link http://www.yiiframework.com/
+ * @copyright Copyright (c) 2008 Yii Software LLC
+ * @license http://www.yiiframework.com/license/
+ */
+
+namespace yii\mongodb\debug;
+
+use yii\debug\panels\DbPanel;
+use yii\log\Logger;
+
+/**
+ * MongoDbPanel panel that collects and displays MongoDB queries performed.
+ *
+ * @author Klimov Paul <klimov@zfort.com>
+ * @since 2.0.1
+ */
+class MongoDbPanel extends DbPanel
+{
+    /**
+     * @inheritdoc
+     */
+    public function getName()
+    {
+        return 'MongoDB';
+    }
+
+    /**
+     * @inheritdoc
+     */
+    public function getSummaryName()
+    {
+        return 'MongoDB';
+    }
+
+    /**
+     * Returns all profile logs of the current request for this panel.
+     * @return array
+     */
+    public function getProfileLogs()
+    {
+        $target = $this->module->logTarget;
+
+        return $target->filterMessages($target->messages, Logger::LEVEL_PROFILE, [
+            'yii\mongodb\Collection::*',
+            'yii\mongodb\Query::*',
+            'yii\mongodb\Database::*',
+        ]);
+    }
+} 
\ No newline at end of file
diff --git a/extensions/redis/ActiveQuery.php b/extensions/redis/ActiveQuery.php
index 3a6248a..702ce2d 100644
--- a/extensions/redis/ActiveQuery.php
+++ b/extensions/redis/ActiveQuery.php
@@ -305,6 +305,7 @@ class ActiveQuery extends Component implements ActiveQueryInterface
      * If this parameter is not given, the `db` application component will be used.
      * @param string $type the type of the script to generate
      * @param string $columnName
+     * @throws NotSupportedException
      * @return array|bool|null|string
      */
     protected function executeScript($db, $type, $columnName = null)
diff --git a/extensions/redis/CHANGELOG.md b/extensions/redis/CHANGELOG.md
index 0a40e56..8a16cd3 100644
--- a/extensions/redis/CHANGELOG.md
+++ b/extensions/redis/CHANGELOG.md
@@ -1,12 +1,18 @@
 Yii Framework 2 redis extension Change Log
 ==========================================
 
-2.0.0 under development
+2.0.1 under development
 -----------------------
 
 - no changes in this release.
 
 
+2.0.0 October 12, 2014
+----------------------
+
+- no changes in this release.
+
+
 2.0.0-rc September 27, 2014
 ---------------------------
 
diff --git a/extensions/smarty/CHANGELOG.md b/extensions/smarty/CHANGELOG.md
index 42e8898..3c8a701 100644
--- a/extensions/smarty/CHANGELOG.md
+++ b/extensions/smarty/CHANGELOG.md
@@ -1,12 +1,18 @@
 Yii Framework 2 smarty extension Change Log
 ===========================================
 
-2.0.0 under development
+2.0.1 under development
 -----------------------
 
 - no changes in this release.
 
 
+2.0.0 October 12, 2014
+----------------------
+
+- no changes in this release.
+
+
 2.0.0-rc September 27, 2014
 ---------------------------
 
diff --git a/extensions/sphinx/CHANGELOG.md b/extensions/sphinx/CHANGELOG.md
index 9f19298..8dca261 100644
--- a/extensions/sphinx/CHANGELOG.md
+++ b/extensions/sphinx/CHANGELOG.md
@@ -1,12 +1,18 @@
 Yii Framework 2 sphinx extension Change Log
 ===========================================
 
-2.0.0 under development
+2.0.1 under development
 -----------------------
 
 - no changes in this release.
 
 
+2.0.0 October 12, 2014
+----------------------
+
+- Enh #5211: `yii\sphinx\Query` now supports 'HAVING' (klimov-paul)
+
+
 2.0.0-rc September 27, 2014
 ---------------------------
 
diff --git a/extensions/sphinx/Query.php b/extensions/sphinx/Query.php
index 397bb02..7e5fcbc 100644
--- a/extensions/sphinx/Query.php
+++ b/extensions/sphinx/Query.php
@@ -8,11 +8,9 @@
 namespace yii\sphinx;
 
 use Yii;
-use yii\base\Component;
 use yii\base\InvalidCallException;
+use yii\base\NotSupportedException;
 use yii\db\Expression;
-use yii\db\QueryInterface;
-use yii\db\QueryTrait;
 
 /**
  * Query represents a SELECT SQL statement.
@@ -46,31 +44,8 @@ use yii\db\QueryTrait;
  * @author Paul Klimov <klimov.paul@gmail.com>
  * @since 2.0
  */
-class Query extends Component implements QueryInterface
+class Query extends \yii\db\Query
 {
-    use QueryTrait;
-
-    /**
-     * @var array the columns being selected. For example, `['id', 'group_id']`.
-     * This is used to construct the SELECT clause in a SQL statement. If not set, if means selecting all columns.
-     * @see select()
-     */
-    public $select;
-    /**
-     * @var string additional option that should be appended to the 'SELECT' keyword.
-     */
-    public $selectOption;
-    /**
-     * @var boolean whether to select distinct rows of data only. If this is set true,
-     * the SELECT clause would be changed to SELECT DISTINCT.
-     */
-    public $distinct;
-    /**
-     * @var array the index(es) to be selected from. For example, `['idx_user', 'idx_user_delta']`.
-     * This is used to construct the FROM clause in a SQL statement.
-     * @see from()
-     */
-    public $from;
     /**
      * @var string|Expression text, which should be searched in fulltext mode.
      * This value will be composed into MATCH operator inside the WHERE clause.
@@ -80,11 +55,6 @@ class Query extends Component implements QueryInterface
      */
     public $match;
     /**
-     * @var array how to group the query results. For example, `['company', 'department']`.
-     * This is used to construct the GROUP BY clause in a SQL statement.
-     */
-    public $groupBy;
-    /**
      * @var string WITHIN GROUP ORDER BY clause. This is a Sphinx specific extension
      * that lets you control how the best row within a group will to be selected.
      * The possible value matches the [[orderBy]] one.
@@ -97,11 +67,6 @@ class Query extends Component implements QueryInterface
      */
     public $options;
     /**
-     * @var array list of query parameter values indexed by parameter placeholders.
-     * For example, `[':name' => 'Dan', ':age' => 31]`.
-     */
-    public $params = [];
-    /**
      * @var callable PHP callback, which should be used to fetch source data for the snippets.
      * Such callback will receive array of query result rows as an argument and must return the
      * array of snippet source strings in the order, which match one of incoming rows.
@@ -165,55 +130,33 @@ class Query extends Component implements QueryInterface
 
     /**
      * Creates a Sphinx command that can be used to execute this query.
-     * @param Connection $connection the Sphinx connection used to generate the SQL statement.
+     * @param Connection $db the Sphinx connection used to generate the SQL statement.
      * If this parameter is not given, the `sphinx` application component will be used.
      * @return Command the created Sphinx command instance.
      */
-    public function createCommand($connection = null)
+    public function createCommand($db = null)
     {
-        $this->setConnection($connection);
-        $connection = $this->getConnection();
-        list ($sql, $params) = $connection->getQueryBuilder()->build($this);
+        $this->setConnection($db);
+        $db = $this->getConnection();
+        list ($sql, $params) = $db->getQueryBuilder()->build($this);
 
-        return $connection->createCommand($sql, $params);
+        return $db->createCommand($sql, $params);
     }
 
     /**
-     * Executes the query and returns all results as an array.
-     * @param Connection $db the Sphinx connection used to generate the SQL statement.
-     * If this parameter is not given, the `sphinx` application component will be used.
-     * @return array the query results. If the query results in nothing, an empty array will be returned.
+     * @inheritdoc
      */
-    public function all($db = null)
+    public function populate($rows)
     {
-        $rows = $this->createCommand($db)->queryAll();
-        $rows = $this->fillUpSnippets($rows);
-        if ($this->indexBy === null) {
-            return $rows;
-        }
-        $result = [];
-        foreach ($rows as $row) {
-            if (is_string($this->indexBy)) {
-                $key = $row[$this->indexBy];
-            } else {
-                $key = call_user_func($this->indexBy, $row);
-            }
-            $result[$key] = $row;
-        }
-
-        return $result;
+        return parent::populate($this->fillUpSnippets($rows));
     }
 
     /**
-     * Executes the query and returns a single row of result.
-     * @param Connection $db the Sphinx connection used to generate the SQL statement.
-     * If this parameter is not given, the `sphinx` application component will be used.
-     * @return array|boolean the first row (in terms of an array) of the query result. False is returned if the query
-     * results in nothing.
+     * @inheritdoc
      */
     public function one($db = null)
     {
-        $row = $this->createCommand($db)->queryOne();
+        $row = parent::one($db);
         if ($row !== false) {
             list ($row) = $this->fillUpSnippets([$row]);
         }
@@ -222,168 +165,6 @@ class Query extends Component implements QueryInterface
     }
 
     /**
-     * Returns the query result as a scalar value.
-     * The value returned will be the first column in the first row of the query results.
-     * @param Connection $db the Sphinx connection used to generate the SQL statement.
-     * If this parameter is not given, the `sphinx` application component will be used.
-     * @return string|boolean the value of the first column in the first row of the query result.
-     * False is returned if the query result is empty.
-     */
-    public function scalar($db = null)
-    {
-        return $this->createCommand($db)->queryScalar();
-    }
-
-    /**
-     * Executes the query and returns the first column of the result.
-     * @param Connection $db the Sphinx connection used to generate the SQL statement.
-     * If this parameter is not given, the `sphinx` application component will be used.
-     * @return array the first column of the query result. An empty array is returned if the query results in nothing.
-     */
-    public function column($db = null)
-    {
-        return $this->createCommand($db)->queryColumn();
-    }
-
-    /**
-     * Returns the number of records.
-     * @param string $q the COUNT expression. Defaults to '*'.
-     * Make sure you properly quote column names in the expression.
-     * @param Connection $db the Sphinx connection used to generate the SQL statement.
-     * If this parameter is not given, the `sphinx` application component will be used.
-     * @return integer number of records
-     */
-    public function count($q = '*', $db = null)
-    {
-        $this->select = ["COUNT($q)"];
-
-        return $this->createCommand($db)->queryScalar();
-    }
-
-    /**
-     * Returns the sum of the specified column values.
-     * @param string $q the column name or expression.
-     * Make sure you properly quote column names in the expression.
-     * @param Connection $db the Sphinx connection used to generate the SQL statement.
-     * If this parameter is not given, the `sphinx` application component will be used.
-     * @return integer the sum of the specified column values
-     */
-    public function sum($q, $db = null)
-    {
-        $this->select = ["SUM($q)"];
-
-        return $this->createCommand($db)->queryScalar();
-    }
-
-    /**
-     * Returns the average of the specified column values.
-     * @param string $q the column name or expression.
-     * Make sure you properly quote column names in the expression.
-     * @param Connection $db the Sphinx connection used to generate the SQL statement.
-     * If this parameter is not given, the `sphinx` application component will be used.
-     * @return integer the average of the specified column values.
-     */
-    public function average($q, $db = null)
-    {
-        $this->select = ["AVG($q)"];
-
-        return $this->createCommand($db)->queryScalar();
-    }
-
-    /**
-     * Returns the minimum of the specified column values.
-     * @param string $q the column name or expression.
-     * Make sure you properly quote column names in the expression.
-     * @param Connection $db the Sphinx connection used to generate the SQL statement.
-     * If this parameter is not given, the `sphinx` application component will be used.
-     * @return integer the minimum of the specified column values.
-     */
-    public function min($q, $db = null)
-    {
-        $this->select = ["MIN($q)"];
-
-        return $this->createCommand($db)->queryScalar();
-    }
-
-    /**
-     * Returns the maximum of the specified column values.
-     * @param string $q the column name or expression.
-     * Make sure you properly quote column names in the expression.
-     * @param Connection $db the Sphinx connection used to generate the SQL statement.
-     * If this parameter is not given, the `sphinx` application component will be used.
-     * @return integer the maximum of the specified column values.
-     */
-    public function max($q, $db = null)
-    {
-        $this->select = ["MAX($q)"];
-
-        return $this->createCommand($db)->queryScalar();
-    }
-
-    /**
-     * Returns a value indicating whether the query result contains any row of data.
-     * @param Connection $db the Sphinx connection used to generate the SQL statement.
-     * If this parameter is not given, the `sphinx` application component will be used.
-     * @return boolean whether the query result contains any row of data.
-     */
-    public function exists($db = null)
-    {
-        $this->select = [new Expression('1')];
-
-        return $this->scalar($db) !== false;
-    }
-
-    /**
-     * Sets the SELECT part of the query.
-     * @param string|array $columns the columns to be selected.
-     * Columns can be specified in either a string (e.g. "id, name") or an array (e.g. ['id', 'name']).
-     * The method will automatically quote the column names unless a column contains some parenthesis
-     * (which means the column contains a Sphinx expression).
-     * @param string $option additional option that should be appended to the 'SELECT' keyword.
-     * @return static the query object itself
-     */
-    public function select($columns, $option = null)
-    {
-        if (!is_array($columns)) {
-            $columns = preg_split('/\s*,\s*/', trim($columns), -1, PREG_SPLIT_NO_EMPTY);
-        }
-        $this->select = $columns;
-        $this->selectOption = $option;
-
-        return $this;
-    }
-
-    /**
-     * Sets the value indicating whether to SELECT DISTINCT or not.
-     * @param boolean $value whether to SELECT DISTINCT or not.
-     * @return static the query object itself
-     */
-    public function distinct($value = true)
-    {
-        $this->distinct = $value;
-
-        return $this;
-    }
-
-    /**
-     * Sets the FROM part of the query.
-     * @param string|array $tables the table(s) to be selected from. This can be either a string (e.g. `'idx_user'`)
-     * or an array (e.g. `['idx_user', 'idx_user_delta']`) specifying one or several index names.
-     * The method will automatically quote the table names unless it contains some parenthesis
-     * (which means the table is given as a sub-query or Sphinx expression).
-     * @return static the query object itself
-     */
-    public function from($tables)
-    {
-        if (!is_array($tables)) {
-            $tables = preg_split('/\s*,\s*/', trim($tables), -1, PREG_SPLIT_NO_EMPTY);
-        }
-        $this->from = $tables;
-
-        return $this;
-    }
-
-    /**
      * Sets the fulltext query text. This text will be composed into
      * MATCH operator inside the WHERE clause.
      * Note: this value will be processed by [[Connection::escapeMatchValue()]],
@@ -405,210 +186,35 @@ class Query extends Component implements QueryInterface
     }
 
     /**
-     * Sets the WHERE part of the query.
-     *
-     * The method requires a $condition parameter, and optionally a $params parameter
-     * specifying the values to be bound to the query.
-     *
-     * The $condition parameter should be either a string (e.g. 'id=1') or an array.
-     * If the latter, it must be in one of the following two formats:
-     *
-     * - hash format: `['column1' => value1, 'column2' => value2, ...]`
-     * - operator format: `[operator, operand1, operand2, ...]`
-     *
-     * A condition in hash format represents the following SQL expression in general:
-     * `column1=value1 AND column2=value2 AND ...`. In case when a value is an array or a Query object,
-     * an `IN` expression will be generated. And if a value is null, `IS NULL` will be used
-     * in the generated expression. Below are some examples:
-     *
-     * - `['type' => 1, 'status' => 2]` generates `(type = 1) AND (status = 2)`.
-     * - `['id' => [1, 2, 3], 'status' => 2]` generates `(id IN (1, 2, 3)) AND (status = 2)`.
-     * - `['status' => null] generates `status IS NULL`.
-     * - `['id' => $query]` generates `id IN (...sub-query...)`
-     *
-     * A condition in operator format generates the SQL expression according to the specified operator, which
-     * can be one of the followings:
-     *
-     * - `and`: the operands should be concatenated together using `AND`. For example,
-     *   `['and', 'id=1', 'id=2']` will generate `id=1 AND id=2`. If an operand is an array,
-     *   it will be converted into a string using the rules described here. For example,
-     *   `['and', 'type=1', ['or', 'id=1', 'id=2']]` will generate `type=1 AND (id=1 OR id=2)`.
-     *   The method will NOT do any quoting or escaping.
-     *
-     * - `or`: similar to the `and` operator except that the operands are concatenated using `OR`.
-     *
-     * - `between`: operand 1 should be the column name, and operand 2 and 3 should be the
-     *   starting and ending values of the range that the column is in.
-     *   For example, `['between', 'id', 1, 10]` will generate `id BETWEEN 1 AND 10`.
-     *
-     * - `not between`: similar to `between` except the `BETWEEN` is replaced with `NOT BETWEEN`
-     *   in the generated condition.
-     *
-     * - `in`: operand 1 should be a column or DB expression with parenthesis. Operand 2 can be an array
-     *   or a Query object. If the former, the array represents the range of the values that the column
-     *   or DB expression should be in. If the latter, a sub-query will be generated to represent the range.
-     *   For example, `['in', 'id', [1, 2, 3]]` will generate `id IN (1, 2, 3)`;
-     *   `['in', 'id', (new Query)->select('id')->from('user'))]` will generate
-     *   `id IN (SELECT id FROM user)`. The method will properly quote the column name and escape values in the range.
-     *   The `in` operator also supports composite columns. In this case, operand 1 should be an array of the columns,
-     *   while operand 2 should be an array of arrays or a `Query` object representing the range of the columns.
-     *
-     * - `not in`: similar to the `in` operator except that `IN` is replaced with `NOT IN` in the generated condition.
-     *
-     * - `like`: operand 1 should be a column or DB expression, and operand 2 be a string or an array representing
-     *   the values that the column or DB expression should be like.
-     *   For example, `['like', 'name', '%tester%']` will generate `name LIKE '%tester%'`.
-     *   When the value range is given as an array, multiple `LIKE` predicates will be generated and concatenated
-     *   using `AND`. For example, `['like', 'name', ['%test%', '%sample%']]` will generate
-     *   `name LIKE '%test%' AND name LIKE '%sample%'`.
-     *   The method will properly quote the column name and escape values in the range.
-     *   Sometimes, you may want to add the percentage characters to the matching value by yourself, you may supply
-     *   a third operand `false` to do so. For example, `['like', 'name', '%tester', false]` will generate `name LIKE '%tester'`.
-     *
-     * - `or like`: similar to the `like` operator except that `OR` is used to concatenate the `LIKE`
-     *   predicates when operand 2 is an array.
-     *
-     * - `not like`: similar to the `like` operator except that `LIKE` is replaced with `NOT LIKE`
-     *   in the generated condition.
-     *
-     * - `or not like`: similar to the `not like` operator except that `OR` is used to concatenate
-     *   the `NOT LIKE` predicates.
-     *
-     * @param string|array $condition the conditions that should be put in the WHERE part.
-     * @param array $params the parameters (name => value) to be bound to the query.
-     * @return static the query object itself
-     * @see andWhere()
-     * @see orWhere()
+     * @inheritdoc
      */
-    public function where($condition, $params = [])
+    public function join($type, $table, $on = '', $params = [])
     {
-        $this->where = $condition;
-        $this->addParams($params);
-        return $this;
+        throw new NotSupportedException('"' . __METHOD__ . '" is not supported.');
     }
 
     /**
-     * Adds an additional WHERE condition to the existing one.
-     * The new condition and the existing one will be joined using the 'AND' operator.
-     * @param string|array $condition the new WHERE condition. Please refer to [[where()]]
-     * on how to specify this parameter.
-     * @param array $params the parameters (name => value) to be bound to the query.
-     * @return static the query object itself
-     * @see where()
-     * @see orWhere()
+     * @inheritdoc
      */
-    public function andWhere($condition, $params = [])
+    public function innerJoin($table, $on = '', $params = [])
     {
-        if ($this->where === null) {
-            $this->where = $condition;
-        } else {
-            $this->where = ['and', $this->where, $condition];
-        }
-        $this->addParams($params);
-        return $this;
-    }
-
-    /**
-     * Adds an additional WHERE condition to the existing one.
-     * The new condition and the existing one will be joined using the 'OR' operator.
-     * @param string|array $condition the new WHERE condition. Please refer to [[where()]]
-     * on how to specify this parameter.
-     * @param array $params the parameters (name => value) to be bound to the query.
-     * @return static the query object itself
-     * @see where()
-     * @see andWhere()
-     */
-    public function orWhere($condition, $params = [])
-    {
-        if ($this->where === null) {
-            $this->where = $condition;
-        } else {
-            $this->where = ['or', $this->where, $condition];
-        }
-        $this->addParams($params);
-        return $this;
-    }
-
-    /**
-     * Sets the GROUP BY part of the query.
-     * @param string|array $columns the columns to be grouped by.
-     * Columns can be specified in either a string (e.g. "id, name") or an array (e.g. ['id', 'name']).
-     * The method will automatically quote the column names unless a column contains some parenthesis
-     * (which means the column contains a DB expression).
-     * @return static the query object itself
-     * @see addGroupBy()
-     */
-    public function groupBy($columns)
-    {
-        if (!is_array($columns)) {
-            $columns = preg_split('/\s*,\s*/', trim($columns), -1, PREG_SPLIT_NO_EMPTY);
-        }
-        $this->groupBy = $columns;
-
-        return $this;
-    }
-
-    /**
-     * Adds additional group-by columns to the existing ones.
-     * @param string|array $columns additional columns to be grouped by.
-     * Columns can be specified in either a string (e.g. "id, name") or an array (e.g. ['id', 'name']).
-     * The method will automatically quote the column names unless a column contains some parenthesis
-     * (which means the column contains a DB expression).
-     * @return static the query object itself
-     * @see groupBy()
-     */
-    public function addGroupBy($columns)
-    {
-        if (!is_array($columns)) {
-            $columns = preg_split('/\s*,\s*/', trim($columns), -1, PREG_SPLIT_NO_EMPTY);
-        }
-        if ($this->groupBy === null) {
-            $this->groupBy = $columns;
-        } else {
-            $this->groupBy = array_merge($this->groupBy, $columns);
-        }
-
-        return $this;
+        throw new NotSupportedException('"' . __METHOD__ . '" is not supported.');
     }
 
     /**
-     * Sets the parameters to be bound to the query.
-     * @param array $params list of query parameter values indexed by parameter placeholders.
-     * For example, `[':name' => 'Dan', ':age' => 31]`.
-     * @return static the query object itself
-     * @see addParams()
+     * @inheritdoc
      */
-    public function params($params)
+    public function leftJoin($table, $on = '', $params = [])
     {
-        $this->params = $params;
-
-        return $this;
+        throw new NotSupportedException('"' . __METHOD__ . '" is not supported.');
     }
 
     /**
-     * Adds additional parameters to be bound to the query.
-     * @param array $params list of query parameter values indexed by parameter placeholders.
-     * For example, `[':name' => 'Dan', ':age' => 31]`.
-     * @return static the query object itself
-     * @see params()
+     * @inheritdoc
      */
-    public function addParams($params)
+    public function rightJoin($table, $on = '', $params = [])
     {
-        if (!empty($params)) {
-            if (empty($this->params)) {
-                $this->params = $params;
-            } else {
-                foreach ($params as $name => $value) {
-                    if (is_integer($name)) {
-                        $this->params[] = $value;
-                    } else {
-                        $this->params[$name] = $value;
-                    }
-                }
-            }
-        }
-
-        return $this;
+        throw new NotSupportedException('"' . __METHOD__ . '" is not supported.');
     }
 
     /**
@@ -759,4 +365,36 @@ class Query extends Component implements QueryInterface
             ->callSnippets($from, $source, $match, $this->snippetOptions)
             ->queryColumn();
     }
+
+    /**
+     * Creates a new Query object and copies its property values from an existing one.
+     * The properties being copies are the ones to be used by query builders.
+     * @param Query $from the source query object
+     * @return Query the new Query object
+     */
+    public static function create($from)
+    {
+        return new self([
+            'where' => $from->where,
+            'limit' => $from->limit,
+            'offset' => $from->offset,
+            'orderBy' => $from->orderBy,
+            'indexBy' => $from->indexBy,
+            'select' => $from->select,
+            'selectOption' => $from->selectOption,
+            'distinct' => $from->distinct,
+            'from' => $from->from,
+            'groupBy' => $from->groupBy,
+            'join' => $from->join,
+            'having' => $from->having,
+            'union' => $from->union,
+            'params' => $from->params,
+            // Sphinx specifics :
+            'options' => $from->options,
+            'within' => $from->within,
+            'match' => $from->match,
+            'snippetCallback' => $from->snippetCallback,
+            'snippetOptions' => $from->snippetOptions,
+        ]);
+    }
 }
diff --git a/extensions/sphinx/QueryBuilder.php b/extensions/sphinx/QueryBuilder.php
index 00c1023..e5e9cf4 100644
--- a/extensions/sphinx/QueryBuilder.php
+++ b/extensions/sphinx/QueryBuilder.php
@@ -8,6 +8,7 @@
 namespace yii\sphinx;
 
 use yii\base\InvalidParamException;
+use yii\base\NotSupportedException;
 use yii\base\Object;
 use yii\db\Exception;
 use yii\db\Expression;
@@ -38,6 +39,24 @@ class QueryBuilder extends Object
      */
     public $separator = " ";
 
+    /**
+     * @var array map of query condition to builder methods.
+     * These methods are used by [[buildCondition]] to build SQL conditions from array syntax.
+     */
+    protected $conditionBuilders = [
+        'AND' => 'buildAndCondition',
+        'OR' => 'buildAndCondition',
+        'BETWEEN' => 'buildBetweenCondition',
+        'NOT BETWEEN' => 'buildBetweenCondition',
+        'IN' => 'buildInCondition',
+        'NOT IN' => 'buildInCondition',
+        'LIKE' => 'buildLikeCondition',
+        'NOT LIKE' => 'buildLikeCondition',
+        'OR LIKE' => 'buildLikeCondition',
+        'OR NOT LIKE' => 'buildLikeCondition',
+        'NOT' => 'buildNotCondition',
+    ];
+
 
     /**
      * Constructor.
@@ -55,12 +74,19 @@ class QueryBuilder extends Object
      * @param Query $query the [[Query]] object from which the SQL statement will be generated
      * @param array $params the parameters to be bound to the generated SQL statement. These parameters will
      * be included in the result with the additional parameters generated during the query building process.
+     * @throws NotSupportedException if query contains 'join' option.
      * @return array the generated SQL statement (the first array element) and the corresponding
      * parameters to be bound to the SQL statement (the second array element). The parameters returned
      * include those provided in `$params`.
      */
     public function build($query, $params = [])
     {
+        $query = $query->prepare($this);
+
+        if (!empty($query->join)) {
+            throw new NotSupportedException('Build of "' . get_class($query) . '::join" is not supported.');
+        }
+
         $params = empty($params) ? $query->params : array_merge($params, $query->params);
 
         $from = $query->from;
@@ -76,6 +102,7 @@ class QueryBuilder extends Object
             $this->buildWhere($query->from, $query->where, $params, $query->match),
             $this->buildGroupBy($query->groupBy),
             $this->buildWithin($query->within),
+            $this->buildHaving($query->from, $query->having, $params),
             $this->buildOrderBy($query->orderBy),
             $this->buildLimit($query->limit, $query->offset),
             $this->buildOption($query->options, $params),
@@ -501,15 +528,7 @@ class QueryBuilder extends Object
         if (empty($condition)) {
             return '';
         }
-        $indexSchemas = [];
-        if (!empty($indexes)) {
-            foreach ($indexes as $indexName) {
-                $index = $this->db->getIndexSchema($indexName);
-                if ($index !== null) {
-                    $indexSchemas[] = $index;
-                }
-            }
-        }
+        $indexSchemas = $this->getIndexSchemas($indexes);
         $where = $this->buildCondition($indexSchemas, $condition, $params);
 
         return $where === '' ? '' : 'WHERE ' . $where;
@@ -525,6 +544,24 @@ class QueryBuilder extends Object
     }
 
     /**
+     * @param string[] $indexes list of index names, which affected by query
+     * @param string|array $condition
+     * @param array $params the binding parameters to be populated
+     * @return string the HAVING clause built from [[Query::$having]].
+     */
+    public function buildHaving($indexes, $condition, &$params)
+    {
+        if (empty($condition)) {
+            return '';
+        }
+
+        $indexSchemas = $this->getIndexSchemas($indexes);
+        $having = $this->buildCondition($indexSchemas, $condition, $params);
+
+        return $having === '' ? '' : 'HAVING ' . $having;
+    }
+
+    /**
      * Builds the ORDER BY and LIMIT/OFFSET clauses and appends them to the given SQL.
      * @param string $sql the existing SQL (without ORDER BY/LIMIT/OFFSET)
      * @param array $orderBy the order by columns. See [[Query::orderBy]] for more details on how to specify this parameter.
@@ -623,19 +660,6 @@ class QueryBuilder extends Object
      */
     public function buildCondition($indexes, $condition, &$params)
     {
-        static $builders = [
-            'AND' => 'buildAndCondition',
-            'OR' => 'buildAndCondition',
-            'BETWEEN' => 'buildBetweenCondition',
-            'NOT BETWEEN' => 'buildBetweenCondition',
-            'IN' => 'buildInCondition',
-            'NOT IN' => 'buildInCondition',
-            'LIKE' => 'buildLikeCondition',
-            'NOT LIKE' => 'buildLikeCondition',
-            'OR LIKE' => 'buildLikeCondition',
-            'OR NOT LIKE' => 'buildLikeCondition',
-        ];
-
         if (!is_array($condition)) {
             return (string) $condition;
         } elseif (empty($condition)) {
@@ -643,15 +667,14 @@ class QueryBuilder extends Object
         }
         if (isset($condition[0])) { // operator format: operator, operand 1, operand 2, ...
             $operator = strtoupper($condition[0]);
-            if (isset($builders[$operator])) {
-                $method = $builders[$operator];
+            if (isset($this->conditionBuilders[$operator])) {
+                $method = $this->conditionBuilders[$operator];
             } else {
                 $method = 'buildSimpleCondition';
             }
             array_shift($condition);
             return $this->$method($indexes, $operator, $condition, $params);
         } else { // hash format: 'column1' => 'value1', 'column2' => 'value2', ...
-
             return $this->buildHashCondition($indexes, $condition, $params);
         }
     }
@@ -714,6 +737,32 @@ class QueryBuilder extends Object
     }
 
     /**
+     * Inverts an SQL expressions with `NOT` operator.
+     * @param IndexSchema[] $indexes list of indexes, which affected by query
+     * @param string $operator the operator to use for connecting the given operands
+     * @param array $operands the SQL expressions to connect.
+     * @param array $params the binding parameters to be populated
+     * @return string the generated SQL expression
+     * @throws InvalidParamException if wrong number of operands have been given.
+     */
+    public function buildNotCondition($indexes, $operator, $operands, &$params)
+    {
+        if (count($operands) != 1) {
+            throw new InvalidParamException("Operator '$operator' requires exactly one operand.");
+        }
+
+        $operand = reset($operands);
+        if (is_array($operand)) {
+            $operand = $this->buildCondition($indexes, $operand, $params);
+        }
+        if ($operand === '') {
+            return '';
+        }
+
+        return "$operator ($operand)";
+    }
+
+    /**
      * Creates an SQL expressions with the `BETWEEN` operator.
      * @param IndexSchema[] $indexes list of indexes, which affected by query
      * @param string $operator the operator to use (e.g. `BETWEEN` or `NOT BETWEEN`)
@@ -1042,4 +1091,22 @@ class QueryBuilder extends Object
             return "$column $operator $phName";
         }
     }
+
+    /**
+     * @param array $indexes index names.
+     * @return IndexSchema[] index schemas.
+     */
+    private function getIndexSchemas($indexes)
+    {
+        $indexSchemas = [];
+        if (!empty($indexes)) {
+            foreach ($indexes as $indexName) {
+                $index = $this->db->getIndexSchema($indexName);
+                if ($index !== null) {
+                    $indexSchemas[] = $index;
+                }
+            }
+        }
+        return $indexSchemas;
+    }
 }
diff --git a/extensions/sphinx/README.md b/extensions/sphinx/README.md
index 4480723..6bbefca 100644
--- a/extensions/sphinx/README.md
+++ b/extensions/sphinx/README.md
@@ -5,6 +5,13 @@ This extension adds [Sphinx](http://sphinxsearch.com/docs) full text search engi
 It supports all Sphinx features including [Runtime Indexes](http://sphinxsearch.com/docs/current.html#rt-indexes).
 
 
+Requirements
+------------
+
+At least Sphinx version 2.0 is required. However, in order to use all extension features, Sphinx version 2.2 or
+higher is required.
+
+
 Installation
 ------------
 
diff --git a/extensions/sphinx/gii/model/Generator.php b/extensions/sphinx/gii/model/Generator.php
index 8994ccf..37b8f12 100644
--- a/extensions/sphinx/gii/model/Generator.php
+++ b/extensions/sphinx/gii/model/Generator.php
@@ -267,7 +267,7 @@ class Generator extends \yii\gii\Generator
         if ($this->isReservedKeyword($this->modelClass)) {
             $this->addError('modelClass', 'Class name cannot be a reserved PHP keyword.');
         }
-        if ((empty($this->indexName) || substr_compare($this->indexName, '*', -1)) && $this->modelClass == '') {
+        if ((empty($this->indexName) || substr_compare($this->indexName, '*', -1, 1)) && $this->modelClass == '') {
             $this->addError('modelClass', 'Model Class cannot be blank if table name does not end with asterisk.');
         }
     }
@@ -277,7 +277,7 @@ class Generator extends \yii\gii\Generator
      */
     public function validateIndexName()
     {
-        if (strpos($this->indexName, '*') !== false && substr_compare($this->indexName, '*', -1)) {
+        if (strpos($this->indexName, '*') !== false && substr_compare($this->indexName, '*', -1, 1)) {
             $this->addError('indexName', 'Asterisk is only allowed as the last character.');
 
             return;
diff --git a/extensions/swiftmailer/CHANGELOG.md b/extensions/swiftmailer/CHANGELOG.md
index 07501d9..f6c6569 100644
--- a/extensions/swiftmailer/CHANGELOG.md
+++ b/extensions/swiftmailer/CHANGELOG.md
@@ -1,12 +1,18 @@
 Yii Framework 2 swiftmailer extension Change Log
 ================================================
 
-2.0.0 under development
+2.0.1 under development
 -----------------------
 
 - no changes in this release.
 
 
+2.0.0 October 12, 2014
+----------------------
+
+- no changes in this release.
+
+
 2.0.0-rc September 27, 2014
 ---------------------------
 
diff --git a/extensions/twig/CHANGELOG.md b/extensions/twig/CHANGELOG.md
index 83cb156..8cb954c 100644
--- a/extensions/twig/CHANGELOG.md
+++ b/extensions/twig/CHANGELOG.md
@@ -1,9 +1,15 @@
 Yii Framework 2 twig extension Change Log
 =========================================
 
-2.0.0 under development
+2.0.1 under development
 -----------------------
 
+- no changes in this release.
+
+
+2.0.0 October 12, 2014
+----------------------
+
 - Bug #5308: object function calls in templates were passing arguments in a wrong way (genichyar, samdark)
 
 
diff --git a/extensions/twig/README.md b/extensions/twig/README.md
index cf311a9..36d4141 100644
--- a/extensions/twig/README.md
+++ b/extensions/twig/README.md
@@ -14,8 +14,11 @@ return [
                 'twig' => [
                     'class' => 'yii\twig\ViewRenderer',
                     // set cachePath to false in order to disable template caching
-                    //'cachePath' => '@runtime/Twig/cache',
-                    //'options' => [], /*  Array of twig options */
+                    'cachePath' => '@runtime/Twig/cache',
+                    // Array of twig options:
+                    'options' => [
+                        'auto_reload' => true,
+                    ],
                     // ... see ViewRenderer for more options
                 ],
             ],
diff --git a/extensions/twig/ViewRendererStaticClassProxy.php b/extensions/twig/ViewRendererStaticClassProxy.php
index 6ec612e..facca46 100644
--- a/extensions/twig/ViewRendererStaticClassProxy.php
+++ b/extensions/twig/ViewRendererStaticClassProxy.php
@@ -18,11 +18,18 @@ class ViewRendererStaticClassProxy
     private $_staticClassName;
 
 
+    /**
+     * @param string $staticClassName
+     */
     public function __construct($staticClassName)
     {
         $this->_staticClassName = $staticClassName;
     }
 
+    /**
+     * @param string $property
+     * @return mixed
+     */
     public function __get($property)
     {
         $class = new \ReflectionClass($this->_staticClassName);
@@ -30,6 +37,11 @@ class ViewRendererStaticClassProxy
         return $class->getStaticPropertyValue($property);
     }
 
+    /**
+     * @param string $property
+     * @param mixed $value
+     * @return mixed
+     */
     public function __set($property, $value)
     {
         $class = new \ReflectionClass($this->_staticClassName);
@@ -38,6 +50,11 @@ class ViewRendererStaticClassProxy
         return $value;
     }
 
+    /**
+     * @param string $method
+     * @param array $arguments
+     * @return mixed
+     */
     public function __call($method, $arguments)
     {
         return call_user_func_array([$this->_staticClassName, $method], $arguments);
diff --git a/framework/BaseYii.php b/framework/BaseYii.php
index 27acded..a4d24ec 100644
--- a/framework/BaseYii.php
+++ b/framework/BaseYii.php
@@ -93,7 +93,7 @@ class BaseYii
      */
     public static function getVersion()
     {
-        return '2.0.0-dev';
+        return '2.0.1-dev';
     }
 
     /**
diff --git a/framework/CHANGELOG.md b/framework/CHANGELOG.md
index 564e9d3..e8335bb 100644
--- a/framework/CHANGELOG.md
+++ b/framework/CHANGELOG.md
@@ -1,20 +1,41 @@
 Yii Framework 2 Change Log
 ==========================
 
-2.0.0 under development
+2.0.1 under development
 -----------------------
 
+- Enh #5600: Allow configuring debug panels in `yii\debug\Module::panels` as panel class name strings (qiangxue)
+- Enh #5613: Added `--overwrite` option to Gii console command to support overwriting all files (motin, qiangxue)
+- Bug #5584: `yii\rbac\DbRbacManager` should not delete items when deleting a rule on a database not supporting cascade update (mdmunir)
+- Bug: Gii console command help information does not contain global options (qiangxue)
+
+
+2.0.0 October 12, 2014
+----------------------
+
+- Bug #4881: Fixed `yii\console\controllers\AssetController` breaks CSS URLs on Windows (klimov-paul)
+- Bug #5171: Fixed the bug that ActiveForm + Pjax submit event is only triggered once (qiangxue)
+- Bug #5242: Fixed `yii\console\controllers\AssetController` breaks CSS URLs in case target file localed at `yii\web\AssetManager::basePath` root (klimov-paul)
 - Bug #5252: Null values are not properly handled by `RangeValidator` (githubjeka, qiangxue)
 - Bug #5260: `yii\i18n\Formatter::decimalSeparator` and `yii\i18n\Formatter::thousandSeparator` where not configurable when intl is not installed (execut, cebe)
 - Bug #5314: Fixed typo in the implementation of `yii\web\Session::getHasSessionId()` (qiangxue)
 - Bug #5323: Nested dropdown does not work for `yii\bootstrap\DropDown` (aryraditya)
-- Bug #5336: `yii\bootstrap\DropDown` should register bootstrap plugin asset (zelenin) 
+- Bug #5336: `yii\bootstrap\DropDown` should register bootstrap plugin asset (zelenin)
+- Bug #5379: `Module::afterAction()` was called even when `beforeAction()` returned false (cebe)
+- Bug #5408: Gii console command incorrectly reports errors when there is actually no error (qiangxue)
+- Bug #5423: `yii\behaviors\Cors` causes "undefined index" error when its `cors` is configured (qiangxue) 
+- Bug #5424: `Html::addCssStyle()` wasn't correctly setting style passed in array (kartik-v, samdark)
+- Bug #5435: Added extra checks to `yii\rbac\DbManager` to prevent database exceptions when `$userId` is empty (samdark)
+- Bug #5484: Fixed potential string suffix detection failure on 5.5.11 (qiangxue)
 - Bug: Date and time formatting now assumes UTC as the timezone for input dates unless a timezone is explicitly given (cebe)
 - Enh #4040: Added `$viewFile` and `$params` to the `EVENT_BEFORE_RENDER` and `EVENT_AFTER_RENDER` events for `View` (qiangxue) 
 - Enh #4275: Added `removeChildren()` to `yii\rbac\ManagerInterface` and implementations (samdark)
 - Enh: Added `yii\base\Application::loadedModules` (qiangxue)
 - Enh #5316: Added `startsWith()` and `endsWith()` to `yii\helpers\StringHelper`. Methods are binary-safe, multibyte-safe and optionally case-insensitive (armab)
+- Enh #5467: Added ability to pass HTML tag options to `asEmail()`, `asImage()` and `asUrl()` methods of `yii\i18n\Formatter` (alxkolm, samdark) 
 - Chg #2037: Dropped the support for using `yii\base\Module` as concrete module classes (qiangxue)
+- Chg: Updated cebe/markdown to 1.0.0 which includes breaking changes in its internal API (cebe)
+- Chg: If you are using CUBRID DBMS, make sure to use at least version 9.3.0 because quoting is broken in prior versions and Yii has no reliable way to work around this issue (cebe)
 
 
 2.0.0-rc September 27, 2014
diff --git a/framework/README.md b/framework/README.md
index 4a86301..10af5e3 100644
--- a/framework/README.md
+++ b/framework/README.md
@@ -12,7 +12,7 @@ The preferred way to install the Yii framework is through [composer](http://getc
 Either run
 
 ```
-composer global require "fxp/composer-asset-plugin:1.0.0-beta2"
+composer global require "fxp/composer-asset-plugin:1.0.0-beta3"
 composer require --prefer-dist "yiisoft/yii2 *"
 ```
 
diff --git a/framework/UPGRADE.md b/framework/UPGRADE.md
index 1d62661..47c04fe 100644
--- a/framework/UPGRADE.md
+++ b/framework/UPGRADE.md
@@ -24,6 +24,17 @@ Upgrade from Yii 2.0 RC
  
 * The `yii\base\View::beforeRender()` and `yii\base\View::afterRender()` methods have two extra parameters `$viewFile`
   and `$params`. If you are overriding these methods, you should adjust the method signature accordingly.
+  
+* If you've used `asImage` formatter i.e. `Yii::$app->formatter->asImage($value, $alt);` you should change it
+  to `Yii::$app->formatter->asImage($value, ['alt' => $alt]);`.
+
+* Yii now requires `cebe/markdown` 1.0.0 or higher, which includes breaking changes in its internal API. If you extend the markdown class
+  you need to update your implementation. See <https://github.com/cebe/markdown/releases/tag/1.0.0-rc> for details.
+  If you just used the markdown helper class there is no need to change anything.
+
+* If you are using CUBRID DBMS, make sure to use at least version 9.3.0 as the server and also as the PDO extension.
+  Quoting of values is broken in prior versions and Yii has no reliable way to work around this issue.
+  A workaround that may have worked before has been removed in this release because it was not reliable.
 
 
 Upgrade from Yii 2.0 Beta
@@ -33,7 +44,7 @@ Upgrade from Yii 2.0 Beta
   the composer-asset-plugin, *before* you update your project:
 
   ```
-  php composer.phar global require "fxp/composer-asset-plugin:1.0.0-beta2"
+  php composer.phar global require "fxp/composer-asset-plugin:1.0.0-beta3"
   ```
 
   You also need to add the following code to your project's `composer.json` file:
diff --git a/framework/assets/yii.activeForm.js b/framework/assets/yii.activeForm.js
index 7e784df..621fd94 100644
--- a/framework/assets/yii.activeForm.js
+++ b/framework/assets/yii.activeForm.js
@@ -256,9 +256,10 @@
                 data = $form.data('yiiActiveForm'),
                 needAjaxValidation = false,
                 messages = {},
-                deferreds = deferredArray();
+                deferreds = deferredArray(),
+                submitting = data.submitting;
 
-            if (data.submitting) {
+            if (submitting) {
                 var event = $.Event(events.beforeValidate);
                 $form.trigger(event, [messages, deferreds]);
                 if (event.result === false) {
@@ -324,9 +325,9 @@
                                         delete msgs[this.id];
                                     }
                                 });
-                                updateInputs($form, $.extend(messages, msgs));
+                                updateInputs($form, $.extend(messages, msgs), submitting);
                             } else {
-                                updateInputs($form, messages);
+                                updateInputs($form, messages, submitting);
                             }
                         },
                         error: function () {
@@ -336,10 +337,10 @@
                 } else if (data.submitting) {
                     // delay callback so that the form can be submitted without problem
                     setTimeout(function () {
-                        updateInputs($form, messages);
+                        updateInputs($form, messages, submitting);
                     }, 200);
                 } else {
-                    updateInputs($form, messages);
+                    updateInputs($form, messages, submitting);
                 }
             });
         },
@@ -349,10 +350,6 @@
                 data = $form.data('yiiActiveForm');
 
             if (data.validated) {
-                if (!data.submitting) {
-                    // form is being submitted. Do nothing to avoid duplicated form submission
-                    return false;
-                }
                 data.submitting = false;
                 var event = $.Event(events.beforeSubmit);
                 $form.trigger(event);
@@ -472,11 +469,12 @@
      * Updates the error messages and the input containers for all applicable attributes
      * @param $form the form jQuery object
      * @param messages array the validation error messages
+     * @param submitting whether this method is called after validation triggered by form submission
      */
-    var updateInputs = function ($form, messages) {
+    var updateInputs = function ($form, messages, submitting) {
         var data = $form.data('yiiActiveForm');
 
-        if (data.submitting) {
+        if (submitting) {
             var errorInputs = [];
             $.each(data.attributes, function () {
                 if (!this.cancelled && updateInput($form, this, messages)) {
diff --git a/framework/base/Controller.php b/framework/base/Controller.php
index 072984b..b08fc66 100644
--- a/framework/base/Controller.php
+++ b/framework/base/Controller.php
@@ -134,6 +134,7 @@ class Controller extends Component implements ViewContextInterface
         $modules = [];
         $runAction = true;
 
+        // call beforeAction on modules
         foreach ($this->getModules() as $module) {
             if ($module->beforeAction($action)) {
                 array_unshift($modules, $module);
@@ -145,16 +146,17 @@ class Controller extends Component implements ViewContextInterface
 
         $result = null;
 
-        if ($runAction) {
-            if ($this->beforeAction($action)) {
-                $result = $action->runWithParams($params);
-                $result = $this->afterAction($action, $result);
-            }
-        }
+        if ($runAction && $this->beforeAction($action)) {
+            // run the action
+            $result = $action->runWithParams($params);
 
-        foreach ($modules as $module) {
-            /* @var $module Module */
-            $result = $module->afterAction($action, $result);
+            $result = $this->afterAction($action, $result);
+
+            // call afterAction on modules
+            foreach ($modules as $module) {
+                /* @var $module Module */
+                $result = $module->afterAction($action, $result);
+            }
         }
 
         $this->action = $oldAction;
diff --git a/framework/base/Security.php b/framework/base/Security.php
index 66d50f1..103288f 100644
--- a/framework/base/Security.php
+++ b/framework/base/Security.php
@@ -98,7 +98,7 @@ class Security extends Component
     }
 
     /**
-     * Encrypts data using a cyptograhic key.
+     * Encrypts data using a cryptograhic key.
      * Derives keys for encryption and authentication from the input key using HKDF and a random salt,
      * which is very fast relative to [[encryptByPassword()]]. The input key must be properly
      * random -- use [[generateRandomKey()]] to generate keys.
@@ -282,7 +282,7 @@ class Security extends Component
 
     /**
      * Derives a key from the given input key using the standard HKDF algorithm.
-     * Implements HKDF spcified in [RFC 5869](https://tools.ietf.org/html/rfc5869).
+     * Implements HKDF specified in [RFC 5869](https://tools.ietf.org/html/rfc5869).
      * Recommend use one of the SHA-2 hash algorithms: sha224, sha256, sha384 or sha512.
      * @param string $algo a hash algorithm supported by `hash_hmac()`, e.g. 'SHA-256'
      * @param string $inputKey the source key
diff --git a/framework/composer.json b/framework/composer.json
index d6cc082..4dd84bb 100644
--- a/framework/composer.json
+++ b/framework/composer.json
@@ -57,11 +57,11 @@
         "lib-pcre": "*",
         "yiisoft/yii2-composer": "*",
         "ezyang/htmlpurifier": "4.6.*",
-        "cebe/markdown": "0.9.*",
+        "cebe/markdown": "~1.0.0",
         "bower-asset/jquery": "2.1.*@stable | 1.11.*@stable",
         "bower-asset/jquery.inputmask": "3.1.*",
         "bower-asset/punycode": "1.3.*",
-        "bower-asset/yii2-pjax": "2.0.*"
+        "bower-asset/yii2-pjax": ">=2.0.1"
     },
     "autoload": {
         "psr-4": {"yii\\": ""}
diff --git a/framework/console/Markdown.php b/framework/console/Markdown.php
index d49acb9..a1a5c5a 100644
--- a/framework/console/Markdown.php
+++ b/framework/console/Markdown.php
@@ -7,6 +7,10 @@
 
 namespace yii\console;
 
+use cebe\markdown\block\FencedCodeTrait;
+use cebe\markdown\inline\CodeTrait;
+use cebe\markdown\inline\EmphStrongTrait;
+use cebe\markdown\inline\StrikeoutTrait;
 use yii\helpers\Console;
 
 /**
@@ -19,6 +23,11 @@ use yii\helpers\Console;
  */
 class Markdown extends \cebe\markdown\Parser
 {
+    use FencedCodeTrait;
+    use CodeTrait;
+    use EmphStrongTrait;
+    use StrikeoutTrait;
+
     /**
      * @var array these are "escapeable" characters. When using one of these prefixed with a
      * backslash, the character will be outputted without the backslash and is not interpreted
@@ -29,162 +38,66 @@ class Markdown extends \cebe\markdown\Parser
         '`', // backtick
         '*', // asterisk
         '_', // underscore
+        '~', // tilde
     ];
 
 
     /**
-     * @inheritDoc
-     */
-    protected function identifyLine($lines, $current)
-    {
-        if (isset($lines[$current]) && (strncmp($lines[$current], '```', 3) === 0 || strncmp($lines[$current], '~~~', 3) === 0)) {
-            return 'fencedCode';
-        }
-        return parent::identifyLine($lines, $current);
-    }
-
-    /**
-     * Consume lines for a fenced code block
-     *
-     * @param array $lines
-     * @param integer $current
-     * @return array
-     */
-    protected function consumeFencedCode($lines, $current)
-    {
-        // consume until ```
-        $block = [
-            'type' => 'code',
-            'content' => [],
-        ];
-        $line = rtrim($lines[$current]);
-        $fence = substr($line, 0, $pos = strrpos($line, $line[0]) + 1);
-        $language = substr($line, $pos);
-        if (!empty($language)) {
-            $block['language'] = $language;
-        }
-        for ($i = $current + 1, $count = count($lines); $i < $count; $i++) {
-            if (rtrim($line = $lines[$i]) !== $fence) {
-                $block['content'][] = $line;
-            } else {
-                break;
-            }
-        }
-        return [$block, $i];
-    }
-
-    /**
      * Renders a code block
      *
      * @param array $block
      * @return string
      */
-    protected function renderCode($block)
-    {
-        return Console::ansiFormat(implode("\n", $block['content']), [Console::NEGATIVE]) . "\n";
-    }
+   	protected function renderCode($block)
+   	{
+        return Console::ansiFormat($block['content'], [Console::NEGATIVE]) . "\n\n";
+   	}
 
     /**
      * @inheritdoc
      */
     protected function renderParagraph($block)
     {
-        return rtrim($this->parseInline(implode("\n", $block['content']))) . "\n";
+        return rtrim($this->renderAbsy($block['content'])) . "\n\n";
     }
 
     /**
-     * @inheritDoc
-     */
-    protected function inlineMarkers()
-    {
-        return [
-            '*'     => 'parseEmphStrong',
-            '_'     => 'parseEmphStrong',
-            '\\'    => 'parseEscape',
-            '`'     => 'parseCode',
-            '~~'    => 'parseStrike',
-        ];
-    }
-
-    /**
-     * Parses an inline code span `` ` ``.
-     * @param string $text
-     * @return array
+     * Renders an inline code span `` ` ``.
+     * @param array $element
+     * @return string
      */
-    protected function parseCode($text)
+    protected function renderInlineCode($element)
     {
-        // skip fenced code
-        if (strncmp($text, '```', 3) === 0) {
-            return [$text[0], 1];
-        }
-        if (preg_match('/^(`+) (.+?) \1/', $text, $matches)) { // code with enclosed backtick
-            return [
-                Console::ansiFormat($matches[2], [Console::UNDERLINE]),
-                strlen($matches[0])
-            ];
-        } elseif (preg_match('/^`(.+?)`/', $text, $matches)) {
-            return [
-                Console::ansiFormat($matches[1], [Console::UNDERLINE]),
-                strlen($matches[0])
-            ];
-        }
-        return [$text[0], 1];
+        return Console::ansiFormat($element[1], [Console::UNDERLINE]);
     }
 
     /**
-     * Parses empathized and strong elements.
-     * @param string $text
-     * @return array
+     * Renders empathized elements.
+     * @param array $element
+     * @return string
      */
-    protected function parseEmphStrong($text)
+    protected function renderEmph($element)
     {
-        $marker = $text[0];
-
-        if (!isset($text[1])) {
-            return [$text[0], 1];
-        }
-
-        if ($marker == $text[1]) { // strong
-            if ($marker == '*' && preg_match('/^[*]{2}((?:[^*]|[*][^*]*[*])+?)[*]{2}(?![*])/s', $text, $matches) ||
-                $marker == '_' && preg_match('/^__((?:[^_]|_[^_]*_)+?)__(?!_)/us', $text, $matches)) {
-
-                return [Console::ansiFormat($this->parseInline($matches[1]), Console::BOLD), strlen($matches[0])];
-            }
-        } else { // emph
-            if ($marker == '*' && preg_match('/^[*]((?:[^*]|[*][*][^*]+?[*][*])+?)[*](?![*])/s', $text, $matches) ||
-                $marker == '_' && preg_match('/^_((?:[^_]|__[^_]*__)+?)_(?!_)\b/us', $text, $matches)) {
-                return [Console::ansiFormat($this->parseInline($matches[1]), Console::ITALIC), strlen($matches[0])];
-            }
-        }
-        return [$text[0], 1];
+        return Console::ansiFormat($this->renderAbsy($element[1]), Console::ITALIC);
     }
 
     /**
-     * Parses the strikethrough feature.
-     * @param string $markdown
-     * @return array
+     * Renders strong elements.
+     * @param array $element
+     * @return string
      */
-    protected function parseStrike($markdown)
+    protected function renderStrong($element)
     {
-        if (preg_match('/^~~(.+?)~~/', $markdown, $matches)) {
-            return [
-                Console::ansiFormat($this->parseInline($matches[1]), [Console::CROSSED_OUT]),
-                strlen($matches[0])
-            ];
-        }
-        return [$markdown[0] . $markdown[1], 2];
+        return Console::ansiFormat($this->renderAbsy($element[1]), Console::BOLD);
     }
 
     /**
-     * Parses escaped special characters.
-     * @param string $text
-     * @return array
+     * Renders the strike through feature.
+     * @param array $element
+     * @return string
      */
-    protected function parseEscape($text)
+    protected function renderStrike($element)
     {
-        if (isset($text[1]) && in_array($text[1], $this->escapeCharacters)) {
-            return [$text[1], 2];
-        }
-        return [$text[0], 1];
+        return Console::ansiFormat($this->parseInline($this->renderAbsy($element[1])), [Console::CROSSED_OUT]);
     }
-}
\ No newline at end of file
+}
diff --git a/framework/console/controllers/AssetController.php b/framework/console/controllers/AssetController.php
index b7924a1..2627a3e 100644
--- a/framework/console/controllers/AssetController.php
+++ b/framework/console/controllers/AssetController.php
@@ -16,6 +16,7 @@ use yii\helpers\VarDumper;
  * Allows you to combine and compress your JavaScript and CSS files.
  *
  * Usage:
+ *
  * 1. Create a configuration file using the `template` action:
  *
  *    yii asset/template /path/to/myapp/config.php
@@ -513,7 +514,7 @@ EOD;
         $content = '';
         foreach ($inputFiles as $file) {
             $content .= "/*** BEGIN FILE: $file ***/\n"
-                . $this->adjustCssUrl(file_get_contents($file), dirname($file), dirname($outputFile))
+                . $this->adjustCssUrl(file_get_contents($file), dirname(realpath($file)), dirname($outputFile))
                 . "/*** END FILE: $file ***/\n";
         }
         if (!file_put_contents($outputFile, $content)) {
@@ -530,6 +531,9 @@ EOD;
      */
     protected function adjustCssUrl($cssContent, $inputFilePath, $outputFilePath)
     {
+        $inputFilePath = str_replace('\\', '/', $inputFilePath);
+        $outputFilePath = str_replace('\\', '/', $outputFilePath);
+
         $sharedPathParts = [];
         $inputFilePathParts = explode('/', $inputFilePath);
         $inputFilePathPartsCount = count($inputFilePathParts);
@@ -546,8 +550,16 @@ EOD;
 
         $inputFileRelativePath = trim(str_replace($sharedPath, '', $inputFilePath), '/');
         $outputFileRelativePath = trim(str_replace($sharedPath, '', $outputFilePath), '/');
-        $inputFileRelativePathParts = explode('/', $inputFileRelativePath);
-        $outputFileRelativePathParts = explode('/', $outputFileRelativePath);
+        if (empty($inputFileRelativePath)) {
+            $inputFileRelativePathParts = [];
+        } else {
+            $inputFileRelativePathParts = explode('/', $inputFileRelativePath);
+        }
+        if (empty($outputFileRelativePath)) {
+            $outputFileRelativePathParts = [];
+        } else {
+            $outputFileRelativePathParts = explode('/', $outputFileRelativePath);
+        }
 
         $callback = function ($matches) use ($inputFileRelativePathParts, $outputFileRelativePathParts) {
             $fullMatch = $matches[0];
@@ -557,7 +569,11 @@ EOD;
                 return $fullMatch;
             }
 
-            $outputUrlParts = array_fill(0, count($outputFileRelativePathParts), '..');
+            if (empty($outputFileRelativePathParts)) {
+                $outputUrlParts = [];
+            } else {
+                $outputUrlParts = array_fill(0, count($outputFileRelativePathParts), '..');
+            }
             $outputUrlParts = array_merge($outputUrlParts, $inputFileRelativePathParts);
 
             if (strpos($inputUrl, '/') !== false) {
@@ -585,6 +601,7 @@ EOD;
     /**
      * Creates template of configuration file for [[actionCompress]].
      * @param string $configFile output file name.
+     * @return int CLI exit code
      * @throws \yii\console\Exception on failure.
      */
     public function actionTemplate($configFile)
@@ -625,6 +642,8 @@ return [
     ],
     // Asset manager configuration:
     'assetManager' => [
+        //'basePath' => '@webroot/assets',
+        //'baseUrl' => '@web/assets',
     ],
 ];
 EOD;
diff --git a/framework/console/controllers/BaseMigrateController.php b/framework/console/controllers/BaseMigrateController.php
index ab7c298..7cf8e3a 100644
--- a/framework/console/controllers/BaseMigrateController.php
+++ b/framework/console/controllers/BaseMigrateController.php
@@ -302,6 +302,7 @@ abstract class BaseMigrateController extends Controller
      *
      * @param string $version the version at which the migration history should be marked.
      * This can be either the timestamp or the full name of the migration.
+     * @return int CLI exit code
      * @throws Exception if the version argument is invalid or the version cannot be found.
      */
     public function actionMark($version)
@@ -561,6 +562,7 @@ abstract class BaseMigrateController extends Controller
     /**
      * Migrates to the certain version.
      * @param string $version name in the full format.
+     * @return int CLI exit code
      * @throws Exception if the provided version cannot be found.
      */
     protected function migrateToVersion($version)
diff --git a/framework/console/controllers/CacheController.php b/framework/console/controllers/CacheController.php
index 5e0c131..9acc9c7 100644
--- a/framework/console/controllers/CacheController.php
+++ b/framework/console/controllers/CacheController.php
@@ -16,16 +16,17 @@ use yii\console\Exception;
 /**
  * Allows you to flush cache.
  *
- * ~~~
- * #see list of available components to flush
- * yii cache
+ * see list of available components to flush:
  *
- * #flush particular components specified by their names
- * yii cache/flush first second third
+ *     yii cache
  *
- * #flush all cache components that can be found in the system
- * yii cache/flush-all
- * ~~~
+ * flush particular components specified by their names:
+ *
+ *     yii cache/flush first second third
+ *
+ * flush all cache components that can be found in the system
+ *
+ *     yii cache/flush-all
  *
  * @author Alexander Makarov <sam@rmcreative.ru>
  * @author Mark Jebri <mark.github@yandex.ru>
diff --git a/framework/console/controllers/FixtureController.php b/framework/console/controllers/FixtureController.php
index 133bb48..27cf47e 100644
--- a/framework/console/controllers/FixtureController.php
+++ b/framework/console/controllers/FixtureController.php
@@ -100,8 +100,8 @@ class FixtureController extends Controller
      *
      * @throws Exception if the specified fixture does not exist.
      */
-    public function actionLoad()
-    {        
+    public function actionLoad($fixturesInput)
+    {
         $fixturesInput = func_get_args();
         $filtered = $this->filterFixtures($fixturesInput);
         $except = $filtered['except'];
@@ -234,6 +234,8 @@ class FixtureController extends Controller
 
     /**
      * Notifies user that there are no fixtures to load according input conditions
+     * @param array $foundFixtures array of found fixtures
+     * @param array $except array of names of fixtures that should not be loaded
      */
     public function notifyNothingToLoad($foundFixtures, $except)
     {
@@ -254,6 +256,8 @@ class FixtureController extends Controller
 
     /**
      * Notifies user that there are no fixtures to unload according input conditions
+     * @param array $foundFixtures array of found fixtures
+     * @param array $except array of names of fixtures that should not be loaded
      */
     public function notifyNothingToUnload($foundFixtures, $except)
     {
@@ -437,11 +441,11 @@ class FixtureController extends Controller
      * ~~~
      * [
      *     'apply' => [
-     *         User,
+     *         'User',
      *         ...
      *     ],
      *     'except' => [
-     *         Custom,
+     *         'Custom',
      *         ...
      *     ],
      * ]
diff --git a/framework/console/controllers/HelpController.php b/framework/console/controllers/HelpController.php
index 743188b..55a3b9f 100644
--- a/framework/console/controllers/HelpController.php
+++ b/framework/console/controllers/HelpController.php
@@ -149,7 +149,7 @@ class HelpController extends Controller
         if (is_dir($controllerPath)) {
             $files = scandir($controllerPath);
             foreach ($files as $file) {
-                if (!empty($file) && substr_compare($file, 'Controller.php', -14) === 0) {
+                if (!empty($file) && substr_compare($file, 'Controller.php', -14, 14) === 0) {
                     $controllerClass = $module->controllerNamespace . '\\' . substr(basename($file), 0, -4);
                     if ($this->validateControllerClass($controllerClass)) {
                         $commands[] = $prefix . Inflector::camel2id(substr(basename($file), 0, -14));
diff --git a/framework/console/controllers/MessageController.php b/framework/console/controllers/MessageController.php
index 7a1e335..e5ab688 100644
--- a/framework/console/controllers/MessageController.php
+++ b/framework/console/controllers/MessageController.php
@@ -50,6 +50,7 @@ class MessageController extends Controller
      * you may use this configuration file with the "extract" command.
      *
      * @param string $filePath output file name or alias.
+     * @return int CLI exit code
      * @throws Exception on failure.
      */
     public function actionConfig($filePath)
@@ -328,7 +329,7 @@ class MessageController extends Controller
             ksort($existingMessages);
             foreach ($existingMessages as $message => $translation) {
                 if (!isset($merged[$message]) && !isset($todo[$message]) && !$removeUnused) {
-                    if (!empty($translation) && strncmp($translation, '@@', 2) === 0 && substr_compare($translation, '@@', -2) === 0) {
+                    if (!empty($translation) && strncmp($translation, '@@', 2) === 0 && substr_compare($translation, '@@', -2, 2) === 0) {
                         $todo[$message] = $translation;
                     } else {
                         $todo[$message] = '@@' . $translation . '@@';
diff --git a/framework/data/ArrayDataProvider.php b/framework/data/ArrayDataProvider.php
index 7faf4ba..b951753 100644
--- a/framework/data/ArrayDataProvider.php
+++ b/framework/data/ArrayDataProvider.php
@@ -27,7 +27,7 @@ use yii\helpers\ArrayHelper;
  *
  * ArrayDataProvider may be used in the following way:
  *
- * ~~~
+ * ```php
  * $query = new Query;
  * $provider = new ArrayDataProvider([
  *     'allModels' => $query->from('post')->all(),
@@ -40,7 +40,7 @@ use yii\helpers\ArrayHelper;
  * ]);
  * // get the posts in the current page
  * $posts = $provider->getModels();
- * ~~~
+ * ```
  *
  * Note: if you want to use the sorting feature, you must configure the [[sort]] property
  * so that the provider knows which columns can be sorted.
diff --git a/framework/db/ActiveRelationTrait.php b/framework/db/ActiveRelationTrait.php
index a952702..70eb649 100644
--- a/framework/db/ActiveRelationTrait.php
+++ b/framework/db/ActiveRelationTrait.php
@@ -252,6 +252,9 @@ trait ActiveRelationTrait
                 if ($this->multiple && count($link) == 1 && is_array($keys = $primaryModel[reset($link)])) {
                     $value = [];
                     foreach ($keys as $key) {
+                        if (!is_scalar($key)) {
+                            $key = serialize($key);
+                        }
                         if (isset($buckets[$key])) {
                             if ($this->indexBy !== null) {
                                 // if indexBy is set, array_merge will cause renumbering of numeric array
@@ -388,6 +391,15 @@ trait ActiveRelationTrait
         return $buckets;
     }
 
+
+    /**
+     * Indexes buckets by column name.
+     *
+     * @param array $buckets
+     * @var string|callable $column the name of the column by which the query results should be indexed by.
+     * This can also be a callable (e.g. anonymous function) that returns the index value based on the given row data.
+     * @return array
+     */
     private function indexBuckets($buckets, $indexBy)
     {
         $result = [];
diff --git a/framework/db/cubrid/QueryBuilder.php b/framework/db/cubrid/QueryBuilder.php
index 3602ebc..e0c09c3 100644
--- a/framework/db/cubrid/QueryBuilder.php
+++ b/framework/db/cubrid/QueryBuilder.php
@@ -10,7 +10,7 @@ namespace yii\db\cubrid;
 use yii\base\InvalidParamException;
 
 /**
- * QueryBuilder is the query builder for CUBRID databases (version 9.1.x and higher).
+ * QueryBuilder is the query builder for CUBRID databases (version 9.3.x and higher).
  *
  * @author Carsten Brandt <mail@cebe.cc>
  * @since 2.0
diff --git a/framework/db/cubrid/Schema.php b/framework/db/cubrid/Schema.php
index 558d8df..28ea970 100644
--- a/framework/db/cubrid/Schema.php
+++ b/framework/db/cubrid/Schema.php
@@ -13,7 +13,7 @@ use yii\db\ColumnSchema;
 use yii\db\Transaction;
 
 /**
- * Schema is the class for retrieving metadata from a CUBRID database (version 9.1.x and higher).
+ * Schema is the class for retrieving metadata from a CUBRID database (version 9.3.x and higher).
  *
  * @author Carsten Brandt <mail@cebe.cc>
  * @since 2.0
@@ -104,30 +104,6 @@ class Schema extends \yii\db\Schema
     }
 
     /**
-     * Quotes a string value for use in a query.
-     * Note that if the parameter is not a string, it will be returned without change.
-     * @param string $str string to be quoted
-     * @return string the properly quoted string
-     * @see http://www.php.net/manual/en/function.PDO-quote.php
-     */
-    public function quoteValue($str)
-    {
-        if (!is_string($str)) {
-            return $str;
-        }
-
-        $pdo = $this->db->getSlavePdo();
-
-        // workaround for broken PDO::quote() implementation in CUBRID 9.1.0 http://jira.cubrid.org/browse/APIS-658
-        $version = $pdo->getAttribute(\PDO::ATTR_CLIENT_VERSION);
-        if (version_compare($version, '8.4.4.0002', '<') || $version[0] == '9' && version_compare($version, '9.2.0.0002', '<=')) {
-            return "'" . addcslashes(str_replace("'", "''", $str), "\000\n\r\\\032") . "'";
-        } else {
-            return $pdo->quote($str);
-        }
-    }
-
-    /**
      * Creates a query builder for the CUBRID database.
      * @return QueryBuilder query builder instance
      */
diff --git a/framework/filters/AccessRule.php b/framework/filters/AccessRule.php
index fa94671..336435d 100644
--- a/framework/filters/AccessRule.php
+++ b/framework/filters/AccessRule.php
@@ -11,7 +11,7 @@ use yii\base\Component;
 use yii\base\Action;
 use yii\web\User;
 use yii\web\Request;
-use yii\web\Controller;
+use yii\base\Controller;
 
 /**
  * This class represents an access rule defined by the [[AccessControl]] action filter
diff --git a/framework/filters/Cors.php b/framework/filters/Cors.php
index f4bb94e..0c291e7 100644
--- a/framework/filters/Cors.php
+++ b/framework/filters/Cors.php
@@ -15,7 +15,7 @@ use yii\web\Response;
 /**
  * Cors filter implements [Cross Origin Resource Sharing](http://en.wikipedia.org/wiki/Cross-origin_resource_sharing).
  * Make sure to read carefully what CORS does and does not. CORS do not secure your API,
- * but allow the developper to grant access to third party code (ajax calls from external domain)
+ * but allow the developer to grant access to third party code (ajax calls from external domain)
  *
  * You may use CORS filter by attaching it as a behavior to a controller or module, like the following,
  *
@@ -90,8 +90,8 @@ class Cors extends ActionFilter
      */
     public function beforeAction($action)
     {
-        $this->request = $this->request ? : Yii::$app->getRequest();
-        $this->response = $this->response ? : Yii::$app->getResponse();
+        $this->request = $this->request ?: Yii::$app->getRequest();
+        $this->response = $this->response ?: Yii::$app->getResponse();
 
         $this->overrideDefaultSettings($action);
 
@@ -120,7 +120,7 @@ class Cors extends ActionFilter
     }
 
     /**
-     * Extract CORS headers fron the request
+     * Extract CORS headers from the request
      * @return array CORS headers to handle
      */
     public function extractHeaders()
@@ -129,7 +129,7 @@ class Cors extends ActionFilter
         $requestHeaders = array_keys($this->cors);
         foreach ($requestHeaders as $headerField) {
             $serverField = $this->headerizeToPhp($headerField);
-            $headerData = isset($_SERVER[$serverField])?$_SERVER[$serverField]:null;
+            $headerData = isset($_SERVER[$serverField]) ? $_SERVER[$serverField] : null;
             if ($headerData !== null) {
                 $headers[$headerField] = $headerData;
             }
@@ -148,7 +148,8 @@ class Cors extends ActionFilter
         // handle Origin
         if (isset($requestHeaders['Origin'])) {
             if ((in_array('*', $this->cors['Origin']) === true)
-             || (in_array($requestHeaders['Origin'], $this->cors['Origin']))) {
+                || (in_array($requestHeaders['Origin'], $this->cors['Origin']))
+            ) {
                 $responseHeaders['Access-Control-Allow-Origin'] = $requestHeaders['Origin'];
             }
         }
@@ -160,13 +161,11 @@ class Cors extends ActionFilter
             $responseHeaders['Access-Control-Allow-Methods'] = implode(', ', $this->cors['Access-Control-Request-Method']);
         }
 
-        if ($this->cors['Access-Control-Allow-Credentials'] === true) {
-            $responseHeaders['Access-Control-Allow-Credentials'] = 'true';
-        } elseif ($this->cors['Access-Control-Allow-Credentials'] === false) {
-            $responseHeaders['Access-Control-Allow-Credentials'] = 'false';
+        if (isset($this->cors['Access-Control-Allow-Credentials'])) {
+            $responseHeaders['Access-Control-Allow-Credentials'] = $this->cors['Access-Control-Allow-Credentials'] ? 'true' : 'false';
         }
 
-        if (($_SERVER['REQUEST_METHOD'] === 'OPTIONS') && ($this->cors['Access-Control-Max-Age'] !== null)) {
+        if (isset($this->cors['Access-Control-Max-Age']) && Yii::$app->getRequest()->getIsOptions()) {
             $responseHeaders['Access-Control-Max-Age'] = $this->cors['Access-Control-Max-Age'];
         }
 
@@ -177,12 +176,12 @@ class Cors extends ActionFilter
      * Handle classic CORS request to avoid duplicate code
      * @param string $type the kind of headers we would handle
      * @param array $requestHeaders CORS headers request by client
-     * @param array $responseHeaders CORS response headers sent to the clinet
+     * @param array $responseHeaders CORS response headers sent to the client
      */
     protected function prepareAllowHeaders($type, $requestHeaders, &$responseHeaders)
     {
-        $requestHeaderField = 'Access-Control-Request-'.$type;
-        $responseHeaderField = 'Access-Control-Allow-'.$type;
+        $requestHeaderField = 'Access-Control-Request-' . $type;
+        $responseHeaderField = 'Access-Control-Allow-' . $type;
         if (isset($requestHeaders[$requestHeaderField])) {
             if (in_array('*', $this->cors[$requestHeaderField])) {
                 $responseHeaders[$responseHeaderField] = $this->headerize($requestHeaders[$requestHeaderField]);
@@ -205,7 +204,7 @@ class Cors extends ActionFilter
     /**
      * Adds the CORS headers to the response
      * @param Response $response
-     * @param array CORS headers which have been compouted
+     * @param array CORS headers which have been computed
      */
     public function addCorsHeaders($response, $headers)
     {
@@ -226,8 +225,8 @@ class Cors extends ActionFilter
      */
     protected function headerize($string)
     {
-        $headers = preg_split("/[\s,]+/", $string, -1, PREG_SPLIT_NO_EMPTY);
-        $headers = array_map(function($element) {
+        $headers = preg_split("/[\\s,]+/", $string, -1, PREG_SPLIT_NO_EMPTY);
+        $headers = array_map(function ($element) {
             return str_replace(' ', '-', ucwords(strtolower(str_replace(['_', '-'], [' ', ' '], $element))));
         }, $headers);
         return implode(', ', $headers);
@@ -242,6 +241,6 @@ class Cors extends ActionFilter
      */
     protected function headerizeToPhp($string)
     {
-        return 'HTTP_'.strtoupper(str_replace([' ', '-'], ['_', '_'], $string));
+        return 'HTTP_' . strtoupper(str_replace([' ', '-'], ['_', '_'], $string));
     }
 }
diff --git a/framework/grid/CheckboxColumn.php b/framework/grid/CheckboxColumn.php
index 17cbedc..994600a 100644
--- a/framework/grid/CheckboxColumn.php
+++ b/framework/grid/CheckboxColumn.php
@@ -65,7 +65,7 @@ class CheckboxColumn extends Column
         if (empty($this->name)) {
             throw new InvalidConfigException('The "name" property must be set.');
         }
-        if (substr_compare($this->name, '[]', -2)) {
+        if (substr_compare($this->name, '[]', -2, 2)) {
             $this->name .= '[]';
         }
     }
diff --git a/framework/helpers/BaseHtml.php b/framework/helpers/BaseHtml.php
index 829632b..5824cc0 100644
--- a/framework/helpers/BaseHtml.php
+++ b/framework/helpers/BaseHtml.php
@@ -785,13 +785,13 @@ class BaseHtml
         if (!array_key_exists('size', $options)) {
             $options['size'] = 4;
         }
-        if (!empty($options['multiple']) && !empty($name) && substr_compare($name, '[]', -2)) {
+        if (!empty($options['multiple']) && !empty($name) && substr_compare($name, '[]', -2, 2)) {
             $name .= '[]';
         }
         $options['name'] = $name;
         if (isset($options['unselect'])) {
             // add a hidden field so that if the list box has no option being selected, it still submits a value
-            if (!empty($name) && substr_compare($name, '[]', -2) === 0) {
+            if (!empty($name) && substr_compare($name, '[]', -2, 2) === 0) {
                 $name = substr($name, 0, -2);
             }
             $hidden = static::hiddenInput($name, $options['unselect']);
@@ -1703,9 +1703,9 @@ class BaseHtml
                     }
                 }
             }
-            $style = static::cssStyleFromArray(array_merge($oldStyle, $newStyle));
+            $style = array_merge($oldStyle, $newStyle);
         }
-        $options['style'] = $style;
+        $options['style'] = is_array($style) ? static::cssStyleFromArray($style) : $style;
     }
 
     /**
diff --git a/framework/helpers/BaseMarkdown.php b/framework/helpers/BaseMarkdown.php
index 54aa715..6f3fa6c 100644
--- a/framework/helpers/BaseMarkdown.php
+++ b/framework/helpers/BaseMarkdown.php
@@ -37,6 +37,10 @@ class BaseMarkdown
             'html5' => true,
             'enableNewlines' => true,
         ],
+        'extra' => [
+            'class' => 'cebe\markdown\MarkdownExtra',
+            'html5' => true,
+        ],
     ];
     /**
      * @var string the markdown flavor to use when none is specified explicitly.
diff --git a/framework/helpers/Markdown.php b/framework/helpers/Markdown.php
index baca38b..9562155 100644
--- a/framework/helpers/Markdown.php
+++ b/framework/helpers/Markdown.php
@@ -15,6 +15,7 @@ namespace yii\helpers;
  * ```php
  * $myHtml = Markdown::process($myText); // use original markdown flavor
  * $myHtml = Markdown::process($myText, 'gfm'); // use github flavored markdown
+ * $myHtml = Markdown::process($myText, 'extra'); // use markdown extra
  * ```
  *
  * You can configure multiple flavors using the [[$flavors]] property.
diff --git a/framework/i18n/Formatter.php b/framework/i18n/Formatter.php
index 6e3773f..ebaaf43 100644
--- a/framework/i18n/Formatter.php
+++ b/framework/i18n/Formatter.php
@@ -7,7 +7,9 @@
 
 namespace yii\i18n;
 
+use DateInterval;
 use DateTime;
+use DateTimeInterface;
 use DateTimeZone;
 use IntlDateFormatter;
 use NumberFormatter;
@@ -330,36 +332,38 @@ class Formatter extends Component
     /**
      * Formats the value as a mailto link.
      * @param mixed $value the value to be formatted.
+     * @param array $options the tag options in terms of name-value pairs. See [[Html::mailto()]].
      * @return string the formatted result.
      */
-    public function asEmail($value)
+    public function asEmail($value, $options = [])
     {
         if ($value === null) {
             return $this->nullDisplay;
         }
-        return Html::mailto(Html::encode($value), $value);
+        return Html::mailto(Html::encode($value), $value, $options);
     }
 
     /**
      * Formats the value as an image tag.
      * @param mixed $value the value to be formatted.
-     * @param string $altText an optional `alt`-tag to be added to the image.
+     * @param array $options the tag options in terms of name-value pairs. See [[Html::img()]].
      * @return string the formatted result.
      */
-    public function asImage($value, $altText = '')
+    public function asImage($value, $options = [])
     {
         if ($value === null) {
             return $this->nullDisplay;
         }
-        return Html::img($value, ['alt' => $altText]);
+        return Html::img($value, $options);
     }
 
     /**
      * Formats the value as a hyperlink.
      * @param mixed $value the value to be formatted.
+     * @param array $options the tag options in terms of name-value pairs. See [[Html::a()]].
      * @return string the formatted result.
      */
-    public function asUrl($value)
+    public function asUrl($value, $options = [])
     {
         if ($value === null) {
             return $this->nullDisplay;
@@ -369,7 +373,7 @@ class Formatter extends Component
             $url = 'http://' . $url;
         }
 
-        return Html::a(Html::encode($value), $url);
+        return Html::a(Html::encode($value), $url, $options);
     }
 
     /**
@@ -566,7 +570,7 @@ class Formatter extends Component
      */
     protected function normalizeDatetimeValue($value)
     {
-        if ($value === null || $value instanceof DateTime) {
+        if ($value === null || $value instanceof DateTime || $value instanceof DateTimeInterface) {
             // skip any processing
             return $value;
         }
@@ -595,13 +599,13 @@ class Formatter extends Component
 
     /**
      * Formats a date, time or datetime in a float number as UNIX timestamp (seconds since 01-01-1970).
-     * @param integer|string|DateTime|\DateInterval $value the value to be formatted. The following
+     * @param integer|string|DateTime $value the value to be formatted. The following
      * types of value are supported:
      *
      * - an integer representing a UNIX timestamp
-     * - a string that can be parsed into a UNIX timestamp via `strtotime()` or that can be passed to a DateInterval constructor.
-     * - a PHP DateTime object
-     * - a PHP DateInterval object (a positive time interval will refer to the past, a negative one to the future)
+     * - a string that can be [parsed to create a DateTime object](http://php.net/manual/en/datetime.formats.php).
+     *   The timestamp is assumed to be in UTC unless a timezone is explicitly given.
+     * - a PHP [DateTime](http://php.net/manual/en/class.datetime.php) object
      *
      * @return string the formatted result.
      */
@@ -617,15 +621,23 @@ class Formatter extends Component
     /**
      * Formats the value as the time interval between a date and now in human readable form.
      *
-     * @param integer|string|DateTime|\DateInterval $value the value to be formatted. The following
+     * This method can be used in three different ways:
+     *
+     * 1. Using a timestamp that is relative to `now`.
+     * 2. Using a timestamp that is relative to the `$referenceTime`.
+     * 3. Using a `DateInterval` object.
+     *
+     * @param integer|string|DateTime|DateInterval $value the value to be formatted. The following
      * types of value are supported:
      *
      * - an integer representing a UNIX timestamp
-     * - a string that can be parsed into a UNIX timestamp via `strtotime()` or that can be passed to a DateInterval constructor.
-     * - a PHP DateTime object
+     * - a string that can be [parsed to create a DateTime object](http://php.net/manual/en/datetime.formats.php).
+     *   The timestamp is assumed to be in UTC unless a timezone is explicitly given.
+     * - a PHP [DateTime](http://php.net/manual/en/class.datetime.php) object
      * - a PHP DateInterval object (a positive time interval will refer to the past, a negative one to the future)
      *
-     * @param integer|string|DateTime|\DateInterval $referenceTime if specified the value is used instead of `now`.
+     * @param integer|string|DateTime $referenceTime if specified the value is used as a reference time instead of `now`
+     * when `$value` is not a `DateInterval` object.
      * @return string the formatted result.
      * @throws InvalidParamException if the input value can not be evaluated as a date value.
      */
@@ -635,7 +647,7 @@ class Formatter extends Component
             return $this->nullDisplay;
         }
 
-        if ($value instanceof \DateInterval) {
+        if ($value instanceof DateInterval) {
             $interval = $value;
         } else {
             $timestamp = $this->normalizeDatetimeValue($value);
@@ -644,7 +656,7 @@ class Formatter extends Component
                 // $value is not a valid date/time value, so we try
                 // to create a DateInterval with it
                 try {
-                    $interval = new \DateInterval($value);
+                    $interval = new DateInterval($value);
                 } catch (\Exception $e) {
                     // invalid date/time and invalid interval
                     return $this->nullDisplay;
@@ -1010,6 +1022,16 @@ class Formatter extends Component
         }
     }
 
+
+    /**
+     * Given the value in bytes formats number part of the human readable form.
+     *
+     * @param string|integer|float $value value in bytes to be formatted.
+     * @param integer $decimals the number of digits after the decimal point
+     * @param array $options optional configuration for the number formatter. This parameter will be merged with [[numberFormatterOptions]].
+     * @param array $textOptions optional configuration for the number formatter. This parameter will be merged with [[numberFormatterTextOptions]].
+     * @return array [parameters for Yii::t containing formatted number, internal position of size unit]
+     */
     private function formatSizeNumber($value, $decimals, $options, $textOptions)
     {
         if (is_string($value) && is_numeric($value)) {
diff --git a/framework/log/Target.php b/framework/log/Target.php
index 821e32d..94a447e 100644
--- a/framework/log/Target.php
+++ b/framework/log/Target.php
@@ -204,7 +204,7 @@ abstract class Target extends Component
 
             $matched = empty($categories);
             foreach ($categories as $category) {
-                if ($message[2] === $category || !empty($category) && substr_compare($category, '*', -1) === 0 && strpos($message[2], rtrim($category, '*')) === 0) {
+                if ($message[2] === $category || !empty($category) && substr_compare($category, '*', -1, 1) === 0 && strpos($message[2], rtrim($category, '*')) === 0) {
                     $matched = true;
                     break;
                 }
diff --git a/framework/messages/config.php b/framework/messages/config.php
index 9813d46..aa48817 100644
--- a/framework/messages/config.php
+++ b/framework/messages/config.php
@@ -7,7 +7,7 @@ return [
     'messagePath' => __DIR__,
     // array, required, list of language codes that the extracted messages
     // should be translated to. For example, ['zh-CN', 'de'].
-    'languages' => ['ar', 'bg', 'ca', 'cs', 'da', 'de', 'el', 'es', 'et', 'fa-IR', 'fi', 'fr', 'hu', 'id', 'it', 'ja', 'kk', 'ko', 'lt', 'lv', 'nl', 'pl', 'pt', 'pt-BR', 'ro', 'ru', 'sk', 'sr', 'sr-Latn', 'th', 'uk', 'vi', 'zh-CN','zh-TW'],
+    'languages' => ['ar', 'bg', 'ca', 'cs', 'da', 'de', 'el', 'es', 'et', 'fa-IR', 'fi', 'fr', 'hu', 'id', 'it', 'ja', 'kk', 'ko', 'lt', 'lv', 'nl', 'pl', 'pt', 'pt-BR', 'ro', 'ru', 'sk', 'sr', 'sr-Latn', 'sv', 'th', 'uk', 'vi', 'zh-CN','zh-TW'],
     // string, the name of the function for translating messages.
     // Defaults to 'Yii::t'. This is used as a mark to find the messages to be
     // translated. You may use a string for single function name or an array for
diff --git a/framework/messages/fi/yii.php b/framework/messages/fi/yii.php
index f6a1494..6310954 100644
--- a/framework/messages/fi/yii.php
+++ b/framework/messages/fi/yii.php
@@ -17,29 +17,6 @@
  * NOTE: this file must be saved in UTF-8 encoding.
  */
 return [
-    'just now' => 'juuri nyt',
-    '{nFormatted} B' => '{nFormatted} t',
-    '{nFormatted} GB' => '{nFormatted} Gt',
-    '{nFormatted} GiB' => '{nFormatted} GiB',
-    '{nFormatted} KB' => '{nFormatted} kt',
-    '{nFormatted} KiB' => '{nFormatted} KiB',
-    '{nFormatted} MB' => '{nFormatted} Mt',
-    '{nFormatted} MiB' => '{nFormatted} MiB',
-    '{nFormatted} PB' => '{nFormatted} Pt',
-    '{nFormatted} PiB' => '{nFormatted} PiB',
-    '{nFormatted} TB' => '{nFormatted} Tt',
-    '{nFormatted} TiB' => '{nFormatted} TiB',
-    '{nFormatted} {n, plural, =1{byte} other{bytes}}' => '{nFormatted} {n, plural, =1{tavu} other{tavua}}',
-    '{nFormatted} {n, plural, =1{gibibyte} other{gibibytes}}' => '{nFormatted} {n, plural, =1{gibitavu} other{gibitavua}}',
-    '{nFormatted} {n, plural, =1{gigabyte} other{gigabytes}}' => '{nFormatted} {n, plural, =1{gigatavu} other{gigatavua}}',
-    '{nFormatted} {n, plural, =1{kibibyte} other{kibibytes}}' => '{nFormatted} {n, plural, =1{kibitavu} other{kibitavua}}',
-    '{nFormatted} {n, plural, =1{kilobyte} other{kilobytes}}' => '{nFormatted} {n, plural, =1{kilotavu} other{kilotavua}}',
-    '{nFormatted} {n, plural, =1{mebibyte} other{mebibytes}}' => '{nFormatted} {n, plural, =1{mebitavu} other{mebitavua}}',
-    '{nFormatted} {n, plural, =1{megabyte} other{megabytes}}' => '{nFormatted} {n, plural, =1{megatavu} other{megatavua}}',
-    '{nFormatted} {n, plural, =1{pebibyte} other{pebibytes}}' => '{nFormatted} {n, plural, =1{pebitavu} other{pebitavua}}',
-    '{nFormatted} {n, plural, =1{petabyte} other{petabytes}}' => '{nFormatted} {n, plural, =1{petatavu} other{petatavua}}',
-    '{nFormatted} {n, plural, =1{tebibyte} other{tebibytes}}' => '{nFormatted} {n, plural, =1{tebitavu} other{tebitavua}}',
-    '{nFormatted} {n, plural, =1{terabyte} other{terabytes}}' => '{nFormatted} {n, plural, =1{teratavu} other{teratavua}}',
     '(not set)' => '(ei asetettu)',
     'An internal server error occurred.' => 'Sisäinen palvelinvirhe.',
     'Are you sure you want to delete this item?' => 'Haluatko varmasti poistaa tämän?',
@@ -52,8 +29,6 @@ return [
     'Missing required arguments: {params}' => 'Pakolliset argumentit puuttuu: {params}',
     'Missing required parameters: {params}' => 'Pakolliset parametrit puuttuu: {params}',
     'No' => 'Ei',
-    'No help for unknown command "{command}".' => 'Ei ohjetta tuntemattomalle komennolle "{command}".',
-    'No help for unknown sub-command "{command}".' => 'Ei ohjetta tuntemattomalle alikomennolle "{command}".',
     'No results found.' => 'Ei tuloksia.',
     'Only files with these MIME types are allowed: {mimeTypes}.' => 'Sallittuja ovat vain tiedostot, joiden MIME-tyyppi on: {mimeTypes}.',
     'Only files with these extensions are allowed: {extensions}.' => 'Sallittuja ovat vain tiedostot, joiden tiedostopääte on: {extensions}.',
@@ -73,7 +48,6 @@ return [
     'The verification code is incorrect.' => 'Vahvistuskoodi on virheellinen.',
     'Total <b>{count, number}</b> {count, plural, one{item} other{items}}.' => 'Yhteensä <b>{count, number}</b> {count, plural, one{tulos} other{tulosta}}.',
     'Unable to verify your data submission.' => 'Tietojen lähetystä ei voida varmistaa.',
-    'Unknown command "{command}".' => 'Tuntematon komento "{command}".',
     'Unknown option: --{name}' => 'Tuntematon valinta: --{name}',
     'Update' => 'Päivitä',
     'View' => 'Näytä',
@@ -86,6 +60,7 @@ return [
     'in {delta, plural, =1{a second} other{# seconds}}' => '{delta, plural, =1{sekunnissa} other{# sekunnissa}}',
     'in {delta, plural, =1{a year} other{# years}}' => '{delta, plural, =1{vuodessa} other{# vuodessa}}',
     'in {delta, plural, =1{an hour} other{# hours}}' => '{delta, plural, =1{tunnissa} other{# tunnissa}}',
+    'just now' => 'juuri nyt',
     'the input value' => 'syötetty arvo',
     '{attribute} "{value}" has already been taken.' => '{attribute} "{value}" on jo käytössä.',
     '{attribute} cannot be blank.' => '{attribute} ei voi olla tyhjä.',
@@ -114,4 +89,26 @@ return [
     '{delta, plural, =1{a second} other{# seconds}} ago' => '{delta, plural, =1{sekunti} other{# sekuntia}} sitten',
     '{delta, plural, =1{a year} other{# years}} ago' => '{delta, plural, =1{vuosi} other{# vuotta}} sitten',
     '{delta, plural, =1{an hour} other{# hours}} ago' => '{delta, plural, =1{tunti} other{# tuntia}} sitten',
+    '{nFormatted} B' => '{nFormatted} t',
+    '{nFormatted} GB' => '{nFormatted} Gt',
+    '{nFormatted} GiB' => '{nFormatted} GiB',
+    '{nFormatted} KB' => '{nFormatted} kt',
+    '{nFormatted} KiB' => '{nFormatted} KiB',
+    '{nFormatted} MB' => '{nFormatted} Mt',
+    '{nFormatted} MiB' => '{nFormatted} MiB',
+    '{nFormatted} PB' => '{nFormatted} Pt',
+    '{nFormatted} PiB' => '{nFormatted} PiB',
+    '{nFormatted} TB' => '{nFormatted} Tt',
+    '{nFormatted} TiB' => '{nFormatted} TiB',
+    '{nFormatted} {n, plural, =1{byte} other{bytes}}' => '{nFormatted} {n, plural, =1{tavu} other{tavua}}',
+    '{nFormatted} {n, plural, =1{gibibyte} other{gibibytes}}' => '{nFormatted} {n, plural, =1{gibitavu} other{gibitavua}}',
+    '{nFormatted} {n, plural, =1{gigabyte} other{gigabytes}}' => '{nFormatted} {n, plural, =1{gigatavu} other{gigatavua}}',
+    '{nFormatted} {n, plural, =1{kibibyte} other{kibibytes}}' => '{nFormatted} {n, plural, =1{kibitavu} other{kibitavua}}',
+    '{nFormatted} {n, plural, =1{kilobyte} other{kilobytes}}' => '{nFormatted} {n, plural, =1{kilotavu} other{kilotavua}}',
+    '{nFormatted} {n, plural, =1{mebibyte} other{mebibytes}}' => '{nFormatted} {n, plural, =1{mebitavu} other{mebitavua}}',
+    '{nFormatted} {n, plural, =1{megabyte} other{megabytes}}' => '{nFormatted} {n, plural, =1{megatavu} other{megatavua}}',
+    '{nFormatted} {n, plural, =1{pebibyte} other{pebibytes}}' => '{nFormatted} {n, plural, =1{pebitavu} other{pebitavua}}',
+    '{nFormatted} {n, plural, =1{petabyte} other{petabytes}}' => '{nFormatted} {n, plural, =1{petatavu} other{petatavua}}',
+    '{nFormatted} {n, plural, =1{tebibyte} other{tebibytes}}' => '{nFormatted} {n, plural, =1{tebitavu} other{tebitavua}}',
+    '{nFormatted} {n, plural, =1{terabyte} other{terabytes}}' => '{nFormatted} {n, plural, =1{teratavu} other{teratavua}}',
 ];
diff --git a/framework/messages/ja/yii.php b/framework/messages/ja/yii.php
index 45ee1ff..54e608d 100644
--- a/framework/messages/ja/yii.php
+++ b/framework/messages/ja/yii.php
@@ -17,6 +17,44 @@
  * NOTE: this file must be saved in UTF-8 encoding.
  */
 return [
+    'Are you sure you want to delete this item?' => 'このアイテムを削除しても本当にかまいませんか?',
+    'Only files with these MIME types are allowed: {mimeTypes}.' => '以下の MIME タイプのファイルだけが許可されています: {mimeTypes}',
+    'The requested view "{name}" was not found.' => 'リクエストされたビュー "{name}" が見つかりませんでした。',
+    'in {delta, plural, =1{a day} other{# days}}' => '{delta} 日後',
+    'in {delta, plural, =1{a minute} other{# minutes}}' => '{delta} 分後',
+    'in {delta, plural, =1{a month} other{# months}}' => '{delta} ヶ月後',
+    'in {delta, plural, =1{a second} other{# seconds}}' => '{delta} 秒後',
+    'in {delta, plural, =1{a year} other{# years}}' => '{delta} 年後',
+    'in {delta, plural, =1{an hour} other{# hours}}' => '{delta} 時間後',
+    'just now' => '現在',
+    '{delta, plural, =1{a day} other{# days}} ago' => '{delta} 日前',
+    '{delta, plural, =1{a minute} other{# minutes}} ago' => '{delta} 分前',
+    '{delta, plural, =1{a month} other{# months}} ago' => '{delta} ヶ月前',
+    '{delta, plural, =1{a second} other{# seconds}} ago' => '{delta} 秒前',
+    '{delta, plural, =1{a year} other{# years}} ago' => '{delta} 年前',
+    '{delta, plural, =1{an hour} other{# hours}} ago' => '{delta} 時間前',
+    '{nFormatted} B' => '{nFormatted} B',
+    '{nFormatted} GB' => '{nFormatted} GB',
+    '{nFormatted} GiB' => '{nFormatted} GiB',
+    '{nFormatted} KB' => '{nFormatted} KB',
+    '{nFormatted} KiB' => '{nFormatted} KiB',
+    '{nFormatted} MB' => '{nFormatted} MB',
+    '{nFormatted} MiB' => '{nFormatted} MiB',
+    '{nFormatted} PB' => '{nFormatted} PB',
+    '{nFormatted} PiB' => '{nFormatted} PiB',
+    '{nFormatted} TB' => '{nFormatted} TB',
+    '{nFormatted} TiB' => '{nFormatted} TiB',
+    '{nFormatted} {n, plural, =1{byte} other{bytes}}' => '{nFormatted} バイト',
+    '{nFormatted} {n, plural, =1{gibibyte} other{gibibytes}}' => '{nFormatted} ギビバイト',
+    '{nFormatted} {n, plural, =1{gigabyte} other{gigabytes}}' => '{nFormatted} ギガバイト',
+    '{nFormatted} {n, plural, =1{kibibyte} other{kibibytes}}' => '{nFormatted} キビバイト',
+    '{nFormatted} {n, plural, =1{kilobyte} other{kilobytes}}' => '{nFormatted} キロバイト',
+    '{nFormatted} {n, plural, =1{mebibyte} other{mebibytes}}' => '{nFormatted} メビバイト',
+    '{nFormatted} {n, plural, =1{megabyte} other{megabytes}}' => '{nFormatted} メガバイト',
+    '{nFormatted} {n, plural, =1{pebibyte} other{pebibytes}}' => '{nFormatted} ペビバイト',
+    '{nFormatted} {n, plural, =1{petabyte} other{petabytes}}' => '{nFormatted} ペタバイト',
+    '{nFormatted} {n, plural, =1{tebibyte} other{tebibytes}}' => '{nFormatted} テビバイト',
+    '{nFormatted} {n, plural, =1{terabyte} other{terabytes}}' => '{nFormatted} テラバイト',
     '(not set)' => '(セットされていません)',
     'An internal server error occurred.' => 'サーバー内部エラーが発生しました。',
     'Delete' => '削除',
@@ -28,8 +66,6 @@ return [
     'Missing required arguments: {params}' => '必要な引数がありません: {params}',
     'Missing required parameters: {params}' => '必要なパラメータがありません: {params}',
     'No' => 'いいえ',
-    'No help for unknown command "{command}".' => '不明なコマンド "{command}" にはヘルプがありません。',
-    'No help for unknown sub-command "{command}".' => '不明なサブコマンド "{command}" にはヘルプがありません。',
     'No results found.' => '結果が得られませんでした。',
     'Only files with these extensions are allowed: {extensions}.' => '次の拡張子を持つファイルだけが許可されています : {extensions}',
     'Page not found.' => 'ページが見つかりません。',
@@ -47,7 +83,6 @@ return [
     'The verification code is incorrect.' => '検証コードが正しくありません。',
     'Total <b>{count, number}</b> {count, plural, one{item} other{items}}.' => '合計 {count} 件。',
     'Unable to verify your data submission.' => 'データ送信を検証できませんでした。',
-    'Unknown command "{command}".' => '不明なコマンド "{command}" 。',
     'Unknown option: --{name}' => '不明なオプション: --{name}',
     'Update' => '更新',
     'View' => '閲覧',
diff --git a/framework/messages/sv/yii.php b/framework/messages/sv/yii.php
new file mode 100644
index 0000000..f318d70
--- /dev/null
+++ b/framework/messages/sv/yii.php
@@ -0,0 +1,114 @@
+<?php
+/**
+ * Message translations.
+ *
+ * This file is automatically generated by 'yii message' command.
+ * It contains the localizable messages extracted from source code.
+ * You may modify this file by translating the extracted messages.
+ *
+ * Each array element represents the translation (value) of a message (key).
+ * If the value is empty, the message is considered as not translated.
+ * Messages that no longer need translation will have their translations
+ * enclosed between a pair of '@@' marks.
+ *
+ * Message string can be used with plural forms format. Check i18n section
+ * of the guide for details.
+ *
+ * NOTE: this file must be saved in UTF-8 encoding.
+ */
+return [
+    '(not set)' => '(ej satt)',
+    'An internal server error occurred.' => 'Ett internt serverfel har inträffat.',
+    'Are you sure you want to delete this item?' => 'Är du säker på att du vill radera objektet?',
+    'Delete' => 'Radera',
+    'Error' => 'Error',
+    'File upload failed.' => 'Uppladdningen misslyckades.',
+    'Home' => 'Hem',
+    'Invalid data received for parameter "{param}".' => 'Ogiltig data har mottagits för parameter "{param}".',
+    'Login Required' => 'Inloggning krävs',
+    'Missing required arguments: {params}' => 'Följande begärda variabler saknas: {params}',
+    'Missing required parameters: {params}' => 'Följande begärda parametrar saknas: {params}',
+    'No' => 'Nej',
+    'No results found.' => 'Inga resultat hittades.',
+    'Only files with these MIME types are allowed: {mimeTypes}.' => 'Endast filer med följande MIME-typer är tillåtna: {mimeTypes}',
+    'Only files with these extensions are allowed: {extensions}.' => 'Endast filer med följande filnamnstillägg är tillåtna: {extensions}',
+    'Page not found.' => 'Sidan hittades inte.',
+    'Please fix the following errors:' => 'Var god fixa följande fel:',
+    'Please upload a file.' => 'Var god ladda upp en fil.',
+    'Showing <b>{begin, number}-{end, number}</b> of <b>{totalCount, number}</b> {totalCount, plural, one{item} other{items}}.' => 'Visar <b>{begin, number}-{end, number}</b> av <b>{totalCount, number}</b> objekt.',
+    'The file "{file}" is not an image.' => 'Filen "{file}" är inte en bild.',
+    'The file "{file}" is too big. Its size cannot exceed {limit, number} {limit, plural, one{byte} other{bytes}}.' => 'Filen "{file}" är för stor. Filstorleken får inte överskrida {limit, number} {limit, plural, one{byte} other{byte}}.',
+    'The file "{file}" is too small. Its size cannot be smaller than {limit, number} {limit, plural, one{byte} other{bytes}}.' => 'Filen "{file}" är för liten. Filstorleken måste vara minst {limit, number} {limit, plural, one{byte} other{byte}}.',
+    'The format of {attribute} is invalid.' => 'Formatet för "{attribute}" är ogiltigt.',
+    'The image "{file}" is too large. The height cannot be larger than {limit, number} {limit, plural, one{pixel} other{pixels}}.' => 'Bilden "{file}" är för stor. Höjden får inte överskrida {limit, number} {limit, plural, =1{pixel} other{pixlar}}.',
+    'The image "{file}" is too large. The width cannot be larger than {limit, number} {limit, plural, one{pixel} other{pixels}}.' => 'Bilden "{file}" är för stor. Bredden får inte överskrida {limit, number} {limit, plural, =1{pixel} other{pixlar}}.',
+    'The image "{file}" is too small. The height cannot be smaller than {limit, number} {limit, plural, one{pixel} other{pixels}}.' => 'Bilden "{file}" är för liten. Bilden måste vara minst {limit, number} {limit, plural, =1{pixel} other{pixlar}} hög.',
+    'The image "{file}" is too small. The width cannot be smaller than {limit, number} {limit, plural, one{pixel} other{pixels}}.' => 'Bilden "{file}" är för liten. Bilden måste vara minst {limit, number} {limit, plural, =1{pixel} other{pixlar}} bred.',
+    'The requested view "{name}" was not found.' => 'Den begärda vyn "{name}" kunde inte hittas.',
+    'The verification code is incorrect.' => 'Verifieringskoden är felaktig.',
+    'Total <b>{count, number}</b> {count, plural, one{item} other{items}}.' => 'Totalt <b>{count, number}</b> objekt.',
+    'Unable to verify your data submission.' => 'Det gick inte att verifiera skickad data.',
+    'Unknown option: --{name}' => 'Okänt alternativ: --{name}',
+    'Update' => 'Uppdatera',
+    'View' => 'Visa',
+    'Yes' => 'Ja',
+    'You are not allowed to perform this action.' => 'Du har inte behörighet att utföra den här åtgärden.',
+    'You can upload at most {limit, number} {limit, plural, one{file} other{files}}.' => 'Du får inte ladda upp mer än {limit, number} {limit, plural, =1{fil} other{filer}}.',
+    'in {delta, plural, =1{a day} other{# days}}' => 'under {delta, plural, =1{en dag} other{# dagar}}',
+    'in {delta, plural, =1{a minute} other{# minutes}}' => 'under {delta, plural, =1{en minut} other{# minuter}}',
+    'in {delta, plural, =1{a month} other{# months}}' => 'under {delta, plural, =1{en månad} other{# månader}}',
+    'in {delta, plural, =1{a second} other{# seconds}}' => 'under {delta, plural, =1{en sekund} other{# sekunder}}',
+    'in {delta, plural, =1{a year} other{# years}}' => 'under {delta, plural, =1{ett år} other{# år}}',
+    'in {delta, plural, =1{an hour} other{# hours}}' => 'under {delta, plural, =1{en timme} other{# timmar}}',
+    'just now' => 'just nu',
+    'the input value' => 'inmatningsvärdet',
+    '{attribute} "{value}" has already been taken.' => '{attribute} "{value}" används redan.',
+    '{attribute} cannot be blank.' => 'Värdet för {attribute} får inte vara tomt.',
+    '{attribute} is invalid.' => 'Värdet för {attribute} är ogiltigt.',
+    '{attribute} is not a valid URL.' => '{attribute} är inte en giltig URL.',
+    '{attribute} is not a valid email address.' => '{attribute} är inte en giltig emailadress.',
+    '{attribute} must be "{requiredValue}".' => '{attribute} måste vara satt till "{requiredValue}".',
+    '{attribute} must be a number.' => '{attribute} måste vara ett nummer.',
+    '{attribute} must be a string.' => '{attribute} måste vara en sträng.',
+    '{attribute} must be an integer.' => '{attribute} måste vara ett heltal.',
+    '{attribute} must be either "{true}" or "{false}".' => '{attribute} måste vara satt till antingen "{true}" eller "{false}".',
+    '{attribute} must be greater than "{compareValue}".' => '{attribute} måste vara större än "{compareValue}".',
+    '{attribute} must be greater than or equal to "{compareValue}".' => '{attribute} måste vara större än eller lika med "{compareValue}".',
+    '{attribute} must be less than "{compareValue}".' => '{attribute} måste vara mindre än "{compareValue}".',
+    '{attribute} must be less than or equal to "{compareValue}".' => '{attribute} måste vara mindre än eller lika med "{compareValue}".',
+    '{attribute} must be no greater than {max}.' => '{attribute} får inte överskrida {max}.',
+    '{attribute} must be no less than {min}.' => '{attribute} får som minst vara {min}.',
+    '{attribute} must be repeated exactly.' => '{attribute} måste upprepas exakt.',
+    '{attribute} must not be equal to "{compareValue}".' => '{attribute} får inte vara satt till "{compareValue}".',
+    '{attribute} should contain at least {min, number} {min, plural, one{character} other{characters}}.' => '{attribute} bör innehålla minst {min, number} tecken.',
+    '{attribute} should contain at most {max, number} {max, plural, one{character} other{characters}}.' => '{attribute} bör innehålla max {max, number} tecken.',
+    '{attribute} should contain {length, number} {length, plural, one{character} other{characters}}.' => '{attribute} bör innehålla {length, number} tecken.',
+    '{delta, plural, =1{a day} other{# days}} ago' => '{delta, plural, =1{en dag} other{# dagar}} sedan',
+    '{delta, plural, =1{a minute} other{# minutes}} ago' => '{delta, plural, =1{en minut} other{# minuter}} sedan',
+    '{delta, plural, =1{a month} other{# months}} ago' => '{delta, plural, =1{en månad} other{# månader}} sedan',
+    '{delta, plural, =1{a second} other{# seconds}} ago' => '{delta, plural, =1{en sekund} other{# sekunder}} sedan',
+    '{delta, plural, =1{a year} other{# years}} ago' => '{delta, plural, =1{ett år} other{# år}} sedan',
+    '{delta, plural, =1{an hour} other{# hours}} ago' => '{delta, plural, =1{en timme} other{# timmar}} sedan',
+    '{nFormatted} B' => '{nFormatted} B',
+    '{nFormatted} GB' => '{nFormatted} GB',
+    '{nFormatted} GiB' => '{nFormatted} GiB',
+    '{nFormatted} KB' => '{nFormatted} KB',
+    '{nFormatted} KiB' => '{nFormatted} KiB',
+    '{nFormatted} MB' => '{nFormatted} MB',
+    '{nFormatted} MiB' => '{nFormatted} MiB',
+    '{nFormatted} PB' => '{nFormatted} PB',
+    '{nFormatted} PiB' => '{nFormatted} PiB',
+    '{nFormatted} TB' => '{nFormatted} TB',
+    '{nFormatted} TiB' => '{nFormatted} TiB',
+    '{nFormatted} {n, plural, =1{byte} other{bytes}}' => '{nFormatted} {n, plural, =1{byte} other{byte}}',
+    '{nFormatted} {n, plural, =1{gibibyte} other{gibibytes}}' => '{nFormatted} {n, plural, =1{gibibyte} other{gibibyte}}',
+    '{nFormatted} {n, plural, =1{gigabyte} other{gigabytes}}' => '{nFormatted} {n, plural, =1{gigabyte} other{gigabyte}}',
+    '{nFormatted} {n, plural, =1{kibibyte} other{kibibytes}}' => '{nFormatted} {n, plural, =1{kibibyte} other{kibibyte}}',
+    '{nFormatted} {n, plural, =1{kilobyte} other{kilobytes}}' => '{nFormatted} {n, plural, =1{kilobyte} other{kilobyte}}',
+    '{nFormatted} {n, plural, =1{mebibyte} other{mebibytes}}' => '{nFormatted} {n, plural, =1{mebibyte} other{mebibyte}}',
+    '{nFormatted} {n, plural, =1{megabyte} other{megabytes}}' => '{nFormatted} {n, plural, =1{megabyte} other{megabyte}}',
+    '{nFormatted} {n, plural, =1{pebibyte} other{pebibytes}}' => '{nFormatted} {n, plural, =1{pebibyte} other{pebibyte}}',
+    '{nFormatted} {n, plural, =1{petabyte} other{petabytes}}' => '{nFormatted} {n, plural, =1{petabyte} other{petabyte}}',
+    '{nFormatted} {n, plural, =1{tebibyte} other{tebibytes}}' => '{nFormatted} {n, plural, =1{tebibyte} other{tebibyte}}',
+    '{nFormatted} {n, plural, =1{terabyte} other{terabytes}}' => '{nFormatted} {n, plural, =1{terabyte} other{terabyte}}',
+];
diff --git a/framework/rbac/DbManager.php b/framework/rbac/DbManager.php
index 068ac21..775c6e8 100644
--- a/framework/rbac/DbManager.php
+++ b/framework/rbac/DbManager.php
@@ -285,7 +285,7 @@ class DbManager extends BaseManager
     {
         if (!$this->supportsCascadeUpdate()) {
             $this->db->createCommand()
-                ->delete($this->itemTable, ['rule_name' => $rule->name])
+                ->update($this->itemTable, ['rule_name' => null], ['rule_name' => $rule->name])
                 ->execute();
         }
 
@@ -342,6 +342,10 @@ class DbManager extends BaseManager
      */
     public function getRolesByUser($userId)
     {
+        if (empty($userId)) {
+            return [];
+        }
+
         $query = (new Query)->select('b.*')
             ->from(['a' => $this->assignmentTable, 'b' => $this->itemTable])
             ->where('a.item_name=b.name')
@@ -381,6 +385,10 @@ class DbManager extends BaseManager
      */
     public function getPermissionsByUser($userId)
     {
+        if (empty($userId)) {
+            return [];
+        }
+
         $query = (new Query)->select('item_name')
             ->from($this->assignmentTable)
             ->where(['user_id' => (string)$userId]);
@@ -469,6 +477,10 @@ class DbManager extends BaseManager
      */
     public function getAssignment($roleName, $userId)
     {
+        if (empty($userId)) {
+            return null;
+        }
+
         $row = (new Query)->from($this->assignmentTable)
             ->where(['user_id' => (string)$userId, 'item_name' => $roleName])
             ->one($this->db);
@@ -489,6 +501,10 @@ class DbManager extends BaseManager
      */
     public function getAssignments($userId)
     {
+        if (empty($userId)) {
+            return [];
+        }
+
         $query = (new Query)
             ->from($this->assignmentTable)
             ->where(['user_id' => (string)$userId]);
@@ -623,6 +639,10 @@ class DbManager extends BaseManager
      */
     public function revoke($role, $userId)
     {
+        if (empty($userId)) {
+            return false;
+        }
+
         return $this->db->createCommand()
             ->delete($this->assignmentTable, ['user_id' => (string)$userId, 'item_name' => $role->name])
             ->execute() > 0;
@@ -633,6 +653,10 @@ class DbManager extends BaseManager
      */
     public function revokeAll($userId)
     {
+        if (empty($userId)) {
+            return false;
+        }
+
         return $this->db->createCommand()
             ->delete($this->assignmentTable, ['user_id' => (string)$userId])
             ->execute() > 0;
diff --git a/framework/validators/DateValidator.php b/framework/validators/DateValidator.php
index 42767fd..eee0ca3 100644
--- a/framework/validators/DateValidator.php
+++ b/framework/validators/DateValidator.php
@@ -113,6 +113,12 @@ class DateValidator extends Validator
         return $this->parseDateValue($value) === false ? [$this->message, []] : null;
     }
 
+    /**
+     * Parses date string into UNIX timestamp
+     *
+     * @param string $value string representing date
+     * @return boolean|integer UNIX timestamp or false on failure
+     */
     protected function parseDateValue($value)
     {
         if (is_array($value)) {
diff --git a/framework/web/AssetManager.php b/framework/web/AssetManager.php
index a4195b2..278d37c 100644
--- a/framework/web/AssetManager.php
+++ b/framework/web/AssetManager.php
@@ -201,6 +201,15 @@ class AssetManager extends Component
         }
     }
 
+    /**
+     * Loads asset bundle class by name
+     *
+     * @param string $name bundle name
+     * @param array $config bundle object configuration
+     * @param boolean $publish if bundle should be published
+     * @return AssetBundle
+     * @throws InvalidConfigException if configuration isn't valid
+     */
     protected function loadBundle($name, $config = [], $publish = true)
     {
         if (!isset($config['class'])) {
@@ -214,6 +223,12 @@ class AssetManager extends Component
         return $bundle;
     }
 
+    /**
+     * Loads dummy bundle by name
+     *
+     * @param string $name
+     * @return AssetBundle
+     */
     protected function loadDummyBundle($name)
     {
         if (!isset($this->_dummyBundles[$name])) {
diff --git a/framework/web/DbSession.php b/framework/web/DbSession.php
index e4bd7ff..3ab6082 100644
--- a/framework/web/DbSession.php
+++ b/framework/web/DbSession.php
@@ -66,7 +66,9 @@ class DbSession extends Session
      * When using DbSession in a production server, we recommend you create a DB index for the 'expire'
      * column in the session table to improve the performance.
      *
-     * Note that length of id column should be adjusted if `session.hash_function` is changed in `php.ini`.
+     * Note that according to the php.ini setting of `session.hash_function`, you may need to adjust
+     * the length of the `id` column. For example, if `session.hash_function=sha256`, you should use
+     * length 64 instead of 40.
      */
     public $sessionTable = '{{%session}}';
 
diff --git a/framework/web/Request.php b/framework/web/Request.php
index 391c086..9951224 100644
--- a/framework/web/Request.php
+++ b/framework/web/Request.php
@@ -1287,7 +1287,6 @@ class Request extends \yii\base\Request
             $config['value'] = $token;
             Yii::$app->getResponse()->getCookies()->add(new Cookie($config));
         } else {
-            $token = Yii::$app->getSecurity()->generateRandomString();
             Yii::$app->getSession()->set($this->csrfParam, $token);
         }
         return $token;
diff --git a/framework/web/Session.php b/framework/web/Session.php
index 4cf7c88..7a77eab 100644
--- a/framework/web/Session.php
+++ b/framework/web/Session.php
@@ -43,7 +43,8 @@ use yii\base\InvalidParamException;
  * useful for displaying confirmation messages. To use flash messages, simply
  * call methods such as [[setFlash()]], [[getFlash()]].
  *
- * @property array $allFlashes Flash messages (key => message). This property is read-only.
+ * @property array $allFlashes Flash messages (key => message or key => [message1, message2]). This property
+ * is read-only.
  * @property array $cookieParams The session cookie parameters. This property is read-only.
  * @property integer $count The number of session variables. This property is read-only.
  * @property string $flash The key identifying the flash message. Note that flash messages and normal session
diff --git a/framework/web/UrlManager.php b/framework/web/UrlManager.php
index 9e1ae1f..359e6ac 100644
--- a/framework/web/UrlManager.php
+++ b/framework/web/UrlManager.php
@@ -243,7 +243,7 @@ class UrlManager extends Component
             $suffix = (string) $this->suffix;
             if ($suffix !== '' && $pathInfo !== '') {
                 $n = strlen($this->suffix);
-                if (substr_compare($pathInfo, $this->suffix, -$n) === 0) {
+                if (substr_compare($pathInfo, $this->suffix, -$n, $n) === 0) {
                     $pathInfo = substr($pathInfo, 0, -$n);
                     if ($pathInfo === '') {
                         // suffix alone is not allowed
diff --git a/framework/web/UrlRule.php b/framework/web/UrlRule.php
index 8387f49..64cbbc9 100644
--- a/framework/web/UrlRule.php
+++ b/framework/web/UrlRule.php
@@ -219,7 +219,7 @@ class UrlRule extends Object implements UrlRuleInterface
         $suffix = (string) ($this->suffix === null ? $manager->suffix : $this->suffix);
         if ($suffix !== '' && $pathInfo !== '') {
             $n = strlen($suffix);
-            if (substr_compare($pathInfo, $suffix, -$n) === 0) {
+            if (substr_compare($pathInfo, $suffix, -$n, $n) === 0) {
                 $pathInfo = substr($pathInfo, 0, -$n);
                 if ($pathInfo === '') {
                     // suffix alone is not allowed
diff --git a/framework/widgets/MaskedInput.php b/framework/widgets/MaskedInput.php
index f920ba3..0d49a82 100644
--- a/framework/widgets/MaskedInput.php
+++ b/framework/widgets/MaskedInput.php
@@ -59,7 +59,7 @@ class MaskedInput extends InputWidget
      * @var array custom mask definitions to use. Should be configured as `maskSymbol => settings`, where
      *
      * - `maskSymbol` is a string, containing a character to identify your mask definition and
-     * - `settings` is an array, consisiting of the following entries:
+     * - `settings` is an array, consisting of the following entries:
      *   - `validator`: string, a JS regular expression or a JS function.
      *   - `cardinality`: int, specifies how many characters are represented and validated for the definition.
      *   - `prevalidator`: array, validate the characters before the definition cardinality is reached.
diff --git a/tests/unit/data/ar/mongodb/CustomerOrder.php b/tests/unit/data/ar/mongodb/CustomerOrder.php
index 8016bb0..c3d406d 100644
--- a/tests/unit/data/ar/mongodb/CustomerOrder.php
+++ b/tests/unit/data/ar/mongodb/CustomerOrder.php
@@ -15,7 +15,7 @@ class CustomerOrder extends ActiveRecord
             '_id',
             'number',
             'customer_id',
-            'items',
+            'item_ids',
         ];
     }
 
@@ -23,4 +23,9 @@ class CustomerOrder extends ActiveRecord
     {
         return $this->hasOne(Customer::className(), ['_id' => 'customer_id']);
     }
+
+    public function getItems()
+    {
+        return $this->hasMany(Item::className(), ['_id' => 'item_ids']);
+    }
 }
diff --git a/tests/unit/data/ar/mongodb/Item.php b/tests/unit/data/ar/mongodb/Item.php
new file mode 100644
index 0000000..63a21ac
--- /dev/null
+++ b/tests/unit/data/ar/mongodb/Item.php
@@ -0,0 +1,20 @@
+<?php
+
+namespace yiiunit\data\ar\mongodb;
+
+class Item extends ActiveRecord
+{
+    public static function collectionName()
+    {
+        return 'item';
+    }
+
+    public function attributes()
+    {
+        return [
+            '_id',
+            'name',
+            'price',
+        ];
+    }
+}
\ No newline at end of file
diff --git a/tests/unit/data/travis/README.md b/tests/unit/data/travis/README.md
index ad9538d..f30aa12 100644
--- a/tests/unit/data/travis/README.md
+++ b/tests/unit/data/travis/README.md
@@ -6,9 +6,15 @@ The scripts are:
 
  - [`apc-setup.sh`](apc-setup.sh)
    Installs and configures the [apc pecl extension](http://pecl.php.net/package/apc)
- - [`memcache-setup.sh`](memcache-setup.sh)
-   Compiles and installs the [memcache pecl extension](http://pecl.php.net/package/memcache)
  - [`cubrid-setup.sh`](cubrid-setup.sh)
    Prepares the [CUBRID](http://www.cubrid.org/) server instance by installing the server and PHP PDO driver
+ - [`init-apps.sh`](init-apps.sh)
+   Prepare test environment for basic and advanced application
+ - [`memcache-setup.sh`](memcache-setup.sh)
+   Compiles and installs the [memcache pecl extension](http://pecl.php.net/package/memcache)
+ - [`mongodb-setup.sh`](mongodb-setup.sh)
+   Enables Mongo DB PHP extension
+ - [`setup-apps.sh`](setup-apps.sh)
+   Prepare test environment for basic and advanced application
  - [`sphinx-setup.sh`](sphinx-setup.sh)
    Prepares the [Sphinx](http://sphinxsearch.com/) server instances by installing the server and attaching it to MySQL
\ No newline at end of file
diff --git a/tests/unit/data/travis/apc-setup.sh b/tests/unit/data/travis/apc-setup.sh
index 3925267..d64e8a5 100755
--- a/tests/unit/data/travis/apc-setup.sh
+++ b/tests/unit/data/travis/apc-setup.sh
@@ -1,4 +1,4 @@
-#!/bin/sh
+#!/bin/sh -e
 
 if [ "$(expr "$TRAVIS_PHP_VERSION" "<" "5.5")" -eq 1 ]; then
 	echo "extension = apc.so" >> ~/.phpenv/versions/$(phpenv version-name)/etc/php.ini
diff --git a/tests/unit/data/travis/cubrid-setup.sh b/tests/unit/data/travis/cubrid-setup.sh
index 67b4bf2..5621795 100755
--- a/tests/unit/data/travis/cubrid-setup.sh
+++ b/tests/unit/data/travis/cubrid-setup.sh
@@ -1,4 +1,4 @@
-#!/bin/sh
+#!/bin/sh -e
 #
 # install CUBRID DBMS
 
@@ -71,7 +71,7 @@ install_pdo_cubrid() {
     return $?
 }
 
-install_pdo_cubrid > ~/pdo_cubrid.log || ( echo "=== PDO CUBRID BUILD FAILED ==="; cat ~/pdo_cubrid.log )
+install_pdo_cubrid > ~/pdo_cubrid.log || ( echo "=== PDO CUBRID BUILD FAILED ==="; cat ~/pdo_cubrid.log; exit 1 )
 
 echo ""
 echo "Installed CUBRID PDO $CUBRID_PDO_VERSION"
diff --git a/tests/unit/data/travis/init-apps.sh b/tests/unit/data/travis/init-apps.sh
index 2e775e9..0ed39ee 100755
--- a/tests/unit/data/travis/init-apps.sh
+++ b/tests/unit/data/travis/init-apps.sh
@@ -1,4 +1,4 @@
-#!/bin/sh
+#!/bin/sh -e
 
 if (php --version | grep -i HipHop > /dev/null); then
   echo "skipping application init on HHVM"
diff --git a/tests/unit/data/travis/memcache-setup.sh b/tests/unit/data/travis/memcache-setup.sh
index 38be22b..e8b99e7 100755
--- a/tests/unit/data/travis/memcache-setup.sh
+++ b/tests/unit/data/travis/memcache-setup.sh
@@ -1,4 +1,4 @@
-#!/bin/sh
+#!/bin/sh -e
 
 if (php --version | grep -i HipHop > /dev/null); then
   echo "skipping memcache on HHVM"
diff --git a/tests/unit/data/travis/mongodb-setup.sh b/tests/unit/data/travis/mongodb-setup.sh
index 1bcf100..a1de061 100755
--- a/tests/unit/data/travis/mongodb-setup.sh
+++ b/tests/unit/data/travis/mongodb-setup.sh
@@ -1,10 +1,14 @@
-#!/bin/sh
+#!/bin/sh -e
 #
 # install mongodb
 
 mongod --version
 
-echo "extension = mongo.so" >> ~/.phpenv/versions/$(phpenv version-name)/etc/php.ini
+if (php --version | grep -i HipHop > /dev/null); then
+  echo "mongodb does not work on HHVM currently, skipping"
+else
+  echo "extension = mongo.so" >> ~/.phpenv/versions/$(phpenv version-name)/etc/php.ini
+fi
 
 # enable text search
 mongo --eval 'db.adminCommand( { setParameter: true, textSearchEnabled : true})'
diff --git a/tests/unit/data/travis/setup-apps.sh b/tests/unit/data/travis/setup-apps.sh
index 1ef31cf..6c3abec 100755
--- a/tests/unit/data/travis/setup-apps.sh
+++ b/tests/unit/data/travis/setup-apps.sh
@@ -1,4 +1,4 @@
-#!/bin/sh
+#!/bin/sh -e
 
 if (php --version | grep -i HipHop > /dev/null); then
   echo "skipping application setup on HHVM"
diff --git a/tests/unit/data/travis/sphinx-setup.sh b/tests/unit/data/travis/sphinx-setup.sh
index 92599d4..5f6388f 100755
--- a/tests/unit/data/travis/sphinx-setup.sh
+++ b/tests/unit/data/travis/sphinx-setup.sh
@@ -1,4 +1,4 @@
-#!/bin/sh
+#!/bin/sh -e
 SCRIPT=$(readlink -f "$0")
 CWD=$(dirname "$SCRIPT")
 
diff --git a/tests/unit/extensions/authclient/BaseClientTest.php b/tests/unit/extensions/authclient/BaseClientTest.php
index 95bdcbd..af1beaa 100644
--- a/tests/unit/extensions/authclient/BaseClientTest.php
+++ b/tests/unit/extensions/authclient/BaseClientTest.php
@@ -55,25 +55,99 @@ class BaseClientTest extends TestCase
     }
 
     /**
+     * Data provider for [[testNormalizeUserAttributes()]]
+     * @return array test data
+     */
+    public function dataProviderNormalizeUserAttributes()
+    {
+        return [
+            [
+                [
+                    'name' => 'raw/name',
+                    'email' => 'raw/email',
+                ],
+                [
+                    'raw/name' => 'name value',
+                    'raw/email' => 'email value',
+                ],
+                [
+                    'name' => 'name value',
+                    'email' => 'email value',
+                ],
+            ],
+            [
+                [
+                    'name' => function ($attributes) {
+                            return $attributes['firstName'] . ' ' . $attributes['lastName'];
+                        },
+                ],
+                [
+                    'firstName' => 'John',
+                    'lastName' => 'Smith',
+                ],
+                [
+                    'name' => 'John Smith',
+                ],
+            ],
+            [
+                [
+                    'email' => ['emails', 'prime'],
+                ],
+                [
+                    'emails' => [
+                        'prime' => 'some@email.com'
+                    ],
+                ],
+                [
+                    'email' => 'some@email.com',
+                ],
+            ],
+            [
+                [
+                    'email' => ['emails', 0],
+                    'secondaryEmail' => ['emails', 1],
+                ],
+                [
+                    'emails' => [
+                        'some@email.com',
+                    ],
+                ],
+                [
+                    'email' => 'some@email.com',
+                ],
+            ],
+            [
+                [
+                    'name' => 'file_get_contents',
+                ],
+                [
+                    'file_get_contents' => 'value',
+                ],
+                [
+                    'name' => 'value',
+                ],
+            ],
+        ];
+    }
+
+    /**
+     * @dataProvider dataProviderNormalizeUserAttributes
+     *
      * @depends testSetGet
+     *
+     * @param array $normalizeUserAttributeMap
+     * @param array $rawUserAttributes
+     * @param array $expectedNormalizedUserAttributes
      */
-    public function testNormalizeUserAttributes()
+    public function testNormalizeUserAttributes($normalizeUserAttributeMap, $rawUserAttributes, $expectedNormalizedUserAttributes)
     {
         $client = new Client();
-
-        $normalizeUserAttributeMap = [
-            'raw/name' => 'name',
-            'raw/email' => 'email',
-        ];
         $client->setNormalizeUserAttributeMap($normalizeUserAttributeMap);
-        $rawUserAttributes = [
-            'raw/name' => 'name value',
-            'raw/email' => 'email value',
-        ];
+
         $client->setUserAttributes($rawUserAttributes);
         $normalizedUserAttributes = $client->getUserAttributes();
-        $expectedNormalizedUserAttributes = array_combine(array_keys($normalizeUserAttributeMap), array_values($rawUserAttributes));
-        $this->assertEquals($expectedNormalizedUserAttributes, $normalizedUserAttributes);
+
+        $this->assertEquals(array_merge($rawUserAttributes, $expectedNormalizedUserAttributes), $normalizedUserAttributes);
     }
 }
 
diff --git a/tests/unit/extensions/mongodb/ActiveRelationTest.php b/tests/unit/extensions/mongodb/ActiveRelationTest.php
index 0945ab8..1212537 100644
--- a/tests/unit/extensions/mongodb/ActiveRelationTest.php
+++ b/tests/unit/extensions/mongodb/ActiveRelationTest.php
@@ -30,8 +30,6 @@ class ActiveRelationTest extends MongoDbTestCase
      */
     protected function setUpTestRows()
     {
-        $customerCollection = $this->getConnection()->getCollection('customer');
-
         $customers = [];
         for ($i = 1; $i <= 5; $i++) {
             $customers[] = [
@@ -41,20 +39,39 @@ class ActiveRelationTest extends MongoDbTestCase
                 'status' => $i,
             ];
         }
-        $customerCollection->batchInsert($customers);
+        $customerCollection = $this->getConnection()->getCollection('customer');
+        $customers = $customerCollection->batchInsert($customers);
+
+        $items = [];
+        for ($i = 1; $i <= 10; $i++) {
+            $items[] = [
+                'name' => 'name' . $i,
+                'price' => $i,
+            ];
+        }
+        $itemCollection = $this->getConnection()->getCollection('item');
+        $items = $itemCollection->batchInsert($items);
 
-        $customerOrderCollection = $this->getConnection()->getCollection('customer_order');
         $customerOrders = [];
-        foreach ($customers as $customer) {
+        foreach ($customers as $i => $customer) {
             $customerOrders[] = [
                 'customer_id' => $customer['_id'],
                 'number' => $customer['status'],
+                'item_ids' => [
+                    $items[$i]['_id'],
+                    $items[$i+5]['_id'],
+                ],
             ];
             $customerOrders[] = [
                 'customer_id' => $customer['_id'],
                 'number' => $customer['status'] + 100,
+                'item_ids' => [
+                    $items[$i]['_id'],
+                    $items[$i+5]['_id'],
+                ],
             ];
         }
+        $customerOrderCollection = $this->getConnection()->getCollection('customer_order');
         $customerOrderCollection->batchInsert($customerOrders);
     }
 
@@ -83,4 +100,15 @@ class ActiveRelationTest extends MongoDbTestCase
         $this->assertTrue($orders[1]->customer instanceof Customer);
         $this->assertEquals((string) $orders[1]->customer->_id, (string) $orders[1]->customer_id);
     }
+
+    /**
+     * @see https://github.com/yiisoft/yii2/issues/5411
+     *
+     * @depends testFindEager
+     */
+    public function testFindEagerHasManyByArrayKey()
+    {
+        $order = CustomerOrder::find()->where(['number' => 1])->with('items')->one();
+        $this->assertNotEmpty($order->items);
+    }
 }
diff --git a/tests/unit/extensions/mongodb/ConnectionTest.php b/tests/unit/extensions/mongodb/ConnectionTest.php
index 72e1c88..b97c661 100644
--- a/tests/unit/extensions/mongodb/ConnectionTest.php
+++ b/tests/unit/extensions/mongodb/ConnectionTest.php
@@ -61,7 +61,45 @@ class ConnectionTest extends MongoDbTestCase
     }
 
     /**
+     * Data provider for [[testFetchDefaultDatabaseName()]]
+     * @return array test data
+     */
+    public function dataProviderFetchDefaultDatabaseName()
+    {
+        return [
+            [
+                'mongodb://travis:test@localhost:27017/dbname',
+                'dbname',
+            ],
+            [
+                'mongodb://travis:test@localhost:27017/dbname?replicaSet=test&connectTimeoutMS=300000',
+                'dbname',
+            ],
+        ];
+    }
+
+    /**
+     * @dataProvider dataProviderFetchDefaultDatabaseName
+     *
+     * @param string $dsn
+     * @param string $databaseName
+     */
+    public function testFetchDefaultDatabaseName($dsn, $databaseName)
+    {
+        $connection = new Connection();
+        $connection->dsn = $dsn;
+
+        $reflection = new \ReflectionObject($connection);
+        $method = $reflection->getMethod('fetchDefaultDatabaseName');
+        $method->setAccessible(true);
+        $method->invoke($connection);
+
+        $this->assertEquals($databaseName, $connection->defaultDatabaseName);
+    }
+
+    /**
      * @depends testGetDatabase
+     * @depends testFetchDefaultDatabaseName
      */
     public function testGetDefaultDatabase()
     {
diff --git a/tests/unit/extensions/sphinx/QueryTest.php b/tests/unit/extensions/sphinx/QueryTest.php
index 28858fd..2fdf7fb 100644
--- a/tests/unit/extensions/sphinx/QueryTest.php
+++ b/tests/unit/extensions/sphinx/QueryTest.php
@@ -132,6 +132,22 @@ class QueryTest extends SphinxTestCase
         $this->assertEquals(['team', 'company', 'age'], $query->groupBy);
     }
 
+    public function testHaving()
+    {
+        $query = new Query;
+        $query->having('id = :id', [':id' => 1]);
+        $this->assertEquals('id = :id', $query->having);
+        $this->assertEquals([':id' => 1], $query->params);
+
+        $query->andHaving('name = :name', [':name' => 'something']);
+        $this->assertEquals(['and', 'id = :id', 'name = :name'], $query->having);
+        $this->assertEquals([':id' => 1, ':name' => 'something'], $query->params);
+
+        $query->orHaving('age = :age', [':age' => '30']);
+        $this->assertEquals(['or', ['and', 'id = :id', 'name = :name'], 'age = :age'], $query->having);
+        $this->assertEquals([':id' => 1, ':name' => 'something', ':age' => '30'], $query->params);
+    }
+
     public function testOrder()
     {
         $query = new Query;
diff --git a/tests/unit/framework/console/controllers/AssetControllerTest.php b/tests/unit/framework/console/controllers/AssetControllerTest.php
index 6f476cc..e5b7b4f 100644
--- a/tests/unit/framework/console/controllers/AssetControllerTest.php
+++ b/tests/unit/framework/console/controllers/AssetControllerTest.php
@@ -360,6 +360,18 @@ EOL;
             ],
             [
                 "@font-face {
+                src: url('../fonts/glyphicons-halflings-regular.eot');
+                src: url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype');
+                }",
+                '/test/base/path/assets/input/css',
+                '/test/base/path/assets',
+                "@font-face {
+                src: url('input/fonts/glyphicons-halflings-regular.eot');
+                src: url('input/fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype');
+                }",
+            ],
+            [
+                "@font-face {
                 src: url(data:application/x-font-ttf;charset=utf-8;base64,AAEAAAALAIAAAwAwT==) format('truetype');
                 }",
                 '/test/base/path/assets/input/css',
@@ -368,6 +380,12 @@ EOL;
                 src: url(data:application/x-font-ttf;charset=utf-8;base64,AAEAAAALAIAAAwAwT==) format('truetype');
                 }",
             ],
+            [
+                '.published-same-dir-class {background-image: url(published_same_dir.png);}',
+                'C:\test\base\path\assets\input',
+                'C:\test\base\path\assets\output',
+                '.published-same-dir-class {background-image: url(../input/published_same_dir.png);}',
+            ],
         ];
     }
 
diff --git a/tests/unit/framework/db/SchemaTest.php b/tests/unit/framework/db/SchemaTest.php
index 61275df..aeaf36e 100644
--- a/tests/unit/framework/db/SchemaTest.php
+++ b/tests/unit/framework/db/SchemaTest.php
@@ -51,7 +51,7 @@ class SchemaTest extends DatabaseTestCase
         $schema->db->enableSchemaCache = true;
         $schema->db->schemaCache = new FileCache();
         $noCacheTable = $schema->getTableSchema('type', true);
-        $cachedTable = $schema->getTableSchema('type', true);
+        $cachedTable = $schema->getTableSchema('type', false);
         $this->assertEquals($noCacheTable, $cachedTable);
     }
 
diff --git a/tests/unit/framework/i18n/FormatterTest.php b/tests/unit/framework/i18n/FormatterTest.php
index 3f38dfd..268ad9b 100644
--- a/tests/unit/framework/i18n/FormatterTest.php
+++ b/tests/unit/framework/i18n/FormatterTest.php
@@ -143,6 +143,8 @@ class FormatterTest extends TestCase
     {
         $value = 'test@sample.com';
         $this->assertSame("<a href=\"mailto:$value\">$value</a>", $this->formatter->asEmail($value));
+        $value = 'test@sample.com';
+        $this->assertSame("<a href=\"mailto:$value\" target=\"_blank\">$value</a>", $this->formatter->asEmail($value, ['target' => '_blank']));
 
         // null display
         $this->assertSame($this->formatter->nullDisplay, $this->formatter->asEmail(null));
@@ -158,6 +160,8 @@ class FormatterTest extends TestCase
         $this->assertSame("<a href=\"http://$value\">$value</a>", $this->formatter->asUrl($value));
         $value = 'https://www.yiiframework.com/?name=test&value=5"';
         $this->assertSame("<a href=\"https://www.yiiframework.com/?name=test&amp;value=5&quot;\">https://www.yiiframework.com/?name=test&amp;value=5&quot;</a>", $this->formatter->asUrl($value));
+        $value = 'http://www.yiiframework.com/';
+        $this->assertSame("<a href=\"$value\" target=\"_blank\">$value</a>", $this->formatter->asUrl($value, ['target' => '_blank']));
 
         // null display
         $this->assertSame($this->formatter->nullDisplay, $this->formatter->asUrl(null));
@@ -167,6 +171,9 @@ class FormatterTest extends TestCase
     {
         $value = 'http://sample.com/img.jpg';
         $this->assertSame("<img src=\"$value\" alt=\"\">", $this->formatter->asImage($value));
+        $value = 'http://sample.com/img.jpg';
+        $alt = "Hello!";
+        $this->assertSame("<img src=\"$value\" alt=\"$alt\">", $this->formatter->asImage($value, ['alt' => $alt]));
 
         // null display
         $this->assertSame($this->formatter->nullDisplay, $this->formatter->asImage(null));