commit 136189e6ccced9b8e5dd579cf491c54247b1aae0
Author: Andrew Berry <deviantintegral@gmail.com>
Date:   Fri Feb 6 15:06:03 2015 -0500

    Upgrade to Composer 1.0.0-alpha9.

diff --git a/composer.drush.json b/composer.drush.json
index 4b69642..5913ac4 100644
--- a/composer.drush.json
+++ b/composer.drush.json
@@ -1 +1 @@
-{"commands":[{"name":"about","usage":"about","description":"Short information about Composer","help":"<info>php composer.phar about<\/info>","aliases":[],"definition":{"arguments":[],"options":{"help":{"name":"--help","shortcut":"-h","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Display this help message.","default":false},"quiet":{"name":"--quiet","shortcut":"-q","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Do not output any message.","default":false},"verbose":{"name":"--verbose","shortcut":"-v|-vv|-vvv","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug","default":false},"version":{"name":"--version","shortcut":"-V","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Display this application version.","default":false},"ansi":{"name":"--ansi","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Force ANSI output.","default":false},"no-ansi":{"name":"--no-ansi","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Disable ANSI output.","default":false},"no-interaction":{"name":"--no-interaction","shortcut":"-n","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Do not ask any interactive question.","default":false},"profile":{"name":"--profile","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Display timing and memory usage information","default":false},"working-dir":{"name":"--working-dir","shortcut":"-d","accept_value":true,"is_value_required":true,"is_multiple":false,"description":"If specified, use the given directory as working directory.","default":null}}}},{"name":"archive","usage":"archive [-f|--format=\"...\"] [--dir=\"...\"] [package] [version]","description":"Create an archive of this composer package","help":"The <info>archive<\/info> command creates an archive of the specified format\ncontaining the files and directories of the Composer project or the specified\npackage in the specified version and writes it to the specified directory.\n\n<info>php composer.phar archive [--format=zip] [--dir=\/foo] [package [version]]<\/info>\n","aliases":[],"definition":{"arguments":{"package":{"name":"package","is_required":false,"is_array":false,"description":"The package to archive instead of the current project","default":null},"version":{"name":"version","is_required":false,"is_array":false,"description":"The package version to archive","default":null}},"options":{"format":{"name":"--format","shortcut":"-f","accept_value":true,"is_value_required":true,"is_multiple":false,"description":"Format of the resulting archive: tar or zip","default":"tar"},"dir":{"name":"--dir","shortcut":"","accept_value":true,"is_value_required":true,"is_multiple":false,"description":"Write the archive to this directory","default":"."},"help":{"name":"--help","shortcut":"-h","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Display this help message.","default":false},"quiet":{"name":"--quiet","shortcut":"-q","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Do not output any message.","default":false},"verbose":{"name":"--verbose","shortcut":"-v|-vv|-vvv","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug","default":false},"version":{"name":"--version","shortcut":"-V","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Display this application version.","default":false},"ansi":{"name":"--ansi","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Force ANSI output.","default":false},"no-ansi":{"name":"--no-ansi","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Disable ANSI output.","default":false},"no-interaction":{"name":"--no-interaction","shortcut":"-n","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Do not ask any interactive question.","default":false},"profile":{"name":"--profile","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Display timing and memory usage information","default":false},"working-dir":{"name":"--working-dir","shortcut":"-d","accept_value":true,"is_value_required":true,"is_multiple":false,"description":"If specified, use the given directory as working directory.","default":null}}}},{"name":"config","usage":"config [-g|--global] [-e|--editor] [--unset] [-l|--list] [-f|--file=\"...\"] [setting-key] [setting-value1] ... [setting-valueN]","description":"Set config options","help":"This command allows you to edit some basic composer settings in either the\nlocal composer.json file or the global config.json file.\n\nTo edit the global config.json file:\n\n    <comment>vendor\/composer\/composer\/bin\/composer config --global<\/comment>\n\nTo add a repository:\n\n    <comment>vendor\/composer\/composer\/bin\/composer config repositories.foo vcs http:\/\/bar.com<\/comment>\n\nYou can add a repository to the global config.json file by passing in the\n<info>--global<\/info> option.\n\nTo edit the file in an external editor:\n\n    <comment>vendor\/composer\/composer\/bin\/composer config --editor<\/comment>\n\nTo choose your editor you can set the \"EDITOR\" env variable.\n\nTo get a list of configuration values in the file:\n\n    <comment>vendor\/composer\/composer\/bin\/composer config --list<\/comment>\n\nYou can always pass more than one option. As an example, if you want to edit the\nglobal config.json file.\n\n    <comment>vendor\/composer\/composer\/bin\/composer config --editor --global<\/comment>","aliases":[],"definition":{"arguments":{"setting-key":{"name":"setting-key","is_required":false,"is_array":false,"description":"Setting key","default":null},"setting-value":{"name":"setting-value","is_required":false,"is_array":true,"description":"Setting value","default":[]}},"options":{"global":{"name":"--global","shortcut":"-g","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Apply command to the global config file","default":false},"editor":{"name":"--editor","shortcut":"-e","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Open editor","default":false},"unset":{"name":"--unset","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Unset the given setting-key","default":false},"list":{"name":"--list","shortcut":"-l","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"List configuration settings","default":false},"file":{"name":"--file","shortcut":"-f","accept_value":true,"is_value_required":true,"is_multiple":false,"description":"If you want to choose a different composer.json or config.json","default":"composer.json"},"help":{"name":"--help","shortcut":"-h","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Display this help message.","default":false},"quiet":{"name":"--quiet","shortcut":"-q","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Do not output any message.","default":false},"verbose":{"name":"--verbose","shortcut":"-v|-vv|-vvv","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug","default":false},"version":{"name":"--version","shortcut":"-V","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Display this application version.","default":false},"ansi":{"name":"--ansi","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Force ANSI output.","default":false},"no-ansi":{"name":"--no-ansi","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Disable ANSI output.","default":false},"no-interaction":{"name":"--no-interaction","shortcut":"-n","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Do not ask any interactive question.","default":false},"profile":{"name":"--profile","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Display timing and memory usage information","default":false},"working-dir":{"name":"--working-dir","shortcut":"-d","accept_value":true,"is_value_required":true,"is_multiple":false,"description":"If specified, use the given directory as working directory.","default":null}}}},{"name":"create-project","usage":"create-project [-s|--stability=\"...\"] [--prefer-source] [--prefer-dist] [--repository-url=\"...\"] [--dev] [--no-dev] [--no-plugins] [--no-custom-installers] [--no-scripts] [--no-progress] [--keep-vcs] [--no-install] [package] [directory] [version]","description":"Create new project from a package into given directory.","help":"The <info>create-project<\/info> command creates a new project from a given\npackage into a new directory. If executed without params and in a directory\nwith a composer.json file it installs the packages for the current project.\n\nYou can use this command to bootstrap new projects or setup a clean\nversion-controlled installation for developers of your project.\n\n<info>php composer.phar create-project vendor\/project target-directory [version]<\/info>\n\nYou can also specify the version with the package name using = or : as separator.\n\nTo install unstable packages, either specify the version you want, or use the\n--stability=dev (where dev can be one of RC, beta, alpha or dev).\n\nTo setup a developer workable version you should create the project using the source\ncontrolled code by appending the <info>'--prefer-source'<\/info> flag.\n\nTo install a package from another repository than the default one you\ncan pass the <info>'--repository-url=http:\/\/myrepository.org'<\/info> flag.\n","aliases":[],"definition":{"arguments":{"package":{"name":"package","is_required":false,"is_array":false,"description":"Package name to be installed","default":null},"directory":{"name":"directory","is_required":false,"is_array":false,"description":"Directory where the files should be created","default":null},"version":{"name":"version","is_required":false,"is_array":false,"description":"Version, will defaults to latest","default":null}},"options":{"stability":{"name":"--stability","shortcut":"-s","accept_value":true,"is_value_required":true,"is_multiple":false,"description":"Minimum-stability allowed (unless a version is specified).","default":null},"prefer-source":{"name":"--prefer-source","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Forces installation from package sources when possible, including VCS information.","default":false},"prefer-dist":{"name":"--prefer-dist","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Forces installation from package dist even for dev versions.","default":false},"repository-url":{"name":"--repository-url","shortcut":"","accept_value":true,"is_value_required":true,"is_multiple":false,"description":"Pick a different repository url to look for the package.","default":null},"dev":{"name":"--dev","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Enables installation of require-dev packages (enabled by default, only present for BC).","default":false},"no-dev":{"name":"--no-dev","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Disables installation of require-dev packages.","default":false},"no-plugins":{"name":"--no-plugins","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Whether to disable plugins.","default":false},"no-custom-installers":{"name":"--no-custom-installers","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"DEPRECATED: Use no-plugins instead.","default":false},"no-scripts":{"name":"--no-scripts","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Whether to prevent execution of all defined scripts in the root package.","default":false},"no-progress":{"name":"--no-progress","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Do not output download progress.","default":false},"keep-vcs":{"name":"--keep-vcs","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Whether to prevent deletion vcs folder.","default":false},"no-install":{"name":"--no-install","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Whether to skip installation of the package dependencies.","default":false},"help":{"name":"--help","shortcut":"-h","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Display this help message.","default":false},"quiet":{"name":"--quiet","shortcut":"-q","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Do not output any message.","default":false},"verbose":{"name":"--verbose","shortcut":"-v|-vv|-vvv","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug","default":false},"version":{"name":"--version","shortcut":"-V","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Display this application version.","default":false},"ansi":{"name":"--ansi","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Force ANSI output.","default":false},"no-ansi":{"name":"--no-ansi","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Disable ANSI output.","default":false},"no-interaction":{"name":"--no-interaction","shortcut":"-n","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Do not ask any interactive question.","default":false},"profile":{"name":"--profile","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Display timing and memory usage information","default":false},"working-dir":{"name":"--working-dir","shortcut":"-d","accept_value":true,"is_value_required":true,"is_multiple":false,"description":"If specified, use the given directory as working directory.","default":null}}}},{"name":"depends","usage":"depends [--link-type=\"...\"] package","description":"Shows which packages depend on the given package","help":"Displays detailed information about where a package is referenced.\n\n<info>php composer.phar depends composer\/composer<\/info>\n","aliases":[],"definition":{"arguments":{"package":{"name":"package","is_required":true,"is_array":false,"description":"Package to inspect","default":null}},"options":{"link-type":{"name":"--link-type","shortcut":"","accept_value":true,"is_value_required":true,"is_multiple":true,"description":"Link types to show (require, require-dev)","default":["require","require-dev"]},"help":{"name":"--help","shortcut":"-h","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Display this help message.","default":false},"quiet":{"name":"--quiet","shortcut":"-q","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Do not output any message.","default":false},"verbose":{"name":"--verbose","shortcut":"-v|-vv|-vvv","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug","default":false},"version":{"name":"--version","shortcut":"-V","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Display this application version.","default":false},"ansi":{"name":"--ansi","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Force ANSI output.","default":false},"no-ansi":{"name":"--no-ansi","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Disable ANSI output.","default":false},"no-interaction":{"name":"--no-interaction","shortcut":"-n","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Do not ask any interactive question.","default":false},"profile":{"name":"--profile","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Display timing and memory usage information","default":false},"working-dir":{"name":"--working-dir","shortcut":"-d","accept_value":true,"is_value_required":true,"is_multiple":false,"description":"If specified, use the given directory as working directory.","default":null}}}},{"name":"diagnose","usage":"diagnose","description":"Diagnoses the system to identify common errors.","help":"The <info>diagnose<\/info> command checks common errors to help debugging problems.\n","aliases":[],"definition":{"arguments":[],"options":{"help":{"name":"--help","shortcut":"-h","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Display this help message.","default":false},"quiet":{"name":"--quiet","shortcut":"-q","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Do not output any message.","default":false},"verbose":{"name":"--verbose","shortcut":"-v|-vv|-vvv","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug","default":false},"version":{"name":"--version","shortcut":"-V","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Display this application version.","default":false},"ansi":{"name":"--ansi","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Force ANSI output.","default":false},"no-ansi":{"name":"--no-ansi","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Disable ANSI output.","default":false},"no-interaction":{"name":"--no-interaction","shortcut":"-n","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Do not ask any interactive question.","default":false},"profile":{"name":"--profile","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Display timing and memory usage information","default":false},"working-dir":{"name":"--working-dir","shortcut":"-d","accept_value":true,"is_value_required":true,"is_multiple":false,"description":"If specified, use the given directory as working directory.","default":null}}}},{"name":"dump-autoload","usage":"dump-autoload [-o|--optimize]","description":"Dumps the autoloader","help":"<info>php composer.phar dump-autoload<\/info>","aliases":["dumpautoload"],"definition":{"arguments":[],"options":{"optimize":{"name":"--optimize","shortcut":"-o","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Optimizes PSR0 packages to be loaded with classmaps too, good for production.","default":false},"help":{"name":"--help","shortcut":"-h","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Display this help message.","default":false},"quiet":{"name":"--quiet","shortcut":"-q","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Do not output any message.","default":false},"verbose":{"name":"--verbose","shortcut":"-v|-vv|-vvv","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug","default":false},"version":{"name":"--version","shortcut":"-V","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Display this application version.","default":false},"ansi":{"name":"--ansi","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Force ANSI output.","default":false},"no-ansi":{"name":"--no-ansi","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Disable ANSI output.","default":false},"no-interaction":{"name":"--no-interaction","shortcut":"-n","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Do not ask any interactive question.","default":false},"profile":{"name":"--profile","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Display timing and memory usage information","default":false},"working-dir":{"name":"--working-dir","shortcut":"-d","accept_value":true,"is_value_required":true,"is_multiple":false,"description":"If specified, use the given directory as working directory.","default":null}}}},{"name":"global","usage":"global command-name [args1] ... [argsN]","description":"Allows running commands in the global composer dir ($COMPOSER_HOME).","help":"Use this command as a wrapper to run other Composer commands\nwithin the global context of COMPOSER_HOME.\n\nYou can use this to install CLI utilities globally, all you need\nis to add the COMPOSER_HOME\/vendor\/bin dir to your PATH env var.\n\nCOMPOSER_HOME is c:\\Users\\<user>\\AppData\\Roaming\\Composer on Windows\nand \/home\/<user>\/.composer on unix systems.\n\nNote: This path may vary depending on customizations to bin-dir in\ncomposer.json or the environmental variable COMPOSER_BIN_DIR.\n","aliases":[],"definition":{"arguments":{"command-name":{"name":"command-name","is_required":true,"is_array":false,"description":"","default":null},"args":{"name":"args","is_required":false,"is_array":true,"description":"","default":[]}},"options":{"help":{"name":"--help","shortcut":"-h","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Display this help message.","default":false},"quiet":{"name":"--quiet","shortcut":"-q","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Do not output any message.","default":false},"verbose":{"name":"--verbose","shortcut":"-v|-vv|-vvv","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug","default":false},"version":{"name":"--version","shortcut":"-V","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Display this application version.","default":false},"ansi":{"name":"--ansi","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Force ANSI output.","default":false},"no-ansi":{"name":"--no-ansi","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Disable ANSI output.","default":false},"no-interaction":{"name":"--no-interaction","shortcut":"-n","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Do not ask any interactive question.","default":false},"profile":{"name":"--profile","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Display timing and memory usage information","default":false},"working-dir":{"name":"--working-dir","shortcut":"-d","accept_value":true,"is_value_required":true,"is_multiple":false,"description":"If specified, use the given directory as working directory.","default":null}}}},{"name":"help","usage":"help [--xml] [--format=\"...\"] [--raw] [command_name]","description":"Displays help for a command","help":"The <info>help<\/info> command displays help for a given command:\n\n  <info>php vendor\/composer\/composer\/bin\/composer help list<\/info>\n\nYou can also output the help in other formats by using the <comment>--format<\/comment> option:\n\n  <info>php vendor\/composer\/composer\/bin\/composer help --format=xml list<\/info>\n\nTo display the list of available commands, please use the <info>list<\/info> command.","aliases":[],"definition":{"arguments":{"command_name":{"name":"command_name","is_required":false,"is_array":false,"description":"The command name","default":"help"}},"options":{"xml":{"name":"--xml","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"To output help as XML","default":false},"format":{"name":"--format","shortcut":"","accept_value":true,"is_value_required":true,"is_multiple":false,"description":"To output help in other formats","default":"txt"},"raw":{"name":"--raw","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"To output raw command help","default":false},"help":{"name":"--help","shortcut":"-h","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Display this help message.","default":false},"quiet":{"name":"--quiet","shortcut":"-q","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Do not output any message.","default":false},"verbose":{"name":"--verbose","shortcut":"-v|-vv|-vvv","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug","default":false},"version":{"name":"--version","shortcut":"-V","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Display this application version.","default":false},"ansi":{"name":"--ansi","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Force ANSI output.","default":false},"no-ansi":{"name":"--no-ansi","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Disable ANSI output.","default":false},"no-interaction":{"name":"--no-interaction","shortcut":"-n","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Do not ask any interactive question.","default":false},"profile":{"name":"--profile","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Display timing and memory usage information","default":false},"working-dir":{"name":"--working-dir","shortcut":"-d","accept_value":true,"is_value_required":true,"is_multiple":false,"description":"If specified, use the given directory as working directory.","default":null}}}},{"name":"init","usage":"init [--name=\"...\"] [--description=\"...\"] [--author=\"...\"] [--homepage=\"...\"] [--require=\"...\"] [--require-dev=\"...\"] [-s|--stability=\"...\"] [-l|--license=\"...\"]","description":"Creates a basic composer.json file in current directory.","help":"The <info>init<\/info> command creates a basic composer.json file\nin the current directory.\n\n<info>php composer.phar init<\/info>\n","aliases":[],"definition":{"arguments":[],"options":{"name":{"name":"--name","shortcut":"","accept_value":true,"is_value_required":true,"is_multiple":false,"description":"Name of the package","default":null},"description":{"name":"--description","shortcut":"","accept_value":true,"is_value_required":true,"is_multiple":false,"description":"Description of package","default":null},"author":{"name":"--author","shortcut":"","accept_value":true,"is_value_required":true,"is_multiple":false,"description":"Author name of package","default":null},"homepage":{"name":"--homepage","shortcut":"","accept_value":true,"is_value_required":true,"is_multiple":false,"description":"Homepage of package","default":null},"require":{"name":"--require","shortcut":"","accept_value":true,"is_value_required":true,"is_multiple":true,"description":"Package to require with a version constraint, e.g. foo\/bar:1.0.0 or foo\/bar=1.0.0 or \"foo\/bar 1.0.0\"","default":[]},"require-dev":{"name":"--require-dev","shortcut":"","accept_value":true,"is_value_required":true,"is_multiple":true,"description":"Package to require for development with a version constraint, e.g. foo\/bar:1.0.0 or foo\/bar=1.0.0 or \"foo\/bar 1.0.0\"","default":[]},"stability":{"name":"--stability","shortcut":"-s","accept_value":true,"is_value_required":true,"is_multiple":false,"description":"Minimum stability (empty or one of: stable, RC, beta, alpha, dev)","default":null},"license":{"name":"--license","shortcut":"-l","accept_value":true,"is_value_required":true,"is_multiple":false,"description":"License of package","default":null},"help":{"name":"--help","shortcut":"-h","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Display this help message.","default":false},"quiet":{"name":"--quiet","shortcut":"-q","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Do not output any message.","default":false},"verbose":{"name":"--verbose","shortcut":"-v|-vv|-vvv","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug","default":false},"version":{"name":"--version","shortcut":"-V","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Display this application version.","default":false},"ansi":{"name":"--ansi","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Force ANSI output.","default":false},"no-ansi":{"name":"--no-ansi","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Disable ANSI output.","default":false},"no-interaction":{"name":"--no-interaction","shortcut":"-n","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Do not ask any interactive question.","default":false},"profile":{"name":"--profile","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Display timing and memory usage information","default":false},"working-dir":{"name":"--working-dir","shortcut":"-d","accept_value":true,"is_value_required":true,"is_multiple":false,"description":"If specified, use the given directory as working directory.","default":null}}}},{"name":"install","usage":"install [--prefer-source] [--prefer-dist] [--dry-run] [--dev] [--no-dev] [--no-plugins] [--no-custom-installers] [--no-scripts] [--no-progress] [-v|vv|vvv|--verbose] [-o|--optimize-autoloader]","description":"Installs the project dependencies from the composer.lock file if present, or falls back on the composer.json.","help":"The <info>install<\/info> command reads the composer.lock file from\nthe current directory, processes it, and downloads and installs all the\nlibraries and dependencies outlined in that file. If the file does not\nexist it will look for composer.json and do the same.\n\n<info>php composer.phar install<\/info>\n","aliases":[],"definition":{"arguments":[],"options":{"prefer-source":{"name":"--prefer-source","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Forces installation from package sources when possible, including VCS information.","default":false},"prefer-dist":{"name":"--prefer-dist","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Forces installation from package dist even for dev versions.","default":false},"dry-run":{"name":"--dry-run","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Outputs the operations but will not execute anything (implicitly enables --verbose).","default":false},"dev":{"name":"--dev","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Enables installation of require-dev packages (enabled by default, only present for BC).","default":false},"no-dev":{"name":"--no-dev","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Disables installation of require-dev packages.","default":false},"no-plugins":{"name":"--no-plugins","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Disables all plugins.","default":false},"no-custom-installers":{"name":"--no-custom-installers","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"DEPRECATED: Use no-plugins instead.","default":false},"no-scripts":{"name":"--no-scripts","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Skips the execution of all scripts defined in composer.json file.","default":false},"no-progress":{"name":"--no-progress","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Do not output download progress.","default":false},"verbose":{"name":"--verbose","shortcut":"-v|-vv|-vvv","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug","default":false},"optimize-autoloader":{"name":"--optimize-autoloader","shortcut":"-o","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Optimize autoloader during autoloader dump","default":false},"help":{"name":"--help","shortcut":"-h","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Display this help message.","default":false},"quiet":{"name":"--quiet","shortcut":"-q","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Do not output any message.","default":false},"version":{"name":"--version","shortcut":"-V","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Display this application version.","default":false},"ansi":{"name":"--ansi","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Force ANSI output.","default":false},"no-ansi":{"name":"--no-ansi","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Disable ANSI output.","default":false},"no-interaction":{"name":"--no-interaction","shortcut":"-n","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Do not ask any interactive question.","default":false},"profile":{"name":"--profile","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Display timing and memory usage information","default":false},"working-dir":{"name":"--working-dir","shortcut":"-d","accept_value":true,"is_value_required":true,"is_multiple":false,"description":"If specified, use the given directory as working directory.","default":null}}}},{"name":"licenses","usage":"licenses [-f|--format=\"...\"]","description":"Show information about licenses of dependencies","help":"The license command displays detailed information about the licenses of\nthe installed dependencies.\n","aliases":[],"definition":{"arguments":[],"options":{"format":{"name":"--format","shortcut":"-f","accept_value":true,"is_value_required":true,"is_multiple":false,"description":"Format of the output: text or json","default":"text"},"help":{"name":"--help","shortcut":"-h","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Display this help message.","default":false},"quiet":{"name":"--quiet","shortcut":"-q","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Do not output any message.","default":false},"verbose":{"name":"--verbose","shortcut":"-v|-vv|-vvv","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug","default":false},"version":{"name":"--version","shortcut":"-V","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Display this application version.","default":false},"ansi":{"name":"--ansi","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Force ANSI output.","default":false},"no-ansi":{"name":"--no-ansi","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Disable ANSI output.","default":false},"no-interaction":{"name":"--no-interaction","shortcut":"-n","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Do not ask any interactive question.","default":false},"profile":{"name":"--profile","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Display timing and memory usage information","default":false},"working-dir":{"name":"--working-dir","shortcut":"-d","accept_value":true,"is_value_required":true,"is_multiple":false,"description":"If specified, use the given directory as working directory.","default":null}}}},{"name":"list","usage":"list [--xml] [--raw] [--format=\"...\"] [namespace]","description":"Lists commands","help":"The <info>list<\/info> command lists all commands:\n\n  <info>php vendor\/composer\/composer\/bin\/composer list<\/info>\n\nYou can also display the commands for a specific namespace:\n\n  <info>php vendor\/composer\/composer\/bin\/composer list test<\/info>\n\nYou can also output the information in other formats by using the <comment>--format<\/comment> option:\n\n  <info>php vendor\/composer\/composer\/bin\/composer list --format=xml<\/info>\n\nIt's also possible to get raw list of commands (useful for embedding command runner):\n\n  <info>php vendor\/composer\/composer\/bin\/composer list --raw<\/info>","aliases":[],"definition":{"arguments":{"namespace":{"name":"namespace","is_required":false,"is_array":false,"description":"The namespace name","default":null}},"options":{"xml":{"name":"--xml","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"To output list as XML","default":false},"raw":{"name":"--raw","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"To output raw command list","default":false},"format":{"name":"--format","shortcut":"","accept_value":true,"is_value_required":true,"is_multiple":false,"description":"To output list in other formats","default":"txt"}}}},{"name":"require","usage":"require [--dev] [--prefer-source] [--prefer-dist] [--no-progress] [--no-update] [packages1] ... [packagesN]","description":"Adds required packages to your composer.json and installs them","help":"The require command adds required packages to your composer.json and installs them\n\nIf you do not want to install the new dependencies immediately you can call it with --no-update\n","aliases":[],"definition":{"arguments":{"packages":{"name":"packages","is_required":false,"is_array":true,"description":"Required package with a version constraint, e.g. foo\/bar:1.0.0 or foo\/bar=1.0.0 or \"foo\/bar 1.0.0\"","default":[]}},"options":{"dev":{"name":"--dev","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Add requirement to require-dev.","default":false},"prefer-source":{"name":"--prefer-source","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Forces installation from package sources when possible, including VCS information.","default":false},"prefer-dist":{"name":"--prefer-dist","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Forces installation from package dist even for dev versions.","default":false},"no-progress":{"name":"--no-progress","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Do not output download progress.","default":false},"no-update":{"name":"--no-update","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Disables the automatic update of the dependencies.","default":false},"help":{"name":"--help","shortcut":"-h","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Display this help message.","default":false},"quiet":{"name":"--quiet","shortcut":"-q","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Do not output any message.","default":false},"verbose":{"name":"--verbose","shortcut":"-v|-vv|-vvv","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug","default":false},"version":{"name":"--version","shortcut":"-V","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Display this application version.","default":false},"ansi":{"name":"--ansi","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Force ANSI output.","default":false},"no-ansi":{"name":"--no-ansi","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Disable ANSI output.","default":false},"no-interaction":{"name":"--no-interaction","shortcut":"-n","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Do not ask any interactive question.","default":false},"profile":{"name":"--profile","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Display timing and memory usage information","default":false},"working-dir":{"name":"--working-dir","shortcut":"-d","accept_value":true,"is_value_required":true,"is_multiple":false,"description":"If specified, use the given directory as working directory.","default":null}}}},{"name":"run-script","usage":"run-script [--dev] [--no-dev] script","description":"Run the scripts defined in composer.json.","help":"The <info>run-script<\/info> command runs scripts defined in composer.json:\n\n<info>php composer.phar run-script post-update-cmd<\/info>","aliases":[],"definition":{"arguments":{"script":{"name":"script","is_required":true,"is_array":false,"description":"Script name to run.","default":null}},"options":{"dev":{"name":"--dev","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Sets the dev mode.","default":false},"no-dev":{"name":"--no-dev","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Disables the dev mode.","default":false},"help":{"name":"--help","shortcut":"-h","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Display this help message.","default":false},"quiet":{"name":"--quiet","shortcut":"-q","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Do not output any message.","default":false},"verbose":{"name":"--verbose","shortcut":"-v|-vv|-vvv","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug","default":false},"version":{"name":"--version","shortcut":"-V","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Display this application version.","default":false},"ansi":{"name":"--ansi","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Force ANSI output.","default":false},"no-ansi":{"name":"--no-ansi","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Disable ANSI output.","default":false},"no-interaction":{"name":"--no-interaction","shortcut":"-n","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Do not ask any interactive question.","default":false},"profile":{"name":"--profile","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Display timing and memory usage information","default":false},"working-dir":{"name":"--working-dir","shortcut":"-d","accept_value":true,"is_value_required":true,"is_multiple":false,"description":"If specified, use the given directory as working directory.","default":null}}}},{"name":"search","usage":"search [-N|--only-name] tokens1 ... [tokensN]","description":"Search for packages","help":"The search command searches for packages by its name\n<info>php composer.phar search symfony composer<\/info>\n","aliases":[],"definition":{"arguments":{"tokens":{"name":"tokens","is_required":true,"is_array":true,"description":"tokens to search for","default":[]}},"options":{"only-name":{"name":"--only-name","shortcut":"-N","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Search only in name","default":false},"help":{"name":"--help","shortcut":"-h","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Display this help message.","default":false},"quiet":{"name":"--quiet","shortcut":"-q","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Do not output any message.","default":false},"verbose":{"name":"--verbose","shortcut":"-v|-vv|-vvv","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug","default":false},"version":{"name":"--version","shortcut":"-V","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Display this application version.","default":false},"ansi":{"name":"--ansi","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Force ANSI output.","default":false},"no-ansi":{"name":"--no-ansi","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Disable ANSI output.","default":false},"no-interaction":{"name":"--no-interaction","shortcut":"-n","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Do not ask any interactive question.","default":false},"profile":{"name":"--profile","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Display timing and memory usage information","default":false},"working-dir":{"name":"--working-dir","shortcut":"-d","accept_value":true,"is_value_required":true,"is_multiple":false,"description":"If specified, use the given directory as working directory.","default":null}}}},{"name":"show","usage":"show [-i|--installed] [-p|--platform] [-a|--available] [-s|--self] [-N|--name-only] [package] [version]","description":"Show information about packages","help":"The show command displays detailed information about a package, or\nlists all packages available.\n","aliases":[],"definition":{"arguments":{"package":{"name":"package","is_required":false,"is_array":false,"description":"Package to inspect","default":null},"version":{"name":"version","is_required":false,"is_array":false,"description":"Version or version constraint to inspect","default":null}},"options":{"installed":{"name":"--installed","shortcut":"-i","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"List installed packages only","default":false},"platform":{"name":"--platform","shortcut":"-p","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"List platform packages only","default":false},"available":{"name":"--available","shortcut":"-a","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"List available packages only","default":false},"self":{"name":"--self","shortcut":"-s","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Show the root package information","default":false},"name-only":{"name":"--name-only","shortcut":"-N","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"List package names only","default":false},"help":{"name":"--help","shortcut":"-h","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Display this help message.","default":false},"quiet":{"name":"--quiet","shortcut":"-q","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Do not output any message.","default":false},"verbose":{"name":"--verbose","shortcut":"-v|-vv|-vvv","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug","default":false},"version":{"name":"--version","shortcut":"-V","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Display this application version.","default":false},"ansi":{"name":"--ansi","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Force ANSI output.","default":false},"no-ansi":{"name":"--no-ansi","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Disable ANSI output.","default":false},"no-interaction":{"name":"--no-interaction","shortcut":"-n","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Do not ask any interactive question.","default":false},"profile":{"name":"--profile","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Display timing and memory usage information","default":false},"working-dir":{"name":"--working-dir","shortcut":"-d","accept_value":true,"is_value_required":true,"is_multiple":false,"description":"If specified, use the given directory as working directory.","default":null}}}},{"name":"status","usage":"status [-v|vv|vvv|--verbose]","description":"Show a list of locally modified packages","help":"The status command displays a list of dependencies that have\nbeen modified locally.\n","aliases":[],"definition":{"arguments":[],"options":{"verbose":{"name":"--verbose","shortcut":"-v|-vv|-vvv","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug","default":false},"help":{"name":"--help","shortcut":"-h","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Display this help message.","default":false},"quiet":{"name":"--quiet","shortcut":"-q","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Do not output any message.","default":false},"version":{"name":"--version","shortcut":"-V","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Display this application version.","default":false},"ansi":{"name":"--ansi","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Force ANSI output.","default":false},"no-ansi":{"name":"--no-ansi","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Disable ANSI output.","default":false},"no-interaction":{"name":"--no-interaction","shortcut":"-n","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Do not ask any interactive question.","default":false},"profile":{"name":"--profile","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Display timing and memory usage information","default":false},"working-dir":{"name":"--working-dir","shortcut":"-d","accept_value":true,"is_value_required":true,"is_multiple":false,"description":"If specified, use the given directory as working directory.","default":null}}}},{"name":"update","usage":"update [--prefer-source] [--prefer-dist] [--dry-run] [--dev] [--no-dev] [--lock] [--no-plugins] [--no-custom-installers] [--no-scripts] [--no-progress] [--with-dependencies] [-v|vv|vvv|--verbose] [-o|--optimize-autoloader] [packages1] ... [packagesN]","description":"Updates your dependencies to the latest version according to composer.json, and updates the composer.lock file.","help":"The <info>update<\/info> command reads the composer.json file from the\ncurrent directory, processes it, and updates, removes or installs all the\ndependencies.\n\n<info>php composer.phar update<\/info>\n\nTo limit the update operation to a few packages, you can list the package(s)\nyou want to update as such:\n\n<info>php composer.phar update vendor\/package1 foo\/mypackage [...]<\/info>","aliases":[],"definition":{"arguments":{"packages":{"name":"packages","is_required":false,"is_array":true,"description":"Packages that should be updated, if not provided all packages are.","default":[]}},"options":{"prefer-source":{"name":"--prefer-source","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Forces installation from package sources when possible, including VCS information.","default":false},"prefer-dist":{"name":"--prefer-dist","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Forces installation from package dist even for dev versions.","default":false},"dry-run":{"name":"--dry-run","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Outputs the operations but will not execute anything (implicitly enables --verbose).","default":false},"dev":{"name":"--dev","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Enables installation of require-dev packages (enabled by default, only present for BC).","default":false},"no-dev":{"name":"--no-dev","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Disables installation of require-dev packages.","default":false},"lock":{"name":"--lock","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Only updates the lock file hash to suppress warning about the lock file being out of date.","default":false},"no-plugins":{"name":"--no-plugins","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Disables all plugins.","default":false},"no-custom-installers":{"name":"--no-custom-installers","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"DEPRECATED: Use no-plugins instead.","default":false},"no-scripts":{"name":"--no-scripts","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Skips the execution of all scripts defined in composer.json file.","default":false},"no-progress":{"name":"--no-progress","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Do not output download progress.","default":false},"with-dependencies":{"name":"--with-dependencies","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Add also all dependencies of whitelisted packages to the whitelist.","default":false},"verbose":{"name":"--verbose","shortcut":"-v|-vv|-vvv","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug","default":false},"optimize-autoloader":{"name":"--optimize-autoloader","shortcut":"-o","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Optimize autoloader during autoloader dump.","default":false},"help":{"name":"--help","shortcut":"-h","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Display this help message.","default":false},"quiet":{"name":"--quiet","shortcut":"-q","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Do not output any message.","default":false},"version":{"name":"--version","shortcut":"-V","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Display this application version.","default":false},"ansi":{"name":"--ansi","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Force ANSI output.","default":false},"no-ansi":{"name":"--no-ansi","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Disable ANSI output.","default":false},"no-interaction":{"name":"--no-interaction","shortcut":"-n","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Do not ask any interactive question.","default":false},"profile":{"name":"--profile","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Display timing and memory usage information","default":false},"working-dir":{"name":"--working-dir","shortcut":"-d","accept_value":true,"is_value_required":true,"is_multiple":false,"description":"If specified, use the given directory as working directory.","default":null}}}},{"name":"validate","usage":"validate [file]","description":"Validates a composer.json","help":"The validate command validates a given composer.json\n","aliases":[],"definition":{"arguments":{"file":{"name":"file","is_required":false,"is_array":false,"description":"path to composer.json file","default":".\/composer.json"}},"options":{"help":{"name":"--help","shortcut":"-h","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Display this help message.","default":false},"quiet":{"name":"--quiet","shortcut":"-q","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Do not output any message.","default":false},"verbose":{"name":"--verbose","shortcut":"-v|-vv|-vvv","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug","default":false},"version":{"name":"--version","shortcut":"-V","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Display this application version.","default":false},"ansi":{"name":"--ansi","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Force ANSI output.","default":false},"no-ansi":{"name":"--no-ansi","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Disable ANSI output.","default":false},"no-interaction":{"name":"--no-interaction","shortcut":"-n","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Do not ask any interactive question.","default":false},"profile":{"name":"--profile","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Display timing and memory usage information","default":false},"working-dir":{"name":"--working-dir","shortcut":"-d","accept_value":true,"is_value_required":true,"is_multiple":false,"description":"If specified, use the given directory as working directory.","default":null}}}}],"namespaces":[{"id":"_global","commands":["about","archive","config","create-project","depends","diagnose","dump-autoload","dumpautoload","global","help","init","install","licenses","list","require","run-script","search","show","status","update","validate"]}]}
\ No newline at end of file
+{"commands":[{"name":"about","usage":"about","description":"Short information about Composer","help":"<info>php composer.phar about<\/info>","aliases":[],"definition":{"arguments":[],"options":{"help":{"name":"--help","shortcut":"-h","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Display this help message","default":false},"quiet":{"name":"--quiet","shortcut":"-q","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Do not output any message","default":false},"verbose":{"name":"--verbose","shortcut":"-v|-vv|-vvv","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug","default":false},"version":{"name":"--version","shortcut":"-V","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Display this application version","default":false},"ansi":{"name":"--ansi","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Force ANSI output","default":false},"no-ansi":{"name":"--no-ansi","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Disable ANSI output","default":false},"no-interaction":{"name":"--no-interaction","shortcut":"-n","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Do not ask any interactive question","default":false},"profile":{"name":"--profile","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Display timing and memory usage information","default":false},"working-dir":{"name":"--working-dir","shortcut":"-d","accept_value":true,"is_value_required":true,"is_multiple":false,"description":"If specified, use the given directory as working directory.","default":null}}}},{"name":"archive","usage":"archive [-f|--format=\"...\"] [--dir=\"...\"] [package] [version]","description":"Create an archive of this composer package","help":"The <info>archive<\/info> command creates an archive of the specified format\ncontaining the files and directories of the Composer project or the specified\npackage in the specified version and writes it to the specified directory.\n\n<info>php composer.phar archive [--format=zip] [--dir=\/foo] [package [version]]<\/info>\n","aliases":[],"definition":{"arguments":{"package":{"name":"package","is_required":false,"is_array":false,"description":"The package to archive instead of the current project","default":null},"version":{"name":"version","is_required":false,"is_array":false,"description":"A version constraint to find the package to archive","default":null}},"options":{"format":{"name":"--format","shortcut":"-f","accept_value":true,"is_value_required":true,"is_multiple":false,"description":"Format of the resulting archive: tar or zip","default":"tar"},"dir":{"name":"--dir","shortcut":"","accept_value":true,"is_value_required":true,"is_multiple":false,"description":"Write the archive to this directory","default":"."},"help":{"name":"--help","shortcut":"-h","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Display this help message","default":false},"quiet":{"name":"--quiet","shortcut":"-q","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Do not output any message","default":false},"verbose":{"name":"--verbose","shortcut":"-v|-vv|-vvv","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug","default":false},"version":{"name":"--version","shortcut":"-V","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Display this application version","default":false},"ansi":{"name":"--ansi","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Force ANSI output","default":false},"no-ansi":{"name":"--no-ansi","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Disable ANSI output","default":false},"no-interaction":{"name":"--no-interaction","shortcut":"-n","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Do not ask any interactive question","default":false},"profile":{"name":"--profile","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Display timing and memory usage information","default":false},"working-dir":{"name":"--working-dir","shortcut":"-d","accept_value":true,"is_value_required":true,"is_multiple":false,"description":"If specified, use the given directory as working directory.","default":null}}}},{"name":"browse","usage":"browse [-H|--homepage] packages1 ... [packagesN]","description":"Opens the package's repository URL or homepage in your browser.","help":"The home command opens a package's repository URL or\nhomepage in your default browser.\n\nTo open the homepage by default, use -H or --homepage.","aliases":["home"],"definition":{"arguments":{"packages":{"name":"packages","is_required":true,"is_array":true,"description":"Package(s) to browse to.","default":[]}},"options":{"homepage":{"name":"--homepage","shortcut":"-H","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Open the homepage instead of the repository URL.","default":false},"help":{"name":"--help","shortcut":"-h","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Display this help message","default":false},"quiet":{"name":"--quiet","shortcut":"-q","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Do not output any message","default":false},"verbose":{"name":"--verbose","shortcut":"-v|-vv|-vvv","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug","default":false},"version":{"name":"--version","shortcut":"-V","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Display this application version","default":false},"ansi":{"name":"--ansi","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Force ANSI output","default":false},"no-ansi":{"name":"--no-ansi","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Disable ANSI output","default":false},"no-interaction":{"name":"--no-interaction","shortcut":"-n","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Do not ask any interactive question","default":false},"profile":{"name":"--profile","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Display timing and memory usage information","default":false},"working-dir":{"name":"--working-dir","shortcut":"-d","accept_value":true,"is_value_required":true,"is_multiple":false,"description":"If specified, use the given directory as working directory.","default":null}}}},{"name":"clear-cache","usage":"clear-cache","description":"Clears composer's internal package cache.","help":"The <info>clear-cache<\/info> deletes all cached packages from composer's\ncache directory.","aliases":["clearcache"],"definition":{"arguments":[],"options":{"help":{"name":"--help","shortcut":"-h","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Display this help message","default":false},"quiet":{"name":"--quiet","shortcut":"-q","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Do not output any message","default":false},"verbose":{"name":"--verbose","shortcut":"-v|-vv|-vvv","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug","default":false},"version":{"name":"--version","shortcut":"-V","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Display this application version","default":false},"ansi":{"name":"--ansi","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Force ANSI output","default":false},"no-ansi":{"name":"--no-ansi","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Disable ANSI output","default":false},"no-interaction":{"name":"--no-interaction","shortcut":"-n","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Do not ask any interactive question","default":false},"profile":{"name":"--profile","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Display timing and memory usage information","default":false},"working-dir":{"name":"--working-dir","shortcut":"-d","accept_value":true,"is_value_required":true,"is_multiple":false,"description":"If specified, use the given directory as working directory.","default":null}}}},{"name":"config","usage":"config [-g|--global] [-e|--editor] [-a|--auth] [--unset] [-l|--list] [-f|--file=\"...\"] [setting-key] [setting-value1] ... [setting-valueN]","description":"Set config options","help":"This command allows you to edit some basic composer settings in either the\nlocal composer.json file or the global config.json file.\n\nTo edit the global config.json file:\n\n    <comment>vendor\/composer\/composer\/bin\/composer config --global<\/comment>\n\nTo add a repository:\n\n    <comment>vendor\/composer\/composer\/bin\/composer config repositories.foo vcs http:\/\/bar.com<\/comment>\n\nYou can add a repository to the global config.json file by passing in the\n<info>--global<\/info> option.\n\nTo edit the file in an external editor:\n\n    <comment>vendor\/composer\/composer\/bin\/composer config --editor<\/comment>\n\nTo choose your editor you can set the \"EDITOR\" env variable.\n\nTo get a list of configuration values in the file:\n\n    <comment>vendor\/composer\/composer\/bin\/composer config --list<\/comment>\n\nYou can always pass more than one option. As an example, if you want to edit the\nglobal config.json file.\n\n    <comment>vendor\/composer\/composer\/bin\/composer config --editor --global<\/comment>","aliases":[],"definition":{"arguments":{"setting-key":{"name":"setting-key","is_required":false,"is_array":false,"description":"Setting key","default":null},"setting-value":{"name":"setting-value","is_required":false,"is_array":true,"description":"Setting value","default":[]}},"options":{"global":{"name":"--global","shortcut":"-g","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Apply command to the global config file","default":false},"editor":{"name":"--editor","shortcut":"-e","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Open editor","default":false},"auth":{"name":"--auth","shortcut":"-a","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Affect auth config file (only used for --editor)","default":false},"unset":{"name":"--unset","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Unset the given setting-key","default":false},"list":{"name":"--list","shortcut":"-l","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"List configuration settings","default":false},"file":{"name":"--file","shortcut":"-f","accept_value":true,"is_value_required":true,"is_multiple":false,"description":"If you want to choose a different composer.json or config.json","default":"composer.json"},"help":{"name":"--help","shortcut":"-h","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Display this help message","default":false},"quiet":{"name":"--quiet","shortcut":"-q","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Do not output any message","default":false},"verbose":{"name":"--verbose","shortcut":"-v|-vv|-vvv","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug","default":false},"version":{"name":"--version","shortcut":"-V","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Display this application version","default":false},"ansi":{"name":"--ansi","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Force ANSI output","default":false},"no-ansi":{"name":"--no-ansi","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Disable ANSI output","default":false},"no-interaction":{"name":"--no-interaction","shortcut":"-n","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Do not ask any interactive question","default":false},"profile":{"name":"--profile","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Display timing and memory usage information","default":false},"working-dir":{"name":"--working-dir","shortcut":"-d","accept_value":true,"is_value_required":true,"is_multiple":false,"description":"If specified, use the given directory as working directory.","default":null}}}},{"name":"create-project","usage":"create-project [-s|--stability=\"...\"] [--prefer-source] [--prefer-dist] [--repository-url=\"...\"] [--dev] [--no-dev] [--no-plugins] [--no-custom-installers] [--no-scripts] [--no-progress] [--keep-vcs] [--no-install] [package] [directory] [version]","description":"Create new project from a package into given directory.","help":"The <info>create-project<\/info> command creates a new project from a given\npackage into a new directory. If executed without params and in a directory\nwith a composer.json file it installs the packages for the current project.\n\nYou can use this command to bootstrap new projects or setup a clean\nversion-controlled installation for developers of your project.\n\n<info>php composer.phar create-project vendor\/project target-directory [version]<\/info>\n\nYou can also specify the version with the package name using = or : as separator.\n\nTo install unstable packages, either specify the version you want, or use the\n--stability=dev (where dev can be one of RC, beta, alpha or dev).\n\nTo setup a developer workable version you should create the project using the source\ncontrolled code by appending the <info>'--prefer-source'<\/info> flag.\n\nTo install a package from another repository than the default one you\ncan pass the <info>'--repository-url=http:\/\/myrepository.org'<\/info> flag.\n","aliases":[],"definition":{"arguments":{"package":{"name":"package","is_required":false,"is_array":false,"description":"Package name to be installed","default":null},"directory":{"name":"directory","is_required":false,"is_array":false,"description":"Directory where the files should be created","default":null},"version":{"name":"version","is_required":false,"is_array":false,"description":"Version, will default to latest","default":null}},"options":{"stability":{"name":"--stability","shortcut":"-s","accept_value":true,"is_value_required":true,"is_multiple":false,"description":"Minimum-stability allowed (unless a version is specified).","default":null},"prefer-source":{"name":"--prefer-source","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Forces installation from package sources when possible, including VCS information.","default":false},"prefer-dist":{"name":"--prefer-dist","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Forces installation from package dist even for dev versions.","default":false},"repository-url":{"name":"--repository-url","shortcut":"","accept_value":true,"is_value_required":true,"is_multiple":false,"description":"Pick a different repository url to look for the package.","default":null},"dev":{"name":"--dev","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Enables installation of require-dev packages (enabled by default, only present for BC).","default":false},"no-dev":{"name":"--no-dev","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Disables installation of require-dev packages.","default":false},"no-plugins":{"name":"--no-plugins","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Whether to disable plugins.","default":false},"no-custom-installers":{"name":"--no-custom-installers","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"DEPRECATED: Use no-plugins instead.","default":false},"no-scripts":{"name":"--no-scripts","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Whether to prevent execution of all defined scripts in the root package.","default":false},"no-progress":{"name":"--no-progress","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Do not output download progress.","default":false},"keep-vcs":{"name":"--keep-vcs","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Whether to prevent deletion vcs folder.","default":false},"no-install":{"name":"--no-install","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Whether to skip installation of the package dependencies.","default":false},"help":{"name":"--help","shortcut":"-h","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Display this help message","default":false},"quiet":{"name":"--quiet","shortcut":"-q","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Do not output any message","default":false},"verbose":{"name":"--verbose","shortcut":"-v|-vv|-vvv","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug","default":false},"version":{"name":"--version","shortcut":"-V","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Display this application version","default":false},"ansi":{"name":"--ansi","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Force ANSI output","default":false},"no-ansi":{"name":"--no-ansi","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Disable ANSI output","default":false},"no-interaction":{"name":"--no-interaction","shortcut":"-n","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Do not ask any interactive question","default":false},"profile":{"name":"--profile","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Display timing and memory usage information","default":false},"working-dir":{"name":"--working-dir","shortcut":"-d","accept_value":true,"is_value_required":true,"is_multiple":false,"description":"If specified, use the given directory as working directory.","default":null}}}},{"name":"depends","usage":"depends [--link-type=\"...\"] package","description":"Shows which packages depend on the given package","help":"Displays detailed information about where a package is referenced.\n\n<info>php composer.phar depends composer\/composer<\/info>\n","aliases":[],"definition":{"arguments":{"package":{"name":"package","is_required":true,"is_array":false,"description":"Package to inspect","default":null}},"options":{"link-type":{"name":"--link-type","shortcut":"","accept_value":true,"is_value_required":true,"is_multiple":true,"description":"Link types to show (require, require-dev)","default":["require","require-dev"]},"help":{"name":"--help","shortcut":"-h","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Display this help message","default":false},"quiet":{"name":"--quiet","shortcut":"-q","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Do not output any message","default":false},"verbose":{"name":"--verbose","shortcut":"-v|-vv|-vvv","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug","default":false},"version":{"name":"--version","shortcut":"-V","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Display this application version","default":false},"ansi":{"name":"--ansi","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Force ANSI output","default":false},"no-ansi":{"name":"--no-ansi","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Disable ANSI output","default":false},"no-interaction":{"name":"--no-interaction","shortcut":"-n","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Do not ask any interactive question","default":false},"profile":{"name":"--profile","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Display timing and memory usage information","default":false},"working-dir":{"name":"--working-dir","shortcut":"-d","accept_value":true,"is_value_required":true,"is_multiple":false,"description":"If specified, use the given directory as working directory.","default":null}}}},{"name":"diagnose","usage":"diagnose","description":"Diagnoses the system to identify common errors.","help":"The <info>diagnose<\/info> command checks common errors to help debugging problems.\n","aliases":[],"definition":{"arguments":[],"options":{"help":{"name":"--help","shortcut":"-h","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Display this help message","default":false},"quiet":{"name":"--quiet","shortcut":"-q","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Do not output any message","default":false},"verbose":{"name":"--verbose","shortcut":"-v|-vv|-vvv","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug","default":false},"version":{"name":"--version","shortcut":"-V","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Display this application version","default":false},"ansi":{"name":"--ansi","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Force ANSI output","default":false},"no-ansi":{"name":"--no-ansi","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Disable ANSI output","default":false},"no-interaction":{"name":"--no-interaction","shortcut":"-n","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Do not ask any interactive question","default":false},"profile":{"name":"--profile","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Display timing and memory usage information","default":false},"working-dir":{"name":"--working-dir","shortcut":"-d","accept_value":true,"is_value_required":true,"is_multiple":false,"description":"If specified, use the given directory as working directory.","default":null}}}},{"name":"dump-autoload","usage":"dump-autoload [-o|--optimize] [--no-dev]","description":"Dumps the autoloader","help":"<info>php composer.phar dump-autoload<\/info>","aliases":["dumpautoload"],"definition":{"arguments":[],"options":{"optimize":{"name":"--optimize","shortcut":"-o","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Optimizes PSR0 and PSR4 packages to be loaded with classmaps too, good for production.","default":false},"no-dev":{"name":"--no-dev","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Disables autoload-dev rules.","default":false},"help":{"name":"--help","shortcut":"-h","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Display this help message","default":false},"quiet":{"name":"--quiet","shortcut":"-q","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Do not output any message","default":false},"verbose":{"name":"--verbose","shortcut":"-v|-vv|-vvv","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug","default":false},"version":{"name":"--version","shortcut":"-V","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Display this application version","default":false},"ansi":{"name":"--ansi","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Force ANSI output","default":false},"no-ansi":{"name":"--no-ansi","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Disable ANSI output","default":false},"no-interaction":{"name":"--no-interaction","shortcut":"-n","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Do not ask any interactive question","default":false},"profile":{"name":"--profile","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Display timing and memory usage information","default":false},"working-dir":{"name":"--working-dir","shortcut":"-d","accept_value":true,"is_value_required":true,"is_multiple":false,"description":"If specified, use the given directory as working directory.","default":null}}}},{"name":"global","usage":"global command-name [args1] ... [argsN]","description":"Allows running commands in the global composer dir ($COMPOSER_HOME).","help":"Use this command as a wrapper to run other Composer commands\nwithin the global context of COMPOSER_HOME.\n\nYou can use this to install CLI utilities globally, all you need\nis to add the COMPOSER_HOME\/vendor\/bin dir to your PATH env var.\n\nCOMPOSER_HOME is c:\\Users\\<user>\\AppData\\Roaming\\Composer on Windows\nand \/home\/<user>\/.composer on unix systems.\n\nNote: This path may vary depending on customizations to bin-dir in\ncomposer.json or the environmental variable COMPOSER_BIN_DIR.\n","aliases":[],"definition":{"arguments":{"command-name":{"name":"command-name","is_required":true,"is_array":false,"description":"","default":null},"args":{"name":"args","is_required":false,"is_array":true,"description":"","default":[]}},"options":{"help":{"name":"--help","shortcut":"-h","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Display this help message","default":false},"quiet":{"name":"--quiet","shortcut":"-q","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Do not output any message","default":false},"verbose":{"name":"--verbose","shortcut":"-v|-vv|-vvv","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug","default":false},"version":{"name":"--version","shortcut":"-V","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Display this application version","default":false},"ansi":{"name":"--ansi","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Force ANSI output","default":false},"no-ansi":{"name":"--no-ansi","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Disable ANSI output","default":false},"no-interaction":{"name":"--no-interaction","shortcut":"-n","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Do not ask any interactive question","default":false},"profile":{"name":"--profile","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Display timing and memory usage information","default":false},"working-dir":{"name":"--working-dir","shortcut":"-d","accept_value":true,"is_value_required":true,"is_multiple":false,"description":"If specified, use the given directory as working directory.","default":null}}}},{"name":"help","usage":"help [--xml] [--format=\"...\"] [--raw] [command_name]","description":"Displays help for a command","help":"The <info>help<\/info> command displays help for a given command:\n\n  <info>php vendor\/composer\/composer\/bin\/composer help list<\/info>\n\nYou can also output the help in other formats by using the <comment>--format<\/comment> option:\n\n  <info>php vendor\/composer\/composer\/bin\/composer help --format=xml list<\/info>\n\nTo display the list of available commands, please use the <info>list<\/info> command.","aliases":[],"definition":{"arguments":{"command_name":{"name":"command_name","is_required":false,"is_array":false,"description":"The command name","default":"help"}},"options":{"xml":{"name":"--xml","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"To output help as XML","default":false},"format":{"name":"--format","shortcut":"","accept_value":true,"is_value_required":true,"is_multiple":false,"description":"To output help in other formats","default":"txt"},"raw":{"name":"--raw","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"To output raw command help","default":false},"help":{"name":"--help","shortcut":"-h","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Display this help message","default":false},"quiet":{"name":"--quiet","shortcut":"-q","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Do not output any message","default":false},"verbose":{"name":"--verbose","shortcut":"-v|-vv|-vvv","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug","default":false},"version":{"name":"--version","shortcut":"-V","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Display this application version","default":false},"ansi":{"name":"--ansi","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Force ANSI output","default":false},"no-ansi":{"name":"--no-ansi","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Disable ANSI output","default":false},"no-interaction":{"name":"--no-interaction","shortcut":"-n","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Do not ask any interactive question","default":false},"profile":{"name":"--profile","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Display timing and memory usage information","default":false},"working-dir":{"name":"--working-dir","shortcut":"-d","accept_value":true,"is_value_required":true,"is_multiple":false,"description":"If specified, use the given directory as working directory.","default":null}}}},{"name":"init","usage":"init [--name=\"...\"] [--description=\"...\"] [--author=\"...\"] [--homepage=\"...\"] [--require=\"...\"] [--require-dev=\"...\"] [-s|--stability=\"...\"] [-l|--license=\"...\"]","description":"Creates a basic composer.json file in current directory.","help":"The <info>init<\/info> command creates a basic composer.json file\nin the current directory.\n\n<info>php composer.phar init<\/info>\n","aliases":[],"definition":{"arguments":[],"options":{"name":{"name":"--name","shortcut":"","accept_value":true,"is_value_required":true,"is_multiple":false,"description":"Name of the package","default":null},"description":{"name":"--description","shortcut":"","accept_value":true,"is_value_required":true,"is_multiple":false,"description":"Description of package","default":null},"author":{"name":"--author","shortcut":"","accept_value":true,"is_value_required":true,"is_multiple":false,"description":"Author name of package","default":null},"homepage":{"name":"--homepage","shortcut":"","accept_value":true,"is_value_required":true,"is_multiple":false,"description":"Homepage of package","default":null},"require":{"name":"--require","shortcut":"","accept_value":true,"is_value_required":true,"is_multiple":true,"description":"Package to require with a version constraint, e.g. foo\/bar:1.0.0 or foo\/bar=1.0.0 or \"foo\/bar 1.0.0\"","default":[]},"require-dev":{"name":"--require-dev","shortcut":"","accept_value":true,"is_value_required":true,"is_multiple":true,"description":"Package to require for development with a version constraint, e.g. foo\/bar:1.0.0 or foo\/bar=1.0.0 or \"foo\/bar 1.0.0\"","default":[]},"stability":{"name":"--stability","shortcut":"-s","accept_value":true,"is_value_required":true,"is_multiple":false,"description":"Minimum stability (empty or one of: stable, RC, beta, alpha, dev)","default":null},"license":{"name":"--license","shortcut":"-l","accept_value":true,"is_value_required":true,"is_multiple":false,"description":"License of package","default":null},"help":{"name":"--help","shortcut":"-h","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Display this help message","default":false},"quiet":{"name":"--quiet","shortcut":"-q","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Do not output any message","default":false},"verbose":{"name":"--verbose","shortcut":"-v|-vv|-vvv","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug","default":false},"version":{"name":"--version","shortcut":"-V","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Display this application version","default":false},"ansi":{"name":"--ansi","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Force ANSI output","default":false},"no-ansi":{"name":"--no-ansi","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Disable ANSI output","default":false},"no-interaction":{"name":"--no-interaction","shortcut":"-n","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Do not ask any interactive question","default":false},"profile":{"name":"--profile","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Display timing and memory usage information","default":false},"working-dir":{"name":"--working-dir","shortcut":"-d","accept_value":true,"is_value_required":true,"is_multiple":false,"description":"If specified, use the given directory as working directory.","default":null}}}},{"name":"install","usage":"install [--prefer-source] [--prefer-dist] [--dry-run] [--dev] [--no-dev] [--no-plugins] [--no-custom-installers] [--no-scripts] [--no-progress] [-v|vv|vvv|--verbose] [-o|--optimize-autoloader] [--ignore-platform-reqs] [packages1] ... [packagesN]","description":"Installs the project dependencies from the composer.lock file if present, or falls back on the composer.json.","help":"The <info>install<\/info> command reads the composer.lock file from\nthe current directory, processes it, and downloads and installs all the\nlibraries and dependencies outlined in that file. If the file does not\nexist it will look for composer.json and do the same.\n\n<info>php composer.phar install<\/info>\n","aliases":[],"definition":{"arguments":{"packages":{"name":"packages","is_required":false,"is_array":true,"description":"Should not be provided, use composer require instead to add a given package to composer.json.","default":[]}},"options":{"prefer-source":{"name":"--prefer-source","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Forces installation from package sources when possible, including VCS information.","default":false},"prefer-dist":{"name":"--prefer-dist","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Forces installation from package dist even for dev versions.","default":false},"dry-run":{"name":"--dry-run","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Outputs the operations but will not execute anything (implicitly enables --verbose).","default":false},"dev":{"name":"--dev","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Enables installation of require-dev packages (enabled by default, only present for BC).","default":false},"no-dev":{"name":"--no-dev","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Disables installation of require-dev packages.","default":false},"no-plugins":{"name":"--no-plugins","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Disables all plugins.","default":false},"no-custom-installers":{"name":"--no-custom-installers","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"DEPRECATED: Use no-plugins instead.","default":false},"no-scripts":{"name":"--no-scripts","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Skips the execution of all scripts defined in composer.json file.","default":false},"no-progress":{"name":"--no-progress","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Do not output download progress.","default":false},"verbose":{"name":"--verbose","shortcut":"-v|-vv|-vvv","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug","default":false},"optimize-autoloader":{"name":"--optimize-autoloader","shortcut":"-o","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Optimize autoloader during autoloader dump","default":false},"ignore-platform-reqs":{"name":"--ignore-platform-reqs","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Ignore platform requirements (php & ext- packages).","default":false},"help":{"name":"--help","shortcut":"-h","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Display this help message","default":false},"quiet":{"name":"--quiet","shortcut":"-q","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Do not output any message","default":false},"version":{"name":"--version","shortcut":"-V","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Display this application version","default":false},"ansi":{"name":"--ansi","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Force ANSI output","default":false},"no-ansi":{"name":"--no-ansi","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Disable ANSI output","default":false},"no-interaction":{"name":"--no-interaction","shortcut":"-n","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Do not ask any interactive question","default":false},"profile":{"name":"--profile","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Display timing and memory usage information","default":false},"working-dir":{"name":"--working-dir","shortcut":"-d","accept_value":true,"is_value_required":true,"is_multiple":false,"description":"If specified, use the given directory as working directory.","default":null}}}},{"name":"licenses","usage":"licenses [-f|--format=\"...\"]","description":"Show information about licenses of dependencies","help":"The license command displays detailed information about the licenses of\nthe installed dependencies.\n","aliases":[],"definition":{"arguments":[],"options":{"format":{"name":"--format","shortcut":"-f","accept_value":true,"is_value_required":true,"is_multiple":false,"description":"Format of the output: text or json","default":"text"},"help":{"name":"--help","shortcut":"-h","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Display this help message","default":false},"quiet":{"name":"--quiet","shortcut":"-q","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Do not output any message","default":false},"verbose":{"name":"--verbose","shortcut":"-v|-vv|-vvv","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug","default":false},"version":{"name":"--version","shortcut":"-V","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Display this application version","default":false},"ansi":{"name":"--ansi","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Force ANSI output","default":false},"no-ansi":{"name":"--no-ansi","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Disable ANSI output","default":false},"no-interaction":{"name":"--no-interaction","shortcut":"-n","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Do not ask any interactive question","default":false},"profile":{"name":"--profile","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Display timing and memory usage information","default":false},"working-dir":{"name":"--working-dir","shortcut":"-d","accept_value":true,"is_value_required":true,"is_multiple":false,"description":"If specified, use the given directory as working directory.","default":null}}}},{"name":"list","usage":"list [--xml] [--raw] [--format=\"...\"] [namespace]","description":"Lists commands","help":"The <info>list<\/info> command lists all commands:\n\n  <info>php vendor\/composer\/composer\/bin\/composer list<\/info>\n\nYou can also display the commands for a specific namespace:\n\n  <info>php vendor\/composer\/composer\/bin\/composer list test<\/info>\n\nYou can also output the information in other formats by using the <comment>--format<\/comment> option:\n\n  <info>php vendor\/composer\/composer\/bin\/composer list --format=xml<\/info>\n\nIt's also possible to get raw list of commands (useful for embedding command runner):\n\n  <info>php vendor\/composer\/composer\/bin\/composer list --raw<\/info>","aliases":[],"definition":{"arguments":{"namespace":{"name":"namespace","is_required":false,"is_array":false,"description":"The namespace name","default":null}},"options":{"xml":{"name":"--xml","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"To output list as XML","default":false},"raw":{"name":"--raw","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"To output raw command list","default":false},"format":{"name":"--format","shortcut":"","accept_value":true,"is_value_required":true,"is_multiple":false,"description":"To output list in other formats","default":"txt"}}}},{"name":"remove","usage":"remove [--dev] [--no-progress] [--no-update] [--update-no-dev] [--update-with-dependencies] [--ignore-platform-reqs] [packages1] ... [packagesN]","description":"Removes a package from the require or require-dev","help":"The <info>remove<\/info> command removes a package from the current\nlist of installed packages\n\n<info>php composer.phar remove<\/info>\n","aliases":[],"definition":{"arguments":{"packages":{"name":"packages","is_required":false,"is_array":true,"description":"Packages that should be removed.","default":[]}},"options":{"dev":{"name":"--dev","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Removes a package from the require-dev section.","default":false},"no-progress":{"name":"--no-progress","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Do not output download progress.","default":false},"no-update":{"name":"--no-update","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Disables the automatic update of the dependencies.","default":false},"update-no-dev":{"name":"--update-no-dev","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Run the dependency update with the --no-dev option.","default":false},"update-with-dependencies":{"name":"--update-with-dependencies","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Allows inherited dependencies to be updated with explicit dependencies.","default":false},"ignore-platform-reqs":{"name":"--ignore-platform-reqs","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Ignore platform requirements (php & ext- packages).","default":false},"help":{"name":"--help","shortcut":"-h","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Display this help message","default":false},"quiet":{"name":"--quiet","shortcut":"-q","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Do not output any message","default":false},"verbose":{"name":"--verbose","shortcut":"-v|-vv|-vvv","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug","default":false},"version":{"name":"--version","shortcut":"-V","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Display this application version","default":false},"ansi":{"name":"--ansi","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Force ANSI output","default":false},"no-ansi":{"name":"--no-ansi","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Disable ANSI output","default":false},"no-interaction":{"name":"--no-interaction","shortcut":"-n","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Do not ask any interactive question","default":false},"profile":{"name":"--profile","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Display timing and memory usage information","default":false},"working-dir":{"name":"--working-dir","shortcut":"-d","accept_value":true,"is_value_required":true,"is_multiple":false,"description":"If specified, use the given directory as working directory.","default":null}}}},{"name":"require","usage":"require [--dev] [--prefer-source] [--prefer-dist] [--no-progress] [--no-update] [--update-no-dev] [--update-with-dependencies] [--ignore-platform-reqs] [packages1] ... [packagesN]","description":"Adds required packages to your composer.json and installs them","help":"The require command adds required packages to your composer.json and installs them\n\nIf you do not want to install the new dependencies immediately you can call it with --no-update\n","aliases":[],"definition":{"arguments":{"packages":{"name":"packages","is_required":false,"is_array":true,"description":"Required package with a version constraint, e.g. foo\/bar:1.0.0 or foo\/bar=1.0.0 or \"foo\/bar 1.0.0\"","default":[]}},"options":{"dev":{"name":"--dev","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Add requirement to require-dev.","default":false},"prefer-source":{"name":"--prefer-source","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Forces installation from package sources when possible, including VCS information.","default":false},"prefer-dist":{"name":"--prefer-dist","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Forces installation from package dist even for dev versions.","default":false},"no-progress":{"name":"--no-progress","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Do not output download progress.","default":false},"no-update":{"name":"--no-update","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Disables the automatic update of the dependencies.","default":false},"update-no-dev":{"name":"--update-no-dev","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Run the dependency update with the --no-dev option.","default":false},"update-with-dependencies":{"name":"--update-with-dependencies","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Allows inherited dependencies to be updated with explicit dependencies.","default":false},"ignore-platform-reqs":{"name":"--ignore-platform-reqs","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Ignore platform requirements (php & ext- packages).","default":false},"help":{"name":"--help","shortcut":"-h","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Display this help message","default":false},"quiet":{"name":"--quiet","shortcut":"-q","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Do not output any message","default":false},"verbose":{"name":"--verbose","shortcut":"-v|-vv|-vvv","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug","default":false},"version":{"name":"--version","shortcut":"-V","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Display this application version","default":false},"ansi":{"name":"--ansi","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Force ANSI output","default":false},"no-ansi":{"name":"--no-ansi","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Disable ANSI output","default":false},"no-interaction":{"name":"--no-interaction","shortcut":"-n","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Do not ask any interactive question","default":false},"profile":{"name":"--profile","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Display timing and memory usage information","default":false},"working-dir":{"name":"--working-dir","shortcut":"-d","accept_value":true,"is_value_required":true,"is_multiple":false,"description":"If specified, use the given directory as working directory.","default":null}}}},{"name":"run-script","usage":"run-script [--dev] [--no-dev] script [args1] ... [argsN]","description":"Run the scripts defined in composer.json.","help":"The <info>run-script<\/info> command runs scripts defined in composer.json:\n\n<info>php composer.phar run-script post-update-cmd<\/info>","aliases":[],"definition":{"arguments":{"script":{"name":"script","is_required":true,"is_array":false,"description":"Script name to run.","default":null},"args":{"name":"args","is_required":false,"is_array":true,"description":"","default":[]}},"options":{"dev":{"name":"--dev","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Sets the dev mode.","default":false},"no-dev":{"name":"--no-dev","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Disables the dev mode.","default":false},"help":{"name":"--help","shortcut":"-h","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Display this help message","default":false},"quiet":{"name":"--quiet","shortcut":"-q","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Do not output any message","default":false},"verbose":{"name":"--verbose","shortcut":"-v|-vv|-vvv","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug","default":false},"version":{"name":"--version","shortcut":"-V","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Display this application version","default":false},"ansi":{"name":"--ansi","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Force ANSI output","default":false},"no-ansi":{"name":"--no-ansi","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Disable ANSI output","default":false},"no-interaction":{"name":"--no-interaction","shortcut":"-n","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Do not ask any interactive question","default":false},"profile":{"name":"--profile","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Display timing and memory usage information","default":false},"working-dir":{"name":"--working-dir","shortcut":"-d","accept_value":true,"is_value_required":true,"is_multiple":false,"description":"If specified, use the given directory as working directory.","default":null}}}},{"name":"search","usage":"search [-N|--only-name] tokens1 ... [tokensN]","description":"Search for packages","help":"The search command searches for packages by its name\n<info>php composer.phar search symfony composer<\/info>\n","aliases":[],"definition":{"arguments":{"tokens":{"name":"tokens","is_required":true,"is_array":true,"description":"tokens to search for","default":[]}},"options":{"only-name":{"name":"--only-name","shortcut":"-N","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Search only in name","default":false},"help":{"name":"--help","shortcut":"-h","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Display this help message","default":false},"quiet":{"name":"--quiet","shortcut":"-q","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Do not output any message","default":false},"verbose":{"name":"--verbose","shortcut":"-v|-vv|-vvv","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug","default":false},"version":{"name":"--version","shortcut":"-V","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Display this application version","default":false},"ansi":{"name":"--ansi","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Force ANSI output","default":false},"no-ansi":{"name":"--no-ansi","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Disable ANSI output","default":false},"no-interaction":{"name":"--no-interaction","shortcut":"-n","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Do not ask any interactive question","default":false},"profile":{"name":"--profile","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Display timing and memory usage information","default":false},"working-dir":{"name":"--working-dir","shortcut":"-d","accept_value":true,"is_value_required":true,"is_multiple":false,"description":"If specified, use the given directory as working directory.","default":null}}}},{"name":"show","usage":"show [-i|--installed] [-p|--platform] [-a|--available] [-s|--self] [-N|--name-only] [-P|--path] [package] [version]","description":"Show information about packages","help":"The show command displays detailed information about a package, or\nlists all packages available.\n","aliases":[],"definition":{"arguments":{"package":{"name":"package","is_required":false,"is_array":false,"description":"Package to inspect","default":null},"version":{"name":"version","is_required":false,"is_array":false,"description":"Version or version constraint to inspect","default":null}},"options":{"installed":{"name":"--installed","shortcut":"-i","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"List installed packages only","default":false},"platform":{"name":"--platform","shortcut":"-p","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"List platform packages only","default":false},"available":{"name":"--available","shortcut":"-a","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"List available packages only","default":false},"self":{"name":"--self","shortcut":"-s","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Show the root package information","default":false},"name-only":{"name":"--name-only","shortcut":"-N","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"List package names only","default":false},"path":{"name":"--path","shortcut":"-P","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Show package paths","default":false},"help":{"name":"--help","shortcut":"-h","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Display this help message","default":false},"quiet":{"name":"--quiet","shortcut":"-q","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Do not output any message","default":false},"verbose":{"name":"--verbose","shortcut":"-v|-vv|-vvv","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug","default":false},"version":{"name":"--version","shortcut":"-V","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Display this application version","default":false},"ansi":{"name":"--ansi","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Force ANSI output","default":false},"no-ansi":{"name":"--no-ansi","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Disable ANSI output","default":false},"no-interaction":{"name":"--no-interaction","shortcut":"-n","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Do not ask any interactive question","default":false},"profile":{"name":"--profile","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Display timing and memory usage information","default":false},"working-dir":{"name":"--working-dir","shortcut":"-d","accept_value":true,"is_value_required":true,"is_multiple":false,"description":"If specified, use the given directory as working directory.","default":null}}}},{"name":"status","usage":"status [-v|vv|vvv|--verbose]","description":"Show a list of locally modified packages","help":"The status command displays a list of dependencies that have\nbeen modified locally.\n","aliases":[],"definition":{"arguments":[],"options":{"verbose":{"name":"--verbose","shortcut":"-v|-vv|-vvv","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug","default":false},"help":{"name":"--help","shortcut":"-h","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Display this help message","default":false},"quiet":{"name":"--quiet","shortcut":"-q","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Do not output any message","default":false},"version":{"name":"--version","shortcut":"-V","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Display this application version","default":false},"ansi":{"name":"--ansi","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Force ANSI output","default":false},"no-ansi":{"name":"--no-ansi","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Disable ANSI output","default":false},"no-interaction":{"name":"--no-interaction","shortcut":"-n","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Do not ask any interactive question","default":false},"profile":{"name":"--profile","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Display timing and memory usage information","default":false},"working-dir":{"name":"--working-dir","shortcut":"-d","accept_value":true,"is_value_required":true,"is_multiple":false,"description":"If specified, use the given directory as working directory.","default":null}}}},{"name":"update","usage":"update [--prefer-source] [--prefer-dist] [--dry-run] [--dev] [--no-dev] [--lock] [--no-plugins] [--no-custom-installers] [--no-scripts] [--no-progress] [--with-dependencies] [-v|vv|vvv|--verbose] [-o|--optimize-autoloader] [--ignore-platform-reqs] [packages1] ... [packagesN]","description":"Updates your dependencies to the latest version according to composer.json, and updates the composer.lock file.","help":"The <info>update<\/info> command reads the composer.json file from the\ncurrent directory, processes it, and updates, removes or installs all the\ndependencies.\n\n<info>php composer.phar update<\/info>\n\nTo limit the update operation to a few packages, you can list the package(s)\nyou want to update as such:\n\n<info>php composer.phar update vendor\/package1 foo\/mypackage [...]<\/info>\n\nYou may also use an asterisk (*) pattern to limit the update operation to package(s)\nfrom a specific vendor:\n\n<info>php composer.phar update vendor\/package1 foo\/* [...]<\/info>","aliases":[],"definition":{"arguments":{"packages":{"name":"packages","is_required":false,"is_array":true,"description":"Packages that should be updated, if not provided all packages are.","default":[]}},"options":{"prefer-source":{"name":"--prefer-source","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Forces installation from package sources when possible, including VCS information.","default":false},"prefer-dist":{"name":"--prefer-dist","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Forces installation from package dist even for dev versions.","default":false},"dry-run":{"name":"--dry-run","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Outputs the operations but will not execute anything (implicitly enables --verbose).","default":false},"dev":{"name":"--dev","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Enables installation of require-dev packages (enabled by default, only present for BC).","default":false},"no-dev":{"name":"--no-dev","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Disables installation of require-dev packages.","default":false},"lock":{"name":"--lock","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Only updates the lock file hash to suppress warning about the lock file being out of date.","default":false},"no-plugins":{"name":"--no-plugins","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Disables all plugins.","default":false},"no-custom-installers":{"name":"--no-custom-installers","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"DEPRECATED: Use no-plugins instead.","default":false},"no-scripts":{"name":"--no-scripts","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Skips the execution of all scripts defined in composer.json file.","default":false},"no-progress":{"name":"--no-progress","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Do not output download progress.","default":false},"with-dependencies":{"name":"--with-dependencies","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Add also all dependencies of whitelisted packages to the whitelist.","default":false},"verbose":{"name":"--verbose","shortcut":"-v|-vv|-vvv","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug","default":false},"optimize-autoloader":{"name":"--optimize-autoloader","shortcut":"-o","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Optimize autoloader during autoloader dump.","default":false},"ignore-platform-reqs":{"name":"--ignore-platform-reqs","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Ignore platform requirements (php & ext- packages).","default":false},"help":{"name":"--help","shortcut":"-h","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Display this help message","default":false},"quiet":{"name":"--quiet","shortcut":"-q","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Do not output any message","default":false},"version":{"name":"--version","shortcut":"-V","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Display this application version","default":false},"ansi":{"name":"--ansi","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Force ANSI output","default":false},"no-ansi":{"name":"--no-ansi","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Disable ANSI output","default":false},"no-interaction":{"name":"--no-interaction","shortcut":"-n","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Do not ask any interactive question","default":false},"profile":{"name":"--profile","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Display timing and memory usage information","default":false},"working-dir":{"name":"--working-dir","shortcut":"-d","accept_value":true,"is_value_required":true,"is_multiple":false,"description":"If specified, use the given directory as working directory.","default":null}}}},{"name":"validate","usage":"validate [--no-check-all] [file]","description":"Validates a composer.json","help":"The validate command validates a given composer.json\n","aliases":[],"definition":{"arguments":{"file":{"name":"file","is_required":false,"is_array":false,"description":"path to composer.json file","default":".\/composer.json"}},"options":{"no-check-all":{"name":"--no-check-all","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Do not make a complete validation","default":false},"help":{"name":"--help","shortcut":"-h","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Display this help message","default":false},"quiet":{"name":"--quiet","shortcut":"-q","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Do not output any message","default":false},"verbose":{"name":"--verbose","shortcut":"-v|-vv|-vvv","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug","default":false},"version":{"name":"--version","shortcut":"-V","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Display this application version","default":false},"ansi":{"name":"--ansi","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Force ANSI output","default":false},"no-ansi":{"name":"--no-ansi","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Disable ANSI output","default":false},"no-interaction":{"name":"--no-interaction","shortcut":"-n","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Do not ask any interactive question","default":false},"profile":{"name":"--profile","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Display timing and memory usage information","default":false},"working-dir":{"name":"--working-dir","shortcut":"-d","accept_value":true,"is_value_required":true,"is_multiple":false,"description":"If specified, use the given directory as working directory.","default":null}}}}],"namespaces":[{"id":"_global","commands":["about","archive","browse","clear-cache","clearcache","config","create-project","depends","diagnose","dump-autoload","dumpautoload","global","help","home","init","install","licenses","list","remove","require","run-script","search","show","status","update","validate"]}]}
\ No newline at end of file
diff --git a/composer.json b/composer.json
index 54fffc9..d48b756 100644
--- a/composer.json
+++ b/composer.json
@@ -15,7 +15,7 @@
     "source": "http://drupalcode.org/project/composer.git"
   },
   "require": {
-    "composer/composer": "1.0.0-alpha8"
+    "composer/composer": "1.0.0-alpha9"
   },
   "config": {
       "preferred-install": "dist"
diff --git a/composer.lock b/composer.lock
index 3e664c2..fa0ca0c 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,32 +4,32 @@
         "Read more about it at http://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
         "This file is @generated automatically"
     ],
-    "hash": "1977385db98d4206e41f66a294c579a1",
+    "hash": "5704728309b9c0579c6864b5539d3116",
     "packages": [
         {
             "name": "composer/composer",
-            "version": "1.0.0-alpha8",
+            "version": "1.0.0-alpha9",
             "source": {
                 "type": "git",
                 "url": "https://github.com/composer/composer.git",
-                "reference": "1eb1df44a97fb2daca1bb8b007f3bee012f0aa46"
+                "reference": "eb1ce550ca51134ee619ad3e37f5a0b7e980dd24"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/composer/composer/zipball/1eb1df44a97fb2daca1bb8b007f3bee012f0aa46",
-                "reference": "1eb1df44a97fb2daca1bb8b007f3bee012f0aa46",
+                "url": "https://api.github.com/repos/composer/composer/zipball/eb1ce550ca51134ee619ad3e37f5a0b7e980dd24",
+                "reference": "eb1ce550ca51134ee619ad3e37f5a0b7e980dd24",
                 "shasum": ""
             },
             "require": {
-                "justinrainbow/json-schema": "1.1.*",
+                "justinrainbow/json-schema": "~1.1",
                 "php": ">=5.3.2",
-                "seld/jsonlint": "1.*",
+                "seld/jsonlint": "~1.0",
                 "symfony/console": "~2.3",
                 "symfony/finder": "~2.2",
                 "symfony/process": "~2.1"
             },
             "require-dev": {
-                "phpunit/phpunit": "~3.7.10"
+                "phpunit/phpunit": "~4.0"
             },
             "suggest": {
                 "ext-openssl": "Enabling the openssl extension allows you to access https URLs for repositories and packages",
@@ -55,44 +55,56 @@
             ],
             "authors": [
                 {
-                    "name": "Jordi Boggiano",
-                    "email": "j.boggiano@seld.be",
-                    "homepage": "http://seld.be",
-                    "role": "Developer"
-                },
-                {
                     "name": "Nils Adermann",
                     "email": "naderman@naderman.de",
                     "homepage": "http://www.naderman.de"
+                },
+                {
+                    "name": "Jordi Boggiano",
+                    "email": "j.boggiano@seld.be",
+                    "homepage": "http://seld.be"
                 }
             ],
-            "description": "Dependency Manager",
+            "description": "Composer helps you declare, manage and install dependencies of PHP projects, ensuring you have the right stack everywhere.",
             "homepage": "http://getcomposer.org/",
             "keywords": [
                 "autoload",
                 "dependency",
                 "package"
             ],
-            "time": "2014-01-06 18:39:59"
+            "time": "2014-12-07 17:15:20"
         },
         {
             "name": "justinrainbow/json-schema",
-            "version": "1.1.0",
+            "version": "1.3.7",
             "source": {
                 "type": "git",
                 "url": "https://github.com/justinrainbow/json-schema.git",
-                "reference": "05ff6d8d79fe3ad190b0663d80d3f9deee79416c"
+                "reference": "87b54b460febed69726c781ab67462084e97a105"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/justinrainbow/json-schema/zipball/05ff6d8d79fe3ad190b0663d80d3f9deee79416c",
-                "reference": "05ff6d8d79fe3ad190b0663d80d3f9deee79416c",
+                "url": "https://api.github.com/repos/justinrainbow/json-schema/zipball/87b54b460febed69726c781ab67462084e97a105",
+                "reference": "87b54b460febed69726c781ab67462084e97a105",
                 "shasum": ""
             },
             "require": {
                 "php": ">=5.3.0"
             },
+            "require-dev": {
+                "json-schema/json-schema-test-suite": "1.1.0",
+                "phpdocumentor/phpdocumentor": "~2",
+                "phpunit/phpunit": "~3.7"
+            },
+            "bin": [
+                "bin/validate-json"
+            ],
             "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.4.x-dev"
+                }
+            },
             "autoload": {
                 "psr-0": {
                     "JsonSchema": "src/"
@@ -100,15 +112,10 @@
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "NewBSD"
+                "BSD-3-Clause"
             ],
             "authors": [
                 {
-                    "name": "Igor Wiedler",
-                    "email": "igor@wiedler.ch",
-                    "homepage": "http://wiedler.ch/igor/"
-                },
-                {
                     "name": "Bruno Prieto Reis",
                     "email": "bruno.p.reis@gmail.com"
                 },
@@ -117,9 +124,12 @@
                     "email": "justin.rainbow@gmail.com"
                 },
                 {
+                    "name": "Igor Wiedler",
+                    "email": "igor@wiedler.ch"
+                },
+                {
                     "name": "Robert Schönthal",
-                    "email": "seroscho@googlemail.com",
-                    "homepage": "http://digitalkaoz.net"
+                    "email": "seroscho@googlemail.com"
                 }
             ],
             "description": "A library to validate a json schema.",
@@ -128,20 +138,20 @@
                 "json",
                 "schema"
             ],
-            "time": "2012-01-03 00:33:17"
+            "time": "2014-08-25 02:48:14"
         },
         {
             "name": "seld/jsonlint",
-            "version": "1.2.0",
+            "version": "1.3.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/Seldaek/jsonlint.git",
-                "reference": "9cae56dbe34f4392e7d0f559474df33749a39f8d"
+                "reference": "863ae85c6d3ef60ca49cb12bd051c4a0648c40c4"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/Seldaek/jsonlint/zipball/9cae56dbe34f4392e7d0f559474df33749a39f8d",
-                "reference": "9cae56dbe34f4392e7d0f559474df33749a39f8d",
+                "url": "https://api.github.com/repos/Seldaek/jsonlint/zipball/863ae85c6d3ef60ca49cb12bd051c4a0648c40c4",
+                "reference": "863ae85c6d3ef60ca49cb12bd051c4a0648c40c4",
                 "shasum": ""
             },
             "require": {
@@ -174,21 +184,21 @@
                 "parser",
                 "validator"
             ],
-            "time": "2014-07-20 17:36:11"
+            "time": "2015-01-04 21:18:15"
         },
         {
             "name": "symfony/console",
-            "version": "v2.5.3",
+            "version": "v2.6.4",
             "target-dir": "Symfony/Component/Console",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/Console.git",
-                "reference": "cd2d1e4bac2206b337326b0140ff475fe9ad5f63"
+                "reference": "e44154bfe3e41e8267d7a3794cd9da9a51cfac34"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/Console/zipball/cd2d1e4bac2206b337326b0140ff475fe9ad5f63",
-                "reference": "cd2d1e4bac2206b337326b0140ff475fe9ad5f63",
+                "url": "https://api.github.com/repos/symfony/Console/zipball/e44154bfe3e41e8267d7a3794cd9da9a51cfac34",
+                "reference": "e44154bfe3e41e8267d7a3794cd9da9a51cfac34",
                 "shasum": ""
             },
             "require": {
@@ -196,16 +206,18 @@
             },
             "require-dev": {
                 "psr/log": "~1.0",
-                "symfony/event-dispatcher": "~2.1"
+                "symfony/event-dispatcher": "~2.1",
+                "symfony/process": "~2.1"
             },
             "suggest": {
                 "psr/log": "For using the console logger",
-                "symfony/event-dispatcher": ""
+                "symfony/event-dispatcher": "",
+                "symfony/process": ""
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "2.5-dev"
+                    "dev-master": "2.6-dev"
                 }
             },
             "autoload": {
@@ -229,21 +241,21 @@
             ],
             "description": "Symfony Console Component",
             "homepage": "http://symfony.com",
-            "time": "2014-08-05 09:00:40"
+            "time": "2015-01-25 04:39:26"
         },
         {
             "name": "symfony/finder",
-            "version": "v2.5.3",
+            "version": "v2.6.4",
             "target-dir": "Symfony/Component/Finder",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/Finder.git",
-                "reference": "090fe4eaff414d8f2171c7a4748ea868d530775f"
+                "reference": "16513333bca64186c01609961a2bb1b95b5e1355"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/Finder/zipball/090fe4eaff414d8f2171c7a4748ea868d530775f",
-                "reference": "090fe4eaff414d8f2171c7a4748ea868d530775f",
+                "url": "https://api.github.com/repos/symfony/Finder/zipball/16513333bca64186c01609961a2bb1b95b5e1355",
+                "reference": "16513333bca64186c01609961a2bb1b95b5e1355",
                 "shasum": ""
             },
             "require": {
@@ -252,7 +264,7 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "2.5-dev"
+                    "dev-master": "2.6-dev"
                 }
             },
             "autoload": {
@@ -276,21 +288,21 @@
             ],
             "description": "Symfony Finder Component",
             "homepage": "http://symfony.com",
-            "time": "2014-07-28 13:20:46"
+            "time": "2015-01-03 08:01:59"
         },
         {
             "name": "symfony/process",
-            "version": "v2.5.3",
+            "version": "v2.6.4",
             "target-dir": "Symfony/Component/Process",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/Process.git",
-                "reference": "e0997d2a9a1a763484b34b989900b61322a9b056"
+                "reference": "ecfc23e89d9967999fa5f60a1e9af7384396e9ae"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/Process/zipball/e0997d2a9a1a763484b34b989900b61322a9b056",
-                "reference": "e0997d2a9a1a763484b34b989900b61322a9b056",
+                "url": "https://api.github.com/repos/symfony/Process/zipball/ecfc23e89d9967999fa5f60a1e9af7384396e9ae",
+                "reference": "ecfc23e89d9967999fa5f60a1e9af7384396e9ae",
                 "shasum": ""
             },
             "require": {
@@ -299,7 +311,7 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "2.5-dev"
+                    "dev-master": "2.6-dev"
                 }
             },
             "autoload": {
@@ -323,24 +335,16 @@
             ],
             "description": "Symfony Process Component",
             "homepage": "http://symfony.com",
-            "time": "2014-08-05 09:00:40"
+            "time": "2015-01-25 04:39:26"
         }
     ],
-    "packages-dev": [
-
-    ],
-    "aliases": [
-
-    ],
+    "packages-dev": [],
+    "aliases": [],
     "minimum-stability": "stable",
     "stability-flags": {
         "composer/composer": 15
     },
     "prefer-stable": false,
-    "platform": [
-
-    ],
-    "platform-dev": [
-
-    ]
+    "platform": [],
+    "platform-dev": []
 }
diff --git a/vendor/autoload.php b/vendor/autoload.php
index ae55193..9eb8867 100644
--- a/vendor/autoload.php
+++ b/vendor/autoload.php
@@ -4,4 +4,4 @@
 
 require_once __DIR__ . '/composer' . '/autoload_real.php';
 
-return ComposerAutoloaderInit5769bfb75e4ef6aed122035c1ba626bd::getLoader();
+return ComposerAutoloaderInit1fa859f8a4bcb707cfa48c4aa75542e2::getLoader();
diff --git a/vendor/composer/ClassLoader.php b/vendor/composer/ClassLoader.php
index 4433649..70d78bc 100644
--- a/vendor/composer/ClassLoader.php
+++ b/vendor/composer/ClassLoader.php
@@ -56,7 +56,11 @@ class ClassLoader
 
     public function getPrefixes()
     {
-        return call_user_func_array('array_merge', $this->prefixesPsr0);
+        if (!empty($this->prefixesPsr0)) {
+            return call_user_func_array('array_merge', $this->prefixesPsr0);
+        }
+
+        return array();
     }
 
     public function getPrefixesPsr4()
diff --git a/vendor/composer/autoload_real.php b/vendor/composer/autoload_real.php
index 5b86c3c..e2f7181 100644
--- a/vendor/composer/autoload_real.php
+++ b/vendor/composer/autoload_real.php
@@ -2,7 +2,7 @@
 
 // autoload_real.php @generated by Composer
 
-class ComposerAutoloaderInit5769bfb75e4ef6aed122035c1ba626bd
+class ComposerAutoloaderInit1fa859f8a4bcb707cfa48c4aa75542e2
 {
     private static $loader;
 
@@ -19,9 +19,9 @@ class ComposerAutoloaderInit5769bfb75e4ef6aed122035c1ba626bd
             return self::$loader;
         }
 
-        spl_autoload_register(array('ComposerAutoloaderInit5769bfb75e4ef6aed122035c1ba626bd', 'loadClassLoader'), true, true);
+        spl_autoload_register(array('ComposerAutoloaderInit1fa859f8a4bcb707cfa48c4aa75542e2', 'loadClassLoader'), true, true);
         self::$loader = $loader = new \Composer\Autoload\ClassLoader();
-        spl_autoload_unregister(array('ComposerAutoloaderInit5769bfb75e4ef6aed122035c1ba626bd', 'loadClassLoader'));
+        spl_autoload_unregister(array('ComposerAutoloaderInit1fa859f8a4bcb707cfa48c4aa75542e2', 'loadClassLoader'));
 
         $map = require __DIR__ . '/autoload_namespaces.php';
         foreach ($map as $namespace => $path) {
@@ -44,7 +44,7 @@ class ComposerAutoloaderInit5769bfb75e4ef6aed122035c1ba626bd
     }
 }
 
-function composerRequire5769bfb75e4ef6aed122035c1ba626bd($file)
+function composerRequire1fa859f8a4bcb707cfa48c4aa75542e2($file)
 {
     require $file;
 }
diff --git a/vendor/composer/composer/.travis.yml b/vendor/composer/composer/.travis.yml
index 800a4f2..4aed116 100644
--- a/vendor/composer/composer/.travis.yml
+++ b/vendor/composer/composer/.travis.yml
@@ -5,19 +5,19 @@ php:
   - 5.3
   - 5.4
   - 5.5
+  - 5.6
   - hhvm
 
-matrix:
-  allow_failures:
-    - php: hhvm
-
 before_script:
     - sudo apt-get install parallel
     - rm -f ~/.phpenv/versions/$(phpenv version-name)/etc/conf.d/xdebug.ini
-    - composer install --dev --prefer-source
-    - bin/composer install --dev --prefer-source
+    - composer install --prefer-source
+    - bin/composer install --prefer-source
     - git config --global user.name travis-ci
     - git config --global user.email travis@example.com
 
 script:
-    - ls -d tests/Composer/Test/* | parallel --gnu --keep-order 'echo "Running {} tests"; ./vendor/bin/phpunit -c tests/complete.phpunit.xml {};' || exit 1
+    - ls -d tests/Composer/Test/* | parallel --gnu --keep-order 'echo "Running {} tests"; ./vendor/bin/phpunit -c tests/complete.phpunit.xml {};'
+
+git:
+  depth: 5
diff --git a/vendor/composer/composer/CHANGELOG.md b/vendor/composer/composer/CHANGELOG.md
index e152f1d..d78b8e1 100644
--- a/vendor/composer/composer/CHANGELOG.md
+++ b/vendor/composer/composer/CHANGELOG.md
@@ -1,3 +1,33 @@
+### 1.0.0-alpha9 (2014-12-07)
+
+  * Added `remove` command to do the reverse of `require`
+  * Added --ignore-platform-reqs to `install`/`update` commands to install even if you are missing a php extension or have an invalid php version
+  * Added a warning when abandoned packages are being installed
+  * Added auto-selection of the version constraint in the `require` command, which can now be used simply as `composer require foo/bar`
+  * Added ability to define custom composer commands using scripts
+  * Added `browse` command to open a browser to the given package's repo URL (or homepage with `-H`)
+  * Added an `autoload-dev` section to declare dev-only autoload rules + a --no-dev flag to dump-autoload
+  * Added an `auth.json` file, with `store-auths` config option
+  * Added a `http-basic` config option to store login/pwds to hosts
+  * Added failover to source/dist and vice-versa in case a download method fails
+  * Added --path (-P) flag to the show command to see the install path of packages
+  * Added --update-with-dependencies and --update-no-dev flags to the require command
+  * Added `optimize-autoloader` config option to force the `-o` flag from the config
+  * Added `clear-cache` command
+  * Added a GzipDownloader to download single gzipped files
+  * Added `ssh` support in the `github-protocols` config option
+  * Added `pre-dependencies-solving` and `post-dependencies-solving` events
+  * Added `pre-archive-cmd` and `post-archive-cmd` script events to the `archive` command
+  * Added a `no-api` flag to GitHub VCS repos to skip the API but still get zip downloads
+  * Added http-basic auth support for private git repos not on github
+  * Added support for autoloading `.hh` files when running HHVM
+  * Added support for PHP 5.6
+  * Added support for OTP auth when retrieving a GitHub API key
+  * Fixed isolation of `files` autoloaded scripts to ensure they can not affect anything
+  * Improved performance of solving dependencies
+  * Improved SVN and Perforce support
+  * A boatload of minor fixes, documentation additions and UX improvements
+
 ### 1.0.0-alpha8 (2014-01-06)
 
   * Break: The `install` command now has --dev enabled by default. --no-dev can be used to install without dev requirements
diff --git a/vendor/composer/composer/README.md b/vendor/composer/composer/README.md
index e0e4e73..a86bc83 100644
--- a/vendor/composer/composer/README.md
+++ b/vendor/composer/composer/README.md
@@ -1,11 +1,11 @@
 Composer - Dependency Management for PHP
 ========================================
 
-Composer is a dependency manager tracking local dependencies of your projects and libraries.
+Composer helps you declare, manage and install dependencies of PHP projects, ensuring you have the right stack everywhere.
 
 See [https://getcomposer.org/](https://getcomposer.org/) for more information and documentation.
 
-[![Build Status](https://secure.travis-ci.org/composer/composer.png?branch=master)](http://travis-ci.org/composer/composer)
+[![Build Status](https://travis-ci.org/composer/composer.svg?branch=master)](https://travis-ci.org/composer/composer)
 
 Installation / Usage
 --------------------
@@ -65,7 +65,7 @@ merged. This is to ensure proper review of all the code.
 Fork the project, create a feature branch, and send us a pull request.
 
 To ensure a consistent code base, you should make sure the code follows
-the [Coding Standards](http://symfony.com/doc/2.0/contributing/code/standards.html)
+the [Coding Standards](http://symfony.com/doc/current/contributing/code/standards.html)
 which we borrowed from Symfony.
 
 If you would like to help take a look at the [list of issues](http://github.com/composer/composer/issues).
diff --git a/vendor/composer/composer/composer.json b/vendor/composer/composer/composer.json
index f0d4ee5..6d23997 100644
--- a/vendor/composer/composer/composer.json
+++ b/vendor/composer/composer/composer.json
@@ -1,6 +1,6 @@
 {
     "name": "composer/composer",
-    "description": "Dependency Manager",
+    "description": "Composer helps you declare, manage and install dependencies of PHP projects, ensuring you have the right stack everywhere.",
     "keywords": ["package", "dependency", "autoload"],
     "homepage": "http://getcomposer.org/",
     "type": "library",
@@ -23,14 +23,14 @@
     },
     "require": {
         "php": ">=5.3.2",
-        "justinrainbow/json-schema": "1.1.*",
-        "seld/jsonlint": "1.*",
+        "justinrainbow/json-schema": "~1.1",
+        "seld/jsonlint": "~1.0",
         "symfony/console": "~2.3",
         "symfony/finder": "~2.2",
         "symfony/process": "~2.1"
     },
     "require-dev": {
-        "phpunit/phpunit": "~3.7.10"
+        "phpunit/phpunit": "~4.0"
     },
     "suggest": {
         "ext-zip": "Enabling the zip extension allows you to unzip archives, and allows gzip compression of all internet traffic",
@@ -39,10 +39,16 @@
     "autoload": {
         "psr-0": { "Composer": "src/" }
     },
+    "autoload-dev": {
+        "psr-0": { "Composer\\Test": "tests/" }
+    },
     "bin": ["bin/composer"],
     "extra": {
         "branch-alias": {
             "dev-master": "1.0-dev"
         }
+    },
+    "scripts": {
+        "test": "phpunit"
     }
 }
diff --git a/vendor/composer/composer/composer.lock b/vendor/composer/composer/composer.lock
index e09b12a..b13b38f 100644
--- a/vendor/composer/composer/composer.lock
+++ b/vendor/composer/composer/composer.lock
@@ -1,47 +1,89 @@
 {
     "_readme": [
         "This file locks the dependencies of your project to a known state",
-        "Read more about it at http://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file"
+        "Read more about it at http://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
+        "This file is @generated automatically"
     ],
-    "hash": "370b764a9317165e8ea7a2e1623e031b",
+    "hash": "0430383b5ba00e406ce4a44253f49fe7",
     "packages": [
         {
             "name": "justinrainbow/json-schema",
-            "version": "1.1.0",
+            "version": "1.3.7",
             "source": {
                 "type": "git",
-                "url": "git://github.com/justinrainbow/json-schema.git",
-                "reference": "v1.1.0"
+                "url": "https://github.com/justinrainbow/json-schema.git",
+                "reference": "87b54b460febed69726c781ab67462084e97a105"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://github.com/justinrainbow/json-schema/zipball/v1.1.0",
-                "reference": "v1.1.0",
+                "url": "https://api.github.com/repos/justinrainbow/json-schema/zipball/87b54b460febed69726c781ab67462084e97a105",
+                "reference": "87b54b460febed69726c781ab67462084e97a105",
                 "shasum": ""
             },
             "require": {
                 "php": ">=5.3.0"
             },
+            "require-dev": {
+                "json-schema/json-schema-test-suite": "1.1.0",
+                "phpdocumentor/phpdocumentor": "~2",
+                "phpunit/phpunit": "~3.7"
+            },
+            "bin": [
+                "bin/validate-json"
+            ],
             "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.4.x-dev"
+                }
+            },
             "autoload": {
                 "psr-0": {
                     "JsonSchema": "src/"
                 }
             },
-            "time": "2012-01-02 21:33:17"
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Bruno Prieto Reis",
+                    "email": "bruno.p.reis@gmail.com"
+                },
+                {
+                    "name": "Justin Rainbow",
+                    "email": "justin.rainbow@gmail.com"
+                },
+                {
+                    "name": "Igor Wiedler",
+                    "email": "igor@wiedler.ch"
+                },
+                {
+                    "name": "Robert Schönthal",
+                    "email": "seroscho@googlemail.com"
+                }
+            ],
+            "description": "A library to validate a json schema.",
+            "homepage": "https://github.com/justinrainbow/json-schema",
+            "keywords": [
+                "json",
+                "schema"
+            ],
+            "time": "2014-08-25 02:48:14"
         },
         {
             "name": "seld/jsonlint",
-            "version": "1.1.2",
+            "version": "1.3.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/Seldaek/jsonlint.git",
-                "reference": "7cd4c4965e17e6e4c07f26d566619a4c76f8c672"
+                "reference": "a7bc2ec9520ad15382292591b617c43bdb1fec35"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/Seldaek/jsonlint/zipball/7cd4c4965e17e6e4c07f26d566619a4c76f8c672",
-                "reference": "7cd4c4965e17e6e4c07f26d566619a4c76f8c672",
+                "url": "https://api.github.com/repos/Seldaek/jsonlint/zipball/a7bc2ec9520ad15382292591b617c43bdb1fec35",
+                "reference": "a7bc2ec9520ad15382292591b617c43bdb1fec35",
                 "shasum": ""
             },
             "require": {
@@ -52,8 +94,8 @@
             ],
             "type": "library",
             "autoload": {
-                "psr-0": {
-                    "Seld\\JsonLint": "src/"
+                "psr-4": {
+                    "Seld\\JsonLint\\": "src/Seld/JsonLint/"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -64,8 +106,7 @@
                 {
                     "name": "Jordi Boggiano",
                     "email": "j.boggiano@seld.be",
-                    "homepage": "http://seld.be",
-                    "role": "Developer"
+                    "homepage": "http://seld.be"
                 }
             ],
             "description": "JSON Linter",
@@ -75,36 +116,40 @@
                 "parser",
                 "validator"
             ],
-            "time": "2013-11-04 15:41:11"
+            "time": "2014-09-05 15:36:20"
         },
         {
             "name": "symfony/console",
-            "version": "v2.4.1",
+            "version": "v2.6.0",
             "target-dir": "Symfony/Component/Console",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/Console.git",
-                "reference": "4c1ed2ff514bd85ee186eebb010ccbdeeab05af7"
+                "reference": "d3bac228fd7a2aac9193e241b239880b3ba39a10"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/Console/zipball/4c1ed2ff514bd85ee186eebb010ccbdeeab05af7",
-                "reference": "4c1ed2ff514bd85ee186eebb010ccbdeeab05af7",
+                "url": "https://api.github.com/repos/symfony/Console/zipball/d3bac228fd7a2aac9193e241b239880b3ba39a10",
+                "reference": "d3bac228fd7a2aac9193e241b239880b3ba39a10",
                 "shasum": ""
             },
             "require": {
                 "php": ">=5.3.3"
             },
             "require-dev": {
-                "symfony/event-dispatcher": "~2.1"
+                "psr/log": "~1.0",
+                "symfony/event-dispatcher": "~2.1",
+                "symfony/process": "~2.1"
             },
             "suggest": {
-                "symfony/event-dispatcher": ""
+                "psr/log": "For using the console logger",
+                "symfony/event-dispatcher": "",
+                "symfony/process": ""
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "2.4-dev"
+                    "dev-master": "2.6-dev"
                 }
             },
             "autoload": {
@@ -118,31 +163,31 @@
             ],
             "authors": [
                 {
-                    "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
-                },
-                {
                     "name": "Symfony Community",
                     "homepage": "http://symfony.com/contributors"
+                },
+                {
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com"
                 }
             ],
             "description": "Symfony Console Component",
             "homepage": "http://symfony.com",
-            "time": "2014-01-01 08:14:50"
+            "time": "2014-11-20 13:24:23"
         },
         {
             "name": "symfony/finder",
-            "version": "v2.4.1",
+            "version": "v2.6.0",
             "target-dir": "Symfony/Component/Finder",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/Finder.git",
-                "reference": "6904345cf2b3bbab1f6d6e4ce1724cb99df9f00a"
+                "reference": "d574347c652a14cfee0349f744c7880e1d9029fd"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/Finder/zipball/6904345cf2b3bbab1f6d6e4ce1724cb99df9f00a",
-                "reference": "6904345cf2b3bbab1f6d6e4ce1724cb99df9f00a",
+                "url": "https://api.github.com/repos/symfony/Finder/zipball/d574347c652a14cfee0349f744c7880e1d9029fd",
+                "reference": "d574347c652a14cfee0349f744c7880e1d9029fd",
                 "shasum": ""
             },
             "require": {
@@ -151,7 +196,7 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "2.4-dev"
+                    "dev-master": "2.6-dev"
                 }
             },
             "autoload": {
@@ -165,31 +210,31 @@
             ],
             "authors": [
                 {
-                    "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
-                },
-                {
                     "name": "Symfony Community",
                     "homepage": "http://symfony.com/contributors"
+                },
+                {
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com"
                 }
             ],
             "description": "Symfony Finder Component",
             "homepage": "http://symfony.com",
-            "time": "2014-01-01 08:14:50"
+            "time": "2014-11-28 10:00:40"
         },
         {
             "name": "symfony/process",
-            "version": "v2.4.1",
+            "version": "v2.6.0",
             "target-dir": "Symfony/Component/Process",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/Process.git",
-                "reference": "58fdccb311e44f28866f976c2d7b3227e9f713db"
+                "reference": "dc88f75d1c07791e5733f90be747961dce26cf05"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/Process/zipball/58fdccb311e44f28866f976c2d7b3227e9f713db",
-                "reference": "58fdccb311e44f28866f976c2d7b3227e9f713db",
+                "url": "https://api.github.com/repos/symfony/Process/zipball/dc88f75d1c07791e5733f90be747961dce26cf05",
+                "reference": "dc88f75d1c07791e5733f90be747961dce26cf05",
                 "shasum": ""
             },
             "require": {
@@ -198,7 +243,7 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "2.4-dev"
+                    "dev-master": "2.6-dev"
                 }
             },
             "autoload": {
@@ -212,56 +257,114 @@
             ],
             "authors": [
                 {
-                    "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
-                },
-                {
                     "name": "Symfony Community",
                     "homepage": "http://symfony.com/contributors"
+                },
+                {
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com"
                 }
             ],
             "description": "Symfony Process Component",
             "homepage": "http://symfony.com",
-            "time": "2014-01-05 02:10:50"
+            "time": "2014-11-04 14:29:39"
         }
     ],
     "packages-dev": [
         {
+            "name": "doctrine/instantiator",
+            "version": "1.0.4",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/doctrine/instantiator.git",
+                "reference": "f976e5de371104877ebc89bd8fecb0019ed9c119"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/doctrine/instantiator/zipball/f976e5de371104877ebc89bd8fecb0019ed9c119",
+                "reference": "f976e5de371104877ebc89bd8fecb0019ed9c119",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3,<8.0-DEV"
+            },
+            "require-dev": {
+                "athletic/athletic": "~0.1.8",
+                "ext-pdo": "*",
+                "ext-phar": "*",
+                "phpunit/phpunit": "~4.0",
+                "squizlabs/php_codesniffer": "2.0.*@ALPHA"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.0.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-0": {
+                    "Doctrine\\Instantiator\\": "src"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Marco Pivetta",
+                    "email": "ocramius@gmail.com",
+                    "homepage": "http://ocramius.github.com/"
+                }
+            ],
+            "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors",
+            "homepage": "https://github.com/doctrine/instantiator",
+            "keywords": [
+                "constructor",
+                "instantiate"
+            ],
+            "time": "2014-10-13 12:58:55"
+        },
+        {
             "name": "phpunit/php-code-coverage",
-            "version": "1.2.13",
+            "version": "2.0.12",
             "source": {
                 "type": "git",
                 "url": "https://github.com/sebastianbergmann/php-code-coverage.git",
-                "reference": "466e7cd2554b4e264c9e3f31216d25ac0e5f3d94"
+                "reference": "7ce9da20f96964bb7a4033f53834df13328dbeab"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/466e7cd2554b4e264c9e3f31216d25ac0e5f3d94",
-                "reference": "466e7cd2554b4e264c9e3f31216d25ac0e5f3d94",
+                "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/7ce9da20f96964bb7a4033f53834df13328dbeab",
+                "reference": "7ce9da20f96964bb7a4033f53834df13328dbeab",
                 "shasum": ""
             },
             "require": {
                 "php": ">=5.3.3",
-                "phpunit/php-file-iterator": ">=1.3.0@stable",
-                "phpunit/php-text-template": ">=1.1.1@stable",
-                "phpunit/php-token-stream": ">=1.1.3@stable"
+                "phpunit/php-file-iterator": "~1.3",
+                "phpunit/php-text-template": "~1.2",
+                "phpunit/php-token-stream": "~1.3",
+                "sebastian/environment": "~1.0",
+                "sebastian/version": "~1.0"
             },
             "require-dev": {
-                "phpunit/phpunit": "3.7.*@dev"
+                "ext-xdebug": ">=2.1.4",
+                "phpunit/phpunit": "~4.1"
             },
             "suggest": {
                 "ext-dom": "*",
-                "ext-xdebug": ">=2.0.5"
+                "ext-xdebug": ">=2.2.1",
+                "ext-xmlwriter": "*"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.2.x-dev"
+                    "dev-master": "2.0.x-dev"
                 }
             },
             "autoload": {
                 "classmap": [
-                    "PHP/"
+                    "src/"
                 ]
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -285,7 +388,7 @@
                 "testing",
                 "xunit"
             ],
-            "time": "2013-09-10 08:14:32"
+            "time": "2014-12-02 13:17:01"
         },
         {
             "name": "phpunit/php-file-iterator",
@@ -334,16 +437,16 @@
         },
         {
             "name": "phpunit/php-text-template",
-            "version": "1.1.4",
+            "version": "1.2.0",
             "source": {
                 "type": "git",
-                "url": "git://github.com/sebastianbergmann/php-text-template.git",
-                "reference": "1.1.4"
+                "url": "https://github.com/sebastianbergmann/php-text-template.git",
+                "reference": "206dfefc0ffe9cebf65c413e3d0e809c82fbf00a"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://github.com/sebastianbergmann/php-text-template/zipball/1.1.4",
-                "reference": "1.1.4",
+                "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/206dfefc0ffe9cebf65c413e3d0e809c82fbf00a",
+                "reference": "206dfefc0ffe9cebf65c413e3d0e809c82fbf00a",
                 "shasum": ""
             },
             "require": {
@@ -374,7 +477,7 @@
             "keywords": [
                 "template"
             ],
-            "time": "2012-10-31 11:15:28"
+            "time": "2014-01-30 17:20:04"
         },
         {
             "name": "phpunit/php-timer",
@@ -422,45 +525,44 @@
         },
         {
             "name": "phpunit/php-token-stream",
-            "version": "1.2.1",
+            "version": "1.3.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/sebastianbergmann/php-token-stream.git",
-                "reference": "5220af2a7929aa35cf663d97c89ad3d50cf5fa3e"
+                "reference": "f8d5d08c56de5cfd592b3340424a81733259a876"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/5220af2a7929aa35cf663d97c89ad3d50cf5fa3e",
-                "reference": "5220af2a7929aa35cf663d97c89ad3d50cf5fa3e",
+                "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/f8d5d08c56de5cfd592b3340424a81733259a876",
+                "reference": "f8d5d08c56de5cfd592b3340424a81733259a876",
                 "shasum": ""
             },
             "require": {
                 "ext-tokenizer": "*",
                 "php": ">=5.3.3"
             },
+            "require-dev": {
+                "phpunit/phpunit": "~4.2"
+            },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.2-dev"
+                    "dev-master": "1.3-dev"
                 }
             },
             "autoload": {
                 "classmap": [
-                    "PHP/"
+                    "src/"
                 ]
             },
             "notification-url": "https://packagist.org/downloads/",
-            "include-path": [
-                ""
-            ],
             "license": [
                 "BSD-3-Clause"
             ],
             "authors": [
                 {
                     "name": "Sebastian Bergmann",
-                    "email": "sb@sebastian-bergmann.de",
-                    "role": "lead"
+                    "email": "sebastian@phpunit.de"
                 }
             ],
             "description": "Wrapper around PHP's tokenizer extension.",
@@ -468,56 +570,56 @@
             "keywords": [
                 "tokenizer"
             ],
-            "time": "2013-09-13 04:58:23"
+            "time": "2014-08-31 06:12:13"
         },
         {
             "name": "phpunit/phpunit",
-            "version": "3.7.28",
+            "version": "4.3.5",
             "source": {
                 "type": "git",
                 "url": "https://github.com/sebastianbergmann/phpunit.git",
-                "reference": "3b97c8492bcafbabe6b6fbd2ab35f2f04d932a8d"
+                "reference": "2dab9d593997db4abcf58d0daf798eb4e9cecfe1"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/3b97c8492bcafbabe6b6fbd2ab35f2f04d932a8d",
-                "reference": "3b97c8492bcafbabe6b6fbd2ab35f2f04d932a8d",
+                "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/2dab9d593997db4abcf58d0daf798eb4e9cecfe1",
+                "reference": "2dab9d593997db4abcf58d0daf798eb4e9cecfe1",
                 "shasum": ""
             },
             "require": {
                 "ext-dom": "*",
+                "ext-json": "*",
                 "ext-pcre": "*",
                 "ext-reflection": "*",
                 "ext-spl": "*",
                 "php": ">=5.3.3",
-                "phpunit/php-code-coverage": "~1.2.1",
-                "phpunit/php-file-iterator": ">=1.3.1",
-                "phpunit/php-text-template": ">=1.1.1",
-                "phpunit/php-timer": ">=1.0.4",
-                "phpunit/phpunit-mock-objects": "~1.2.0",
+                "phpunit/php-code-coverage": "~2.0",
+                "phpunit/php-file-iterator": "~1.3.2",
+                "phpunit/php-text-template": "~1.2",
+                "phpunit/php-timer": "~1.0.2",
+                "phpunit/phpunit-mock-objects": "~2.3",
+                "sebastian/comparator": "~1.0",
+                "sebastian/diff": "~1.1",
+                "sebastian/environment": "~1.0",
+                "sebastian/exporter": "~1.0",
+                "sebastian/version": "~1.0",
                 "symfony/yaml": "~2.0"
             },
-            "require-dev": {
-                "pear-pear/pear": "1.9.4"
-            },
             "suggest": {
-                "ext-json": "*",
-                "ext-simplexml": "*",
-                "ext-tokenizer": "*",
-                "phpunit/php-invoker": ">=1.1.0,<1.2.0"
+                "phpunit/php-invoker": "~1.1"
             },
             "bin": [
-                "composer/bin/phpunit"
+                "phpunit"
             ],
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "3.7.x-dev"
+                    "dev-master": "4.3.x-dev"
                 }
             },
             "autoload": {
                 "classmap": [
-                    "PHPUnit/"
+                    "src/"
                 ]
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -542,39 +644,45 @@
                 "testing",
                 "xunit"
             ],
-            "time": "2013-10-17 07:27:40"
+            "time": "2014-11-11 10:11:09"
         },
         {
             "name": "phpunit/phpunit-mock-objects",
-            "version": "1.2.3",
+            "version": "2.3.0",
             "source": {
                 "type": "git",
-                "url": "git://github.com/sebastianbergmann/phpunit-mock-objects.git",
-                "reference": "1.2.3"
+                "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git",
+                "reference": "c63d2367247365f688544f0d500af90a11a44c65"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://github.com/sebastianbergmann/phpunit-mock-objects/archive/1.2.3.zip",
-                "reference": "1.2.3",
+                "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/c63d2367247365f688544f0d500af90a11a44c65",
+                "reference": "c63d2367247365f688544f0d500af90a11a44c65",
                 "shasum": ""
             },
             "require": {
+                "doctrine/instantiator": "~1.0,>=1.0.1",
                 "php": ">=5.3.3",
-                "phpunit/php-text-template": ">=1.1.1@stable"
+                "phpunit/php-text-template": "~1.2"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "~4.3"
             },
             "suggest": {
                 "ext-soap": "*"
             },
             "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.3.x-dev"
+                }
+            },
             "autoload": {
                 "classmap": [
-                    "PHPUnit/"
+                    "src/"
                 ]
             },
             "notification-url": "https://packagist.org/downloads/",
-            "include-path": [
-                ""
-            ],
             "license": [
                 "BSD-3-Clause"
             ],
@@ -591,21 +699,287 @@
                 "mock",
                 "xunit"
             ],
-            "time": "2013-01-13 10:24:48"
+            "time": "2014-10-03 05:12:11"
+        },
+        {
+            "name": "sebastian/comparator",
+            "version": "1.0.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/comparator.git",
+                "reference": "e54a01c0da1b87db3c5a3c4c5277ddf331da4aef"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/e54a01c0da1b87db3c5a3c4c5277ddf331da4aef",
+                "reference": "e54a01c0da1b87db3c5a3c4c5277ddf331da4aef",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3",
+                "sebastian/diff": "~1.1",
+                "sebastian/exporter": "~1.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "~4.1"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.0.x-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Jeff Welch",
+                    "email": "whatthejeff@gmail.com"
+                },
+                {
+                    "name": "Volker Dusch",
+                    "email": "github@wallbash.com"
+                },
+                {
+                    "name": "Bernhard Schussek",
+                    "email": "bschussek@2bepublished.at"
+                },
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de"
+                }
+            ],
+            "description": "Provides the functionality to compare PHP values for equality",
+            "homepage": "http://www.github.com/sebastianbergmann/comparator",
+            "keywords": [
+                "comparator",
+                "compare",
+                "equality"
+            ],
+            "time": "2014-05-11 23:00:21"
+        },
+        {
+            "name": "sebastian/diff",
+            "version": "1.2.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/diff.git",
+                "reference": "5843509fed39dee4b356a306401e9dd1a931fec7"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/5843509fed39dee4b356a306401e9dd1a931fec7",
+                "reference": "5843509fed39dee4b356a306401e9dd1a931fec7",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "~4.2"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.2-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Kore Nordmann",
+                    "email": "mail@kore-nordmann.de"
+                },
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de"
+                }
+            ],
+            "description": "Diff implementation",
+            "homepage": "http://www.github.com/sebastianbergmann/diff",
+            "keywords": [
+                "diff"
+            ],
+            "time": "2014-08-15 10:29:00"
+        },
+        {
+            "name": "sebastian/environment",
+            "version": "1.2.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/environment.git",
+                "reference": "6e6c71d918088c251b181ba8b3088af4ac336dd7"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/6e6c71d918088c251b181ba8b3088af4ac336dd7",
+                "reference": "6e6c71d918088c251b181ba8b3088af4ac336dd7",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "~4.3"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.2.x-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de"
+                }
+            ],
+            "description": "Provides functionality to handle HHVM/PHP environments",
+            "homepage": "http://www.github.com/sebastianbergmann/environment",
+            "keywords": [
+                "Xdebug",
+                "environment",
+                "hhvm"
+            ],
+            "time": "2014-10-25 08:00:45"
+        },
+        {
+            "name": "sebastian/exporter",
+            "version": "1.0.2",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/exporter.git",
+                "reference": "c7d59948d6e82818e1bdff7cadb6c34710eb7dc0"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/c7d59948d6e82818e1bdff7cadb6c34710eb7dc0",
+                "reference": "c7d59948d6e82818e1bdff7cadb6c34710eb7dc0",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "~4.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.0.x-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Jeff Welch",
+                    "email": "whatthejeff@gmail.com"
+                },
+                {
+                    "name": "Volker Dusch",
+                    "email": "github@wallbash.com"
+                },
+                {
+                    "name": "Bernhard Schussek",
+                    "email": "bschussek@2bepublished.at"
+                },
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de"
+                },
+                {
+                    "name": "Adam Harvey",
+                    "email": "aharvey@php.net"
+                }
+            ],
+            "description": "Provides the functionality to export PHP variables for visualization",
+            "homepage": "http://www.github.com/sebastianbergmann/exporter",
+            "keywords": [
+                "export",
+                "exporter"
+            ],
+            "time": "2014-09-10 00:51:36"
+        },
+        {
+            "name": "sebastian/version",
+            "version": "1.0.3",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/version.git",
+                "reference": "b6e1f0cf6b9e1ec409a0d3e2f2a5fb0998e36b43"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/b6e1f0cf6b9e1ec409a0d3e2f2a5fb0998e36b43",
+                "reference": "b6e1f0cf6b9e1ec409a0d3e2f2a5fb0998e36b43",
+                "shasum": ""
+            },
+            "type": "library",
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de",
+                    "role": "lead"
+                }
+            ],
+            "description": "Library that helps with managing the version number of Git-hosted PHP projects",
+            "homepage": "https://github.com/sebastianbergmann/version",
+            "time": "2014-03-07 15:35:33"
         },
         {
             "name": "symfony/yaml",
-            "version": "v2.4.1",
+            "version": "v2.6.0",
             "target-dir": "Symfony/Component/Yaml",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/Yaml.git",
-                "reference": "4e1a237fc48145fae114b96458d799746ad89aa0"
+                "reference": "51c845cf3e4bfc182d1d5c05ed1c7338361d86f8"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/Yaml/zipball/4e1a237fc48145fae114b96458d799746ad89aa0",
-                "reference": "4e1a237fc48145fae114b96458d799746ad89aa0",
+                "url": "https://api.github.com/repos/symfony/Yaml/zipball/51c845cf3e4bfc182d1d5c05ed1c7338361d86f8",
+                "reference": "51c845cf3e4bfc182d1d5c05ed1c7338361d86f8",
                 "shasum": ""
             },
             "require": {
@@ -614,7 +988,7 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "2.4-dev"
+                    "dev-master": "2.6-dev"
                 }
             },
             "autoload": {
@@ -628,30 +1002,25 @@
             ],
             "authors": [
                 {
-                    "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
-                },
-                {
                     "name": "Symfony Community",
                     "homepage": "http://symfony.com/contributors"
+                },
+                {
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com"
                 }
             ],
             "description": "Symfony Yaml Component",
             "homepage": "http://symfony.com",
-            "time": "2013-12-28 08:12:03"
+            "time": "2014-11-20 13:24:23"
         }
     ],
-    "aliases": [
-
-    ],
+    "aliases": [],
     "minimum-stability": "stable",
-    "stability-flags": [
-
-    ],
+    "stability-flags": [],
+    "prefer-stable": false,
     "platform": {
         "php": ">=5.3.2"
     },
-    "platform-dev": [
-
-    ]
+    "platform-dev": []
 }
diff --git a/vendor/composer/composer/doc/00-intro.md b/vendor/composer/composer/doc/00-intro.md
index 7b62fee..81b8c92 100644
--- a/vendor/composer/composer/doc/00-intro.md
+++ b/vendor/composer/composer/doc/00-intro.md
@@ -33,11 +33,13 @@ You decide to use [monolog](https://github.com/Seldaek/monolog). In order to
 add it to your project, all you need to do is create a `composer.json` file
 which describes the project's dependencies.
 
-    {
-        "require": {
-            "monolog/monolog": "1.2.*"
-        }
+```json
+{
+    "require": {
+        "monolog/monolog": "1.2.*"
     }
+}
+```
 
 We are simply stating that our project requires some `monolog/monolog` package,
 any version beginning with `1.2`.
@@ -63,7 +65,16 @@ Linux and OSX.
 To actually get Composer, we need to do two things. The first one is installing
 Composer (again, this means downloading it into your project):
 
-    $ curl -sS https://getcomposer.org/installer | php
+```sh
+curl -sS https://getcomposer.org/installer | php
+```
+
+> **Note:** If the above fails for some reason, you can download the installer
+> with `php` instead:
+
+```sh
+php -r "readfile('https://getcomposer.org/installer');" | php
+```
 
 This will just check a few PHP settings and then download `composer.phar` to
 your working directory. This file is the Composer binary. It is a PHAR (PHP
@@ -73,7 +84,9 @@ line, amongst other things.
 You can install Composer to a specific directory by using the `--install-dir`
 option and providing a target directory (it can be an absolute or relative path):
 
-    $ curl -sS https://getcomposer.org/installer | php -- --install-dir=bin
+```sh
+curl -sS https://getcomposer.org/installer | php -- --install-dir=bin
+```
 
 #### Globally
 
@@ -83,8 +96,10 @@ executable and invoke it without `php`.
 
 You can run these commands to easily access `composer` from anywhere on your system:
 
-    $ curl -sS https://getcomposer.org/installer | php
-    $ mv composer.phar /usr/local/bin/composer
+```sh
+curl -sS https://getcomposer.org/installer | php
+mv composer.phar /usr/local/bin/composer
+```
 
 > **Note:** If the above fails due to permissions, run the `mv` line
 > again with sudo.
@@ -95,13 +110,12 @@ Then, just run `composer` in order to run Composer instead of `php composer.phar
 
 Composer is part of the homebrew-php project.
 
-1. Tap the homebrew-php repository into your brew installation if you haven't done
-   so yet: `brew tap josegonzalez/homebrew-php`
-2. Run `brew install josegonzalez/php/composer`.
-3. Use Composer with the `composer` command.
-
-> **Note:** If you receive an error saying PHP53 or higher is missing use this command to install php 
-> `brew install php53-intl`
+```sh
+brew update
+brew tap homebrew/dupes
+brew tap homebrew/php
+brew install composer
+```
 
 ## Installation - Windows
 
@@ -118,21 +132,25 @@ just call `composer` from any directory in your command line.
 Change to a directory on your `PATH` and run the install snippet to download
 composer.phar:
 
-    C:\Users\username>cd C:\bin
-    C:\bin>php -r "eval('?>'.file_get_contents('https://getcomposer.org/installer'));"
+```sh
+C:\Users\username>cd C:\bin
+C:\bin>php -r "readfile('https://getcomposer.org/installer');" | php
+```
 
-> **Note:** If the above fails due to file_get_contents, use the `http` url or enable php_openssl.dll in php.ini
+> **Note:** If the above fails due to readfile, use the `http` url or enable php_openssl.dll in php.ini
 
 Create a new `composer.bat` file alongside `composer.phar`:
 
-    C:\bin>echo @php "%~dp0composer.phar" %*>composer.bat
+```sh
+C:\bin>echo @php "%~dp0composer.phar" %*>composer.bat
+```
 
 Close your current terminal. Test usage with a new terminal:
 
-    C:\Users\username>composer -V
-    Composer version 27d8904
-
-    C:\Users\username>
+```sh
+C:\Users\username>composer -V
+Composer version 27d8904
+```
 
 ## Using Composer
 
@@ -142,12 +160,16 @@ don't have a `composer.json` file in the current directory please skip to the
 
 To resolve and download dependencies, run the `install` command:
 
-    $ php composer.phar install
+```sh
+php composer.phar install
+```
 
 If you did a global install and do not have the phar in that directory
 run this instead:
 
-    $ composer install
+```sh
+composer install
+```
 
 Following the [example above](#declaring-dependencies), this will download
 monolog into the `vendor/monolog/monolog` directory.
@@ -159,7 +181,9 @@ capable of autoloading all of the classes in any of the libraries that it
 downloads. To use it, just add the following line to your code's bootstrap
 process:
 
-    require 'vendor/autoload.php';
+```php
+require 'vendor/autoload.php';
+```
 
 Woah! Now start using monolog! To keep learning more about Composer, keep
 reading the "Basic Usage" chapter.
diff --git a/vendor/composer/composer/doc/01-basic-usage.md b/vendor/composer/composer/doc/01-basic-usage.md
index 1aa3eee..06d2a8c 100644
--- a/vendor/composer/composer/doc/01-basic-usage.md
+++ b/vendor/composer/composer/doc/01-basic-usage.md
@@ -4,20 +4,26 @@
 
 To install Composer, you just need to download the `composer.phar` executable.
 
-    $ curl -sS https://getcomposer.org/installer | php
+```sh
+curl -sS https://getcomposer.org/installer | php
+```
 
 For the details, see the [Introduction](00-intro.md) chapter.
 
 To check if Composer is working, just run the PHAR through `php`:
 
-    $ php composer.phar
+```sh
+php composer.phar
+```
 
 This should give you a list of available commands.
 
 > **Note:** You can also perform the checks only without downloading Composer
 > by using the `--check` option. For more information, just use `--help`.
 >
->     $ curl -sS https://getcomposer.org/installer | php -- --help
+> ```sh
+> curl -sS https://getcomposer.org/installer | php -- --help
+> ```
 
 ## `composer.json`: Project Setup
 
@@ -34,11 +40,13 @@ The first (and often only) thing you specify in `composer.json` is the
 `require` key. You're simply telling Composer which packages your project
 depends on.
 
-    {
-        "require": {
-            "monolog/monolog": "1.0.*"
-        }
+```json
+{
+    "require": {
+        "monolog/monolog": "1.0.*"
     }
+}
+```
 
 As you can see, `require` takes an object that maps **package names** (e.g. `monolog/monolog`)
 to **package versions** (e.g. `1.0.*`).
@@ -64,12 +72,12 @@ means any version in the `1.0` development branch. It would match `1.0.0`,
 
 Version constraints can be specified in a few different ways.
 
-Name           | Example                                   | Description
--------------- | ---------------------                     | -----------
-Exact version  | `1.0.2`                                   | You can specify the exact version of a package.
-Range          | `>=1.0` `>=1.0,<2.0` `>=1.0,<1.1 | >=1.2` | By using comparison operators you can specify ranges of valid versions. Valid operators are `>`, `>=`, `<`, `<=`, `!=`. <br />You can define multiple ranges, separated by a comma, which will be treated as a **logical AND**. A pipe symbol `|` will be treated as a **logical OR**. <br />AND has higher precedence than OR.
-Wildcard       | `1.0.*`                                   | You can specify a pattern with a `*` wildcard. `1.0.*` is the equivalent of `>=1.0,<1.1`.
-Tilde Operator | `~1.2`                                    | Very useful for projects that follow semantic versioning. `~1.2` is equivalent to `>=1.2,<2.0`. For more details, read the next section below.
+Name           | Example                                                            | Description
+-------------- | ------------------------------------------------------------------ | -----------
+Exact version  | `1.0.2`                                                            | You can specify the exact version of a package.
+Range          | `>=1.0` `>=1.0,<2.0` <code>&gt;=1.0,&lt;1.1 &#124; &gt;=1.2</code> | By using comparison operators you can specify ranges of valid versions. Valid operators are `>`, `>=`, `<`, `<=`, `!=`. <br />You can define multiple ranges. Ranges separated by a comma (`,`) will be treated as a **logical AND**. A pipe (<code>&#124;</code>) will be treated as a **logical OR**. AND has higher precedence than OR.
+Wildcard       | `1.0.*`                                                            | You can specify a pattern with a `*` wildcard. `1.0.*` is the equivalent of `>=1.0,<1.1`.
+Tilde Operator | `~1.2`                                                             | Very useful for projects that follow semantic versioning. `~1.2` is equivalent to `>=1.2,<2.0`. For more details, read the next section below.
 
 ### Next Significant Release (Tilde Operator)
 
@@ -82,6 +90,15 @@ including, 2.0). Since in theory there should be no backwards compatibility
 breaks until 2.0, that works well. Another way of looking at it is that using
 `~` specifies a minimum version, but allows the last digit specified to go up.
 
+> **Note:** Though `2.0-beta.1` is strictly before `2.0`, a version constraint
+> like `~1.2` would not install it. As said above `~1.2` only means the `.2`
+> can change but the `1.` part is fixed.
+
+> **Note:** The `~` operator has an exception on its behavior for the major
+> release number. This means for example that `~1` is the same as `~1.0` as
+> it will not allow the major number to increase trying to keep backwards
+> compatibility.
+
 ### Stability
 
 By default only stable releases are taken into consideration. If you would like
@@ -95,7 +112,9 @@ packages instead of doing per dependency you can also use the
 To fetch the defined dependencies into your local project, just run the
 `install` command of `composer.phar`.
 
-    $ php composer.phar install
+```sh
+php composer.phar install
+```
 
 This will find the latest version of `monolog/monolog` that matches the
 supplied version constraint and download it into the `vendor` directory.
@@ -130,18 +149,25 @@ dependencies installed are still working even if your dependencies released
 many new versions since then.
 
 If no `composer.lock` file exists, Composer will read the dependencies and
-versions from `composer.json` and  create the lock file.
+versions from `composer.json` and  create the lock file after executing the `update` or the `install`
+command.
 
 This means that if any of the dependencies get a new version, you won't get the updates
 automatically. To update to the new version, use `update` command. This will fetch
 the latest matching versions (according to your `composer.json` file) and also update
 the lock file with the new version.
 
-    $ php composer.phar update
-
+```sh
+php composer.phar update
+```
+> **Note:** Composer will display a Warning when executing an `install` command if 
+ `composer.lock` and `composer.json` are not synchronized.
+ 
 If you only want to install or update one dependency, you can whitelist them:
 
-    $ php composer.phar update monolog/monolog [...]
+```sh
+php composer.phar update monolog/monolog [...]
+```
 
 > **Note:** For libraries it is not necessarily recommended to commit the lock file,
 > see also: [Libraries - Lock file](02-libraries.md#lock-file).
@@ -167,25 +193,31 @@ For libraries that specify autoload information, Composer generates a
 `vendor/autoload.php` file. You can simply include this file and you
 will get autoloading for free.
 
-    require 'vendor/autoload.php';
+```php
+require 'vendor/autoload.php';
+```
 
 This makes it really easy to use third party code. For example: If your
 project depends on monolog, you can just start using classes from it, and they
 will be autoloaded.
 
-    $log = new Monolog\Logger('name');
-    $log->pushHandler(new Monolog\Handler\StreamHandler('app.log', Monolog\Logger::WARNING));
+```php
+$log = new Monolog\Logger('name');
+$log->pushHandler(new Monolog\Handler\StreamHandler('app.log', Monolog\Logger::WARNING));
 
-    $log->addWarning('Foo');
+$log->addWarning('Foo');
+```
 
 You can even add your own code to the autoloader by adding an `autoload` field
 to `composer.json`.
 
-    {
-        "autoload": {
-            "psr-4": {"Acme\\": "src/"}
-        }
+```json
+{
+    "autoload": {
+        "psr-4": {"Acme\\": "src/"}
     }
+}
+```
 
 Composer will register a [PSR-4](http://www.php-fig.org/psr/psr-4/) autoloader
 for the `Acme` namespace.
@@ -201,8 +233,10 @@ Including that file will also return the autoloader instance, so you can store
 the return value of the include call in a variable and add more namespaces.
 This can be useful for autoloading classes in a test suite, for example.
 
-    $loader = require 'vendor/autoload.php';
-    $loader->add('Acme\\Test\\', __DIR__);
+```php
+$loader = require 'vendor/autoload.php';
+$loader->add('Acme\\Test\\', __DIR__);
+```
 
 In addition to PSR-4 autoloading, classmap is also supported. This allows
 classes to be autoloaded even if they do not conform to PSR-4. See the
diff --git a/vendor/composer/composer/doc/02-libraries.md b/vendor/composer/composer/doc/02-libraries.md
index 2742806..561f3aa 100644
--- a/vendor/composer/composer/doc/02-libraries.md
+++ b/vendor/composer/composer/doc/02-libraries.md
@@ -12,12 +12,14 @@ libraries is that your project is a package without a name.
 In order to make that package installable you need to give it a name. You do
 this by adding a `name` to `composer.json`:
 
-    {
-        "name": "acme/hello-world",
-        "require": {
-            "monolog/monolog": "1.0.*"
-        }
+```json
+{
+    "name": "acme/hello-world",
+    "require": {
+        "monolog/monolog": "1.0.*"
     }
+}
+```
 
 In this case the project name is `acme/hello-world`, where `acme` is the
 vendor name. Supplying a vendor name is mandatory.
@@ -33,8 +35,11 @@ installed on the system but are not actually installable by Composer. This
 includes PHP itself, PHP extensions and some system libraries.
 
 * `php` represents the PHP version of the user, allowing you to apply
-   constraints, e.g. `>=5.4.0`. To require a 64bit version of php, you can
-   require the `php-64bit` package.
+  constraints, e.g. `>=5.4.0`. To require a 64bit version of php, you can
+  require the `php-64bit` package.
+
+* `hhvm` represents the version of the HHVM runtime (aka HipHop Virtual
+  Machine) and allows you to apply a constraint, e.g., '>=2.3.3'.
 
 * `ext-<name>` allows you to require PHP extensions (includes core
   extensions). Versioning can be quite inconsistent here, so it's often
@@ -42,8 +47,8 @@ includes PHP itself, PHP extensions and some system libraries.
   package name is `ext-gd`.
 
 * `lib-<name>` allows constraints to be made on versions of libraries used by
-  PHP. The following are available: `curl`, `iconv`, `libxml`, `openssl`,
-  `pcre`, `uuid`, `xsl`.
+  PHP. The following are available: `curl`, `iconv`, `icu`, `libxml`,
+  `openssl`, `pcre`, `uuid`, `xsl`.
 
 You can use `composer show --platform` to get a list of your locally available
 platform packages.
@@ -59,9 +64,11 @@ version numbers are extracted from these.
 If you are creating packages by hand and really have to specify it explicitly,
 you can just add a `version` field:
 
-    {
-        "version": "1.0.0"
-    }
+```json
+{
+    "version": "1.0.0"
+}
+```
 
 > **Note:** You should avoid specifying the version field explicitly, because
 > for tags the value must match the tag name.
@@ -75,12 +82,12 @@ a number.
 
 Here are a few examples of valid tag names:
 
-    1.0.0
-    v1.0.0
-    1.10.5-RC1
-    v4.4.4beta2
-    v2.0.0-alpha
-    v2.0.4-p1
+- 1.0.0
+- v1.0.0
+- 1.10.5-RC1
+- v4.4.4-beta2
+- v2.0.0-alpha
+- v2.0.4-p1
 
 > **Note:** Even if your tag is prefixed with `v`, a [version constraint](01-basic-usage.md#package-versions)
 > in a `require` statement has to be specified without prefix
@@ -98,9 +105,9 @@ like a version, it will be `dev-{branchname}`. `master` results in a
 
 Here are some examples of version branch names:
 
-    1.x
-    1.0 (equals 1.0.x)
-    1.1.x
+- 1.x
+- 1.0 (equals 1.0.x)
+- 1.1.x
 
 > **Note:** When you install a development version, it will be automatically
 > pulled from its `source`. See the [`install`](03-cli.md#install) command
@@ -137,12 +144,14 @@ project locally. We will call it `acme/blog`. This blog will depend on
 accomplish this by creating a new `blog` directory somewhere, containing a
 `composer.json`:
 
-    {
-        "name": "acme/blog",
-        "require": {
-            "acme/hello-world": "dev-master"
-        }
+```json
+{
+    "name": "acme/blog",
+    "require": {
+        "acme/hello-world": "dev-master"
     }
+}
+```
 
 The name is not needed in this case, since we don't want to publish the blog
 as a library. It is added here to clarify which `composer.json` is being
@@ -152,18 +161,20 @@ Now we need to tell the blog app where to find the `hello-world` dependency.
 We do this by adding a package repository specification to the blog's
 `composer.json`:
 
-    {
-        "name": "acme/blog",
-        "repositories": [
-            {
-                "type": "vcs",
-                "url": "https://github.com/username/hello-world"
-            }
-        ],
-        "require": {
-            "acme/hello-world": "dev-master"
+```json
+{
+    "name": "acme/blog",
+    "repositories": [
+        {
+            "type": "vcs",
+            "url": "https://github.com/username/hello-world"
         }
+    ],
+    "require": {
+        "acme/hello-world": "dev-master"
     }
+}
+```
 
 For more details on how package repositories work and what other types are
 available, see [Repositories](05-repositories.md).
diff --git a/vendor/composer/composer/doc/03-cli.md b/vendor/composer/composer/doc/03-cli.md
index 8d34fb4..7fcafc2 100644
--- a/vendor/composer/composer/doc/03-cli.md
+++ b/vendor/composer/composer/doc/03-cli.md
@@ -1,4 +1,4 @@
-# Command-line interface
+# Command-line interface / Commands
 
 You've already learned how to use the command-line interface to do some
 things. This chapter documents all the available commands.
@@ -36,7 +36,9 @@ it a bit easier to do this.
 When you run the command it will interactively ask you to fill in the fields,
 while using some smart defaults.
 
-    $ php composer.phar init
+```sh
+php composer.phar init
+```
 
 ### Options
 
@@ -54,7 +56,9 @@ while using some smart defaults.
 The `install` command reads the `composer.json` file from the current
 directory, resolves the dependencies, and installs them into `vendor`.
 
-    $ php composer.phar install
+```sh
+php composer.phar install
+```
 
 If there is a `composer.lock` file in the current directory, it will use the
 exact versions from there instead of resolving them. This ensures that
@@ -76,6 +80,9 @@ resolution.
   servers and other use cases where you typically do not run updates of the
   vendors. It is also a way to circumvent problems with git if you do not
   have a proper setup.
+* **--ignore-platform-reqs:** ignore `php`, `hhvm`, `lib-*` and `ext-*`
+  requirements and force the installation even if the local machine does not
+  fulfill these.
 * **--dry-run:** If you want to run through an installation without actually
   installing a package, you can use `--dry-run`. This will simulate the
   installation and show you what would happen.
@@ -94,23 +101,32 @@ resolution.
 In order to get the latest versions of the dependencies and to update the
 `composer.lock` file, you should use the `update` command.
 
-    $ php composer.phar update
+```sh
+php composer.phar update
+```
 
 This will resolve all dependencies of the project and write the exact versions
 into `composer.lock`.
 
 If you just want to update a few packages and not all, you can list them as such:
 
-    $ php composer.phar update vendor/package vendor/package2
+```sh
+php composer.phar update vendor/package vendor/package2
+```
 
 You can also use wildcards to update a bunch of packages at once:
 
-    $ php composer.phar update vendor/*
+```sh
+php composer.phar update vendor/*
+```
 
 ### Options
 
 * **--prefer-source:** Install packages from `source` when available.
 * **--prefer-dist:** Install packages from `dist` when available.
+* **--ignore-platform-reqs:** ignore `php`, `hhvm`, `lib-*` and `ext-*`
+  requirements and force the installation even if the local machine does not
+  fulfill these.
 * **--dry-run:** Simulate the command without actually doing anything.
 * **--dev:** Install packages listed in `require-dev` (this is the default behavior).
 * **--no-dev:** Skip installing packages listed in `require-dev`.
@@ -129,9 +145,11 @@ You can also use wildcards to update a bunch of packages at once:
 ## require
 
 The `require` command adds new packages to the `composer.json` file from
-the current directory.
+the current directory. If no file exists one will be created on the fly.
 
-    $ php composer.phar require
+```sh
+php composer.phar require
+```
 
 After adding/changing the requirements, the modified requirements will be
 installed or updated.
@@ -139,16 +157,47 @@ installed or updated.
 If you do not want to choose requirements interactively, you can just pass them
 to the command.
 
-    $ php composer.phar require vendor/package:2.* vendor/package2:dev-master
+```sh
+php composer.phar require vendor/package:2.* vendor/package2:dev-master
+```
 
 ### Options
 
 * **--prefer-source:** Install packages from `source` when available.
 * **--prefer-dist:** Install packages from `dist` when available.
+* **--ignore-platform-reqs:** ignore `php`, `hhvm`, `lib-*` and `ext-*`
+  requirements and force the installation even if the local machine does not
+  fulfill these.
 * **--dev:** Add packages to `require-dev`.
 * **--no-update:** Disables the automatic update of the dependencies.
 * **--no-progress:** Removes the progress display that can mess with some
   terminals or scripts which don't handle backspace characters.
+* **--update-no-dev** Run the dependency update with the --no-dev option.
+* **--update-with-dependencies** Also update dependencies of the newly
+  required packages.
+
+## remove
+
+The `remove` command removes packages from the `composer.json` file from
+the current directory.
+
+```sh
+php composer.phar remove vendor/package vendor/package2
+```
+
+After removing the requirements, the modified requirements will be
+uninstalled.
+
+### Options
+* **--ignore-platform-reqs:** ignore `php`, `hhvm`, `lib-*` and `ext-*`
+  requirements and force the installation even if the local machine does not
+  fulfill these.
+* **--dev:** Remove packages from `require-dev`.
+* **--no-update:** Disables the automatic update of the dependencies.
+* **--no-progress:** Removes the progress display that can mess with some
+  terminals or scripts which don't handle backspace characters.
+* **--update-no-dev** Run the dependency update with the --no-dev option.
+* **--update-with-dependencies** Also update dependencies of the removed packages.
 
 ## global
 
@@ -160,13 +209,17 @@ This can be used to install CLI utilities globally and if you add
 `$COMPOSER_HOME/vendor/bin` to your `$PATH` environment variable. Here is an
 example:
 
-    $ php composer.phar global require fabpot/php-cs-fixer:dev-master
+```sh
+php composer.phar global require fabpot/php-cs-fixer:dev-master
+```
 
 Now the `php-cs-fixer` binary is available globally (assuming you adjusted
 your PATH). If you wish to update the binary later on you can just run a
 global update:
 
-    $ php composer.phar global update
+```sh
+php composer.phar global update
+```
 
 ## search
 
@@ -174,7 +227,9 @@ The search command allows you to search through the current project's package
 repositories. Usually this will be just packagist. You simply pass it the
 terms you want to search for.
 
-    $ php composer.phar search monolog
+```sh
+php composer.phar search monolog
+```
 
 You can also search for more than one term by passing multiple arguments.
 
@@ -186,32 +241,38 @@ You can also search for more than one term by passing multiple arguments.
 
 To list all of the available packages, you can use the `show` command.
 
-    $ php composer.phar show
+```sh
+php composer.phar show
+```
 
 If you want to see the details of a certain package, you can pass the package
 name.
 
-    $ php composer.phar show monolog/monolog
+```sh
+php composer.phar show monolog/monolog
 
-    name     : monolog/monolog
-    versions : master-dev, 1.0.2, 1.0.1, 1.0.0, 1.0.0-RC1
-    type     : library
-    names    : monolog/monolog
-    source   : [git] http://github.com/Seldaek/monolog.git 3d4e60d0cbc4b888fe5ad223d77964428b1978da
-    dist     : [zip] http://github.com/Seldaek/monolog/zipball/3d4e60d0cbc4b888fe5ad223d77964428b1978da 3d4e60d0cbc4b888fe5ad223d77964428b1978da
-    license  : MIT
+name     : monolog/monolog
+versions : master-dev, 1.0.2, 1.0.1, 1.0.0, 1.0.0-RC1
+type     : library
+names    : monolog/monolog
+source   : [git] http://github.com/Seldaek/monolog.git 3d4e60d0cbc4b888fe5ad223d77964428b1978da
+dist     : [zip] http://github.com/Seldaek/monolog/zipball/3d4e60d0cbc4b888fe5ad223d77964428b1978da 3d4e60d0cbc4b888fe5ad223d77964428b1978da
+license  : MIT
 
-    autoload
-    psr-0
-    Monolog : src/
+autoload
+psr-0
+Monolog : src/
 
-    requires
-    php >=5.3.0
+requires
+php >=5.3.0
+```
 
 You can even pass the package version, which will tell you the details of that
 specific version.
 
-    $ php composer.phar show monolog/monolog 1.0.2
+```sh
+php composer.phar show monolog/monolog 1.0.2
+```
 
 ### Options
 
@@ -219,19 +280,30 @@ specific version.
 * **--platform (-p):** List only platform packages (php & extensions).
 * **--self (-s):** List the root package info.
 
+## browse / home
+
+The `browse` (aliased to `home`) opens a package's repository URL or homepage
+in your browser.
+
+### Options
+
+* **--homepage (-H):** Open the homepage instead of the repository URL.
+
 ## depends
 
 The `depends` command tells you which other packages depend on a certain
 package. You can specify which link types (`require`, `require-dev`)
 should be included in the listing. By default both are used.
 
-    $ php composer.phar depends --link-type=require monolog/monolog
+```sh
+php composer.phar depends --link-type=require monolog/monolog
 
-    nrk/monolog-fluent
-    poc/poc
-    propel/propel
-    symfony/monolog-bridge
-    symfony/symfony
+nrk/monolog-fluent
+poc/poc
+propel/propel
+symfony/monolog-bridge
+symfony/symfony
+```
 
 ### Options
 
@@ -244,7 +316,13 @@ You should always run the `validate` command before you commit your
 `composer.json` file, and before you tag a release. It will check if your
 `composer.json` is valid.
 
-    $ php composer.phar validate
+```sh
+php composer.phar validate
+```
+
+### Options
+
+* **--no-check-all:** Whether or not composer do a complete validation.
 
 ## status
 
@@ -252,31 +330,42 @@ If you often need to modify the code of your dependencies and they are
 installed from source, the `status` command allows you to check if you have
 local changes in any of them.
 
-    $ php composer.phar status
+```sh
+php composer.phar status
+```
 
 With the `--verbose` option you get some more information about what was
 changed:
 
-    $ php composer.phar status -v
-    You have changes in the following dependencies:
-    vendor/seld/jsonlint:
-        M README.mdown
+```sh
+php composer.phar status -v
+
+You have changes in the following dependencies:
+vendor/seld/jsonlint:
+    M README.mdown
+```
 
 ## self-update
 
 To update composer itself to the latest version, just run the `self-update`
 command. It will replace your `composer.phar` with the latest version.
 
-    $ php composer.phar self-update
+```sh
+php composer.phar self-update
+```
 
 If you would like to instead update to a specific release simply specify it:
 
-    $ composer self-update 1.0.0-alpha7
+```sh
+php composer.phar self-update 1.0.0-alpha7
+```
 
 If you have installed composer for your entire system (see [global installation](00-intro.md#globally)),
 you may have to run the command with `root` privileges
 
-    $ sudo composer self-update
+```sh
+sudo composer self-update
+```
 
 ### Options
 
@@ -288,7 +377,9 @@ you may have to run the command with `root` privileges
 The `config` command allows you to edit some basic composer settings in either
 the local composer.json file or the global config.json file.
 
-    $ php composer.phar config --list
+```sh
+php composer.phar config --list
+```
 
 ### Usage
 
@@ -320,7 +411,9 @@ the global config file.
 In addition to modifying the config section, the `config` command also supports making
 changes to the repositories section by using it the following way:
 
-    $ php composer.phar config repositories.foo vcs http://github.com/foo/bar
+```sh
+php composer.phar config repositories.foo vcs http://github.com/foo/bar
+```
 
 ## create-project
 
@@ -341,7 +434,9 @@ provide a version as third argument, otherwise the latest version is used.
 
 If the directory does not currently exist, it will be created during installation.
 
-    php composer.phar create-project doctrine/orm path 2.2.*
+```sh
+php composer.phar create-project doctrine/orm path 2.2.*
+```
 
 It is also possible to run the command without params in a directory with an
 existing `composer.json` file to bootstrap a project.
@@ -385,6 +480,7 @@ performance.
 * **--optimize (-o):** Convert PSR-0/4 autoloading to classmap to get a faster
   autoloader. This is recommended especially for production, but can take
   a bit of time to run so it is currently not done by default.
+* **--no-dev:** Disables autoload-dev rules.
 
 ## licenses
 
@@ -402,7 +498,9 @@ If you think you found a bug, or something is behaving strangely, you might
 want to run the `diagnose` command to perform automated checks for many common
 problems.
 
-    $ php composer.phar diagnose
+```sh
+php composer.phar diagnose
+```
 
 ## archive
 
@@ -410,7 +508,9 @@ This command is used to generate a zip/tar archive for a given package in a
 given version. It can also be used to archive your entire project without
 excluded/ignored files.
 
-    $ php composer.phar archive vendor/package 2.0.21 --format=zip
+```sh
+php composer.phar archive vendor/package 2.0.21 --format=zip
+```
 
 ### Options
 
@@ -422,7 +522,9 @@ excluded/ignored files.
 
 To get more information about a certain command, just use `help`.
 
-    $ php composer.phar help install
+```sh
+php composer.phar help install
+```
 
 ## Environment variables
 
@@ -438,7 +540,9 @@ By setting the `COMPOSER` env variable it is possible to set the filename of
 
 For example:
 
-    $ COMPOSER=composer-other.json php composer.phar install
+```sh
+COMPOSER=composer-other.json php composer.phar install
+```
 
 ### COMPOSER_ROOT_VERSION
 
diff --git a/vendor/composer/composer/doc/04-schema.md b/vendor/composer/composer/doc/04-schema.md
index f085266..c768edb 100644
--- a/vendor/composer/composer/doc/04-schema.md
+++ b/vendor/composer/composer/doc/04-schema.md
@@ -1,4 +1,4 @@
-# composer.json
+# The composer.json Schema
 
 This chapter will explain all of the fields available in `composer.json`.
 
@@ -59,14 +59,14 @@ RC suffixes can also be followed by a number.
 
 Examples:
 
-    1.0.0
-    1.0.2
-    1.1.0
-    0.2.5
-    1.0.0-dev
-    1.0.0-alpha3
-    1.0.0-beta2
-    1.0.0-RC5
+- 1.0.0
+- 1.0.2
+- 1.1.0
+- 0.2.5
+- 1.0.0-dev
+- 1.0.0-alpha3
+- 1.0.0-beta2
+- 1.0.0-RC5
 
 Optional if the package repository can infer the version from somewhere, such
 as the VCS tag name in the VCS repository. In that case it is also recommended
@@ -113,11 +113,11 @@ searching and filtering.
 
 Examples:
 
-    logging
-    events
-    database
-    redis
-    templating
+- logging
+- events
+- database
+- redis
+- templating
 
 Optional.
 
@@ -141,19 +141,19 @@ The license of the package. This can be either a string or an array of strings.
 
 The recommended notation for the most common licenses is (alphabetical):
 
-    Apache-2.0
-    BSD-2-Clause
-    BSD-3-Clause
-    BSD-4-Clause
-    GPL-2.0
-    GPL-2.0+
-    GPL-3.0
-    GPL-3.0+
-    LGPL-2.1
-    LGPL-2.1+
-    LGPL-3.0
-    LGPL-3.0+
-    MIT
+- Apache-2.0
+- BSD-2-Clause
+- BSD-3-Clause
+- BSD-4-Clause
+- GPL-2.0
+- GPL-2.0+
+- GPL-3.0
+- GPL-3.0+
+- LGPL-2.1
+- LGPL-2.1+
+- LGPL-3.0
+- LGPL-3.0+
+- MIT
 
 Optional, but it is highly recommended to supply this. More identifiers are
 listed at the [SPDX Open Source License Registry](http://www.spdx.org/licenses/).
@@ -162,28 +162,33 @@ For closed-source software, you may use `"proprietary"` as the license identifie
 
 An Example:
 
-    {
-        "license": "MIT"
-    }
-
+```json
+{
+    "license": "MIT"
+}
+```
 
 For a package, when there is a choice between licenses ("disjunctive license"),
 multiple can be specified as array.
 
 An Example for disjunctive licenses:
 
-    {
-        "license": [
-           "LGPL-2.1",
-           "GPL-3.0+"
-        ]
-    }
+```json
+{
+    "license": [
+       "LGPL-2.1",
+       "GPL-3.0+"
+    ]
+}
+```
 
 Alternatively they can be separated with "or" and enclosed in parenthesis;
 
-    {
-        "license": "(LGPL-2.1 or GPL-3.0+)"
-    }
+```json
+{
+    "license": "(LGPL-2.1 or GPL-3.0+)"
+}
+```
 
 Similarly when multiple licenses need to be applied ("conjunctive license"),
 they should be separated with "and" and enclosed in parenthesis.
@@ -201,22 +206,24 @@ Each author object can have following properties:
 
 An example:
 
-    {
-        "authors": [
-            {
-                "name": "Nils Adermann",
-                "email": "naderman@naderman.de",
-                "homepage": "http://www.naderman.de",
-                "role": "Developer"
-            },
-            {
-                "name": "Jordi Boggiano",
-                "email": "j.boggiano@seld.be",
-                "homepage": "http://seld.be",
-                "role": "Developer"
-            }
-        ]
-    }
+```json
+{
+    "authors": [
+        {
+            "name": "Nils Adermann",
+            "email": "naderman@naderman.de",
+            "homepage": "http://www.naderman.de",
+            "role": "Developer"
+        },
+        {
+            "name": "Jordi Boggiano",
+            "email": "j.boggiano@seld.be",
+            "homepage": "http://seld.be",
+            "role": "Developer"
+        }
+    ]
+}
+```
 
 Optional, but highly recommended.
 
@@ -235,12 +242,14 @@ Support information includes the following:
 
 An example:
 
-    {
-        "support": {
-            "email": "support@example.org",
-            "irc": "irc://irc.freenode.org/composer"
-        }
+```json
+{
+    "support": {
+        "email": "support@example.org",
+        "irc": "irc://irc.freenode.org/composer"
     }
+}
+```
 
 Optional.
 
@@ -251,11 +260,13 @@ All of the following take an object which maps package names to
 
 Example:
 
-    {
-        "require": {
-            "monolog/monolog": "1.0.*"
-        }
+```json
+{
+    "require": {
+        "monolog/monolog": "1.0.*"
     }
+}
+```
 
 All links are optional fields.
 
@@ -267,24 +278,28 @@ allow unstable packages of a dependency for example.
 
 Example:
 
-    {
-        "require": {
-            "monolog/monolog": "1.0.*@beta",
-            "acme/foo": "@dev"
-        }
+```json
+{
+    "require": {
+        "monolog/monolog": "1.0.*@beta",
+        "acme/foo": "@dev"
     }
+}
+```
 
 If one of your dependencies has a dependency on an unstable package you need to
 explicitly require it as well, along with its sufficient stability flag.
 
 Example:
 
-    {
-        "require": {
-            "doctrine/doctrine-fixtures-bundle": "dev-master",
-            "doctrine/data-fixtures": "@dev"
-        }
+```json
+{
+    "require": {
+        "doctrine/doctrine-fixtures-bundle": "dev-master",
+        "doctrine/data-fixtures": "@dev"
     }
+}
+```
 
 `require` and `require-dev` additionally support explicit references (i.e.
 commit) for dev versions to make sure they are locked to a given state, even
@@ -293,12 +308,14 @@ and append the reference with `#<ref>`.
 
 Example:
 
-    {
-        "require": {
-            "monolog/monolog": "dev-master#2eb0c0978d290a1c45346a1955188929cb4e5db7",
-            "acme/foo": "1.0.x-dev#abc123"
-        }
+```json
+{
+    "require": {
+        "monolog/monolog": "dev-master#2eb0c0978d290a1c45346a1955188929cb4e5db7",
+        "acme/foo": "1.0.x-dev#abc123"
     }
+}
+```
 
 > **Note:** While this is convenient at times, it should not be how you use
 > packages in the long term because it comes with a technical limitation. The
@@ -370,11 +387,13 @@ and not version constraints.
 
 Example:
 
-    {
-        "suggest": {
-            "monolog/monolog": "Allows more advanced logging of the application flow"
-        }
+```json
+{
+    "suggest": {
+        "monolog/monolog": "Allows more advanced logging of the application flow"
     }
+}
+```
 
 ### autoload
 
@@ -403,32 +422,38 @@ key => value array which may be found in the generated file
 
 Example:
 
-    {
-        "autoload": {
-            "psr-4": {
-                "Monolog\\": "src/",
-                "Vendor\\Namespace\\": "",
-            }
+```json
+{
+    "autoload": {
+        "psr-4": {
+            "Monolog\\": "src/",
+            "Vendor\\Namespace\\": ""
         }
     }
+}
+```
 
 If you need to search for a same prefix in multiple directories,
 you can specify them as an array as such:
 
-    {
-        "autoload": {
-            "psr-4": { "Monolog\\": ["src/", "lib/"] }
-        }
+```json
+{
+    "autoload": {
+        "psr-4": { "Monolog\\": ["src/", "lib/"] }
     }
+}
+```
 
 If you want to have a fallback directory where any namespace will be looked for,
 you can use an empty prefix like:
 
-    {
-        "autoload": {
-            "psr-4": { "": "src/" }
-        }
+```json
+{
+    "autoload": {
+        "psr-4": { "": "src/" }
     }
+}
+```
 
 #### PSR-0
 
@@ -444,44 +469,52 @@ array which may be found in the generated file `vendor/composer/autoload_namespa
 
 Example:
 
-    {
-        "autoload": {
-            "psr-0": {
-                "Monolog\\": "src/",
-                "Vendor\\Namespace\\": "src/",
-                "Vendor_Namespace_": "src/"
-            }
+```json
+{
+    "autoload": {
+        "psr-0": {
+            "Monolog\\": "src/",
+            "Vendor\\Namespace\\": "src/",
+            "Vendor_Namespace_": "src/"
         }
     }
+}
+```
 
 If you need to search for a same prefix in multiple directories,
 you can specify them as an array as such:
 
-    {
-        "autoload": {
-            "psr-0": { "Monolog\\": ["src/", "lib/"] }
-        }
+```json
+{
+    "autoload": {
+        "psr-0": { "Monolog\\": ["src/", "lib/"] }
     }
+}
+```
 
 The PSR-0 style is not limited to namespace declarations only but may be
 specified right down to the class level. This can be useful for libraries with
 only one class in the global namespace. If the php source file is also located
 in the root of the package, for example, it may be declared like this:
 
-    {
-        "autoload": {
-            "psr-0": { "UniqueGlobalClass": "" }
-        }
+```json
+{
+    "autoload": {
+        "psr-0": { "UniqueGlobalClass": "" }
     }
+}
+```
 
 If you want to have a fallback directory where any namespace can be, you can
 use an empty prefix like:
 
-    {
-        "autoload": {
-            "psr-0": { "": "src/" }
-        }
+```json
+{
+    "autoload": {
+        "psr-0": { "": "src/" }
     }
+}
+```
 
 #### Classmap
 
@@ -496,11 +529,13 @@ to search for classes.
 
 Example:
 
-    {
-        "autoload": {
-            "classmap": ["src/", "lib/", "Something.php"]
-        }
+```json
+{
+    "autoload": {
+        "classmap": ["src/", "lib/", "Something.php"]
     }
+}
+```
 
 #### Files
 
@@ -510,11 +545,37 @@ that cannot be autoloaded by PHP.
 
 Example:
 
-    {
-        "autoload": {
-            "files": ["src/MyLibrary/functions.php"]
-        }
+```json
+{
+    "autoload": {
+        "files": ["src/MyLibrary/functions.php"]
     }
+}
+```
+
+### autoload-dev <span>(root-only)</span>
+
+This section allows to define autoload rules for development purposes.
+
+Classes needed to run the test suite should not be included in the main autoload
+rules to avoid polluting the autoloader in production and when other people use
+your package as a dependency.
+
+Therefore, it is a good idea to rely on a dedicated path for your unit tests
+and to add it within the autoload-dev section.
+
+Example:
+
+```json
+{
+    "autoload": {
+        "psr-4": { "MyLibrary\\": "src/" }
+    },
+    "autoload-dev": {
+        "psr-4": { "MyLibrary\\Tests\\": "tests/" }
+    }
+}
+```
 
 ### include-path
 
@@ -526,9 +587,11 @@ A list of paths which should get appended to PHP's `include_path`.
 
 Example:
 
-    {
-        "include-path": ["lib/"]
-    }
+```json
+{
+    "include-path": ["lib/"]
+}
+```
 
 Optional.
 
@@ -552,12 +615,14 @@ it from `vendor/symfony/yaml`.
 
 To do that, `autoload` and `target-dir` are defined as follows:
 
-    {
-        "autoload": {
-            "psr-0": { "Symfony\\Component\\Yaml\\": "" }
-        },
-        "target-dir": "Symfony/Component/Yaml"
-    }
+```json
+{
+    "autoload": {
+        "psr-0": { "Symfony\\Component\\Yaml\\": "" }
+    },
+    "target-dir": "Symfony/Component/Yaml"
+}
+```
 
 Optional.
 
@@ -615,47 +680,49 @@ For more information on any of these, see [Repositories](05-repositories.md).
 
 Example:
 
-    {
-        "repositories": [
-            {
-                "type": "composer",
-                "url": "http://packages.example.com"
-            },
-            {
-                "type": "composer",
-                "url": "https://packages.example.com",
-                "options": {
-                    "ssl": {
-                        "verify_peer": "true"
-                    }
+```json
+{
+    "repositories": [
+        {
+            "type": "composer",
+            "url": "http://packages.example.com"
+        },
+        {
+            "type": "composer",
+            "url": "https://packages.example.com",
+            "options": {
+                "ssl": {
+                    "verify_peer": "true"
                 }
-            },
-            {
-                "type": "vcs",
-                "url": "https://github.com/Seldaek/monolog"
-            },
-            {
-                "type": "pear",
-                "url": "http://pear2.php.net"
-            },
-            {
-                "type": "package",
-                "package": {
-                    "name": "smarty/smarty",
-                    "version": "3.1.7",
-                    "dist": {
-                        "url": "http://www.smarty.net/files/Smarty-3.1.7.zip",
-                        "type": "zip"
-                    },
-                    "source": {
-                        "url": "http://smarty-php.googlecode.com/svn/",
-                        "type": "svn",
-                        "reference": "tags/Smarty_3_1_7/distribution/"
-                    }
+            }
+        },
+        {
+            "type": "vcs",
+            "url": "https://github.com/Seldaek/monolog"
+        },
+        {
+            "type": "pear",
+            "url": "http://pear2.php.net"
+        },
+        {
+            "type": "package",
+            "package": {
+                "name": "smarty/smarty",
+                "version": "3.1.7",
+                "dist": {
+                    "url": "http://www.smarty.net/files/Smarty-3.1.7.zip",
+                    "type": "zip"
+                },
+                "source": {
+                    "url": "http://smarty-php.googlecode.com/svn/",
+                    "type": "svn",
+                    "reference": "tags/Smarty_3_1_7/distribution/"
                 }
             }
-        ]
-    }
+        }
+    ]
+}
+```
 
 > **Note:** Order is significant here. When looking for a package, Composer
 will look from the first to the last repository, and pick the first match.
@@ -676,16 +743,25 @@ The following options are supported:
 * **preferred-install:** Defaults to `auto` and can be any of `source`, `dist` or
   `auto`. This option allows you to set the install method Composer will prefer to
   use.
-* **github-protocols:** Defaults to `["git", "https"]`. A list of protocols to
+* **store-auths:** What to do after prompting for authentication, one of:
+  `true` (always store), `false` (do not store) and `"prompt"` (ask every
+  time), defaults to `"prompt"`.
+* **github-protocols:** Defaults to `["git", "https", "ssh"]`. A list of protocols to
   use when cloning from github.com, in priority order. You can reconfigure it to
-  prioritize the https protocol if you are behind a proxy or have somehow bad
-  performances with the git protocol.
+  for example prioritize the https protocol if you are behind a proxy or have somehow
+  bad performances with the git protocol.
 * **github-oauth:** A list of domain names and oauth keys. For example using
   `{"github.com": "oauthtoken"}` as the value of this option will use `oauthtoken`
   to access private repositories on github and to circumvent the low IP-based
   rate limiting of their API.
+  [Read more](articles/troubleshooting.md#api-rate-limit-and-oauth-tokens)
+  on how to get an OAuth token for GitHub.
+* **http-basic:** A list of domain names and username/passwords to authenticate
+  against them. For example using
+  `{"example.org": {"username": "alice", "password": "foo"}` as the value of this option will let composer authenticate against example.org.
 * **vendor-dir:** Defaults to `vendor`. You can install dependencies into a
-  different directory if you want to.
+  different directory if you want to. `$HOME` and `~` will be replaced by your
+  home directory's path in vendor-dir and all `*-dir` options below.
 * **bin-dir:** Defaults to `vendor/bin`. If a project includes binaries, they
   will be symlinked into this directory.
 * **cache-dir:** Defaults to `$home/cache` on unix systems and
@@ -710,8 +786,13 @@ The following options are supported:
   interoperability issues with other autoloaders.
 * **autoloader-suffix:** Defaults to `null`. String to be used as a suffix for
   the generated Composer autoloader. When null a random one will be generated.
+* **optimize-autoloader** Defaults to `false`. Always optimize when dumping
+  the autoloader.
 * **github-domains:** Defaults to `["github.com"]`. A list of domains to use in
   github mode. This is used for GitHub Enterprise setups.
+* **github-expose-hostname:** Defaults to `true`. If set to false, the OAuth
+  tokens created to access the github API will have a date instead of the
+  machine hostname.
 * **notify-on-install:** Defaults to `true`. Composer allows repositories to
   define a notification URL, so that they get notified whenever a package from
   that repository is installed. This option allows you to disable that behaviour.
@@ -723,11 +804,18 @@ The following options are supported:
 
 Example:
 
-    {
-        "config": {
-            "bin-dir": "bin"
-        }
+```json
+{
+    "config": {
+        "bin-dir": "bin"
     }
+}
+```
+
+> **Note:** Authentication-related config options like `http-basic` and
+> `github-oauth` can also be specified inside a `auth.json` file that goes
+> besides your `composer.json`. That way you can gitignore it and every
+> developer can place their own credentials in there.
 
 ### scripts <span>(root-only)</span>
 
@@ -743,7 +831,9 @@ Arbitrary extra data for consumption by `scripts`.
 This can be virtually anything. To access it from within a script event
 handler, you can do:
 
-    $extra = $event->getComposer()->getPackage()->getExtra();
+```php
+$extra = $event->getComposer()->getPackage()->getExtra();
+```
 
 Optional.
 
@@ -770,11 +860,13 @@ The following options are supported:
 
 Example:
 
-    {
-        "archive": {
-            "exclude": ["/foo/bar", "baz", "/*.test", "!/foo/bar/baz"]
-        }
+```json
+{
+    "archive": {
+        "exclude": ["/foo/bar", "baz", "/*.test", "!/foo/bar/baz"]
     }
+}
+```
 
 The example will include `/dir/foo/bar/file`, `/foo/bar/baz`, `/file.php`,
 `/foo/my.test` but it will exclude `/foo/bar/any`, `/foo/baz`, and `/my.test`.
diff --git a/vendor/composer/composer/doc/05-repositories.md b/vendor/composer/composer/doc/05-repositories.md
index ae947ea..975b473 100644
--- a/vendor/composer/composer/doc/05-repositories.md
+++ b/vendor/composer/composer/doc/05-repositories.md
@@ -66,16 +66,18 @@ repository URL would be `example.org`.
 
 The only required field is `packages`. The JSON structure is as follows:
 
-    {
-        "packages": {
-            "vendor/package-name": {
-                "dev-master": { @composer.json },
-                "1.0.x-dev": { @composer.json },
-                "0.0.1": { @composer.json },
-                "1.0.0": { @composer.json }
-            }
+```json
+{
+    "packages": {
+        "vendor/package-name": {
+            "dev-master": { @composer.json },
+            "1.0.x-dev": { @composer.json },
+            "0.0.1": { @composer.json },
+            "1.0.0": { @composer.json }
         }
     }
+}
+```
 
 The `@composer.json` marker would be the contents of the `composer.json` from
 that package version including as a minimum:
@@ -86,14 +88,16 @@ that package version including as a minimum:
 
 Here is a minimal package definition:
 
-    {
-        "name": "smarty/smarty",
-        "version": "3.1.7",
-        "dist": {
-            "url": "http://www.smarty.net/files/Smarty-3.1.7.zip",
-            "type": "zip"
-        }
+```json
+{
+    "name": "smarty/smarty",
+    "version": "3.1.7",
+    "dist": {
+        "url": "http://www.smarty.net/files/Smarty-3.1.7.zip",
+        "type": "zip"
     }
+}
+```
 
 It may include any of the other fields specified in the [schema](04-schema.md).
 
@@ -105,19 +109,23 @@ every time a user installs a package. The URL can be either an absolute path
 
 An example value:
 
-    {
-        "notify-batch": "/downloads/"
-    }
+```json
+{
+    "notify-batch": "/downloads/"
+}
+```
 
 For `example.org/packages.json` containing a `monolog/monolog` package, this
 would send a `POST` request to `example.org/downloads/` with following
 JSON request body:
 
-    {
-        "downloads": [
-            {"name": "monolog/monolog", "version": "1.2.1.0"},
-        ]
-    }
+```json
+{
+    "downloads": [
+        {"name": "monolog/monolog", "version": "1.2.1.0"},
+    ]
+}
+```
 
 The version field will contain the normalized representation of the version
 number.
@@ -132,19 +140,21 @@ files.
 
 An example:
 
-    {
-        "includes": {
-            "packages-2011.json": {
-                "sha1": "525a85fb37edd1ad71040d429928c2c0edec9d17"
-            },
-            "packages-2012-01.json": {
-                "sha1": "897cde726f8a3918faf27c803b336da223d400dd"
-            },
-            "packages-2012-02.json": {
-                "sha1": "26f911ad717da26bbcac3f8f435280d13917efa5"
-            }
+```json
+{
+    "includes": {
+        "packages-2011.json": {
+            "sha1": "525a85fb37edd1ad71040d429928c2c0edec9d17"
+        },
+        "packages-2012-01.json": {
+            "sha1": "897cde726f8a3918faf27c803b336da223d400dd"
+        },
+        "packages-2012-02.json": {
+            "sha1": "26f911ad717da26bbcac3f8f435280d13917efa5"
         }
     }
+}
+```
 
 The SHA-1 sum of the file allows it to be cached and only re-requested if the
 hash changed.
@@ -164,35 +174,39 @@ is an absolute path from the repository root.
 
 An example:
 
-    {
-        "provider-includes": {
-            "providers-a.json": {
-                "sha256": "f5b4bc0b354108ef08614e569c1ed01a2782e67641744864a74e788982886f4c"
-            },
-            "providers-b.json": {
-                "sha256": "b38372163fac0573053536f5b8ef11b86f804ea8b016d239e706191203f6efac"
-            }
+```json
+{
+    "provider-includes": {
+        "providers-a.json": {
+            "sha256": "f5b4bc0b354108ef08614e569c1ed01a2782e67641744864a74e788982886f4c"
         },
-        "providers-url": "/p/%package%$%hash%.json"
-    }
+        "providers-b.json": {
+            "sha256": "b38372163fac0573053536f5b8ef11b86f804ea8b016d239e706191203f6efac"
+        }
+    },
+    "providers-url": "/p/%package%$%hash%.json"
+}
+```
 
 Those files contain lists of package names and hashes to verify the file
 integrity, for example:
 
-    {
-        "providers": {
-            "acme/foo": {
-                "sha256": "38968de1305c2e17f4de33aea164515bc787c42c7e2d6e25948539a14268bb82"
-            },
-            "acme/bar": {
-                "sha256": "4dd24c930bd6e1103251306d6336ac813b563a220d9ca14f4743c032fb047233"
-            }
+```json
+{
+    "providers": {
+        "acme/foo": {
+            "sha256": "38968de1305c2e17f4de33aea164515bc787c42c7e2d6e25948539a14268bb82"
+        },
+        "acme/bar": {
+            "sha256": "4dd24c930bd6e1103251306d6336ac813b563a220d9ca14f4743c032fb047233"
         }
     }
+}
+```
 
 The file above declares that acme/foo and acme/bar can be found in this
 repository, by loading the file referenced by `providers-url`, replacing
-`%name%` by the package name and `%hash%` by the sha256 field. Those files
+`%package%` by the package name and `%hash%` by the sha256 field. Those files
 themselves just contain package definitions as described [above](#packages).
 
 This field is optional. You probably don't need it for your own custom
@@ -225,17 +239,19 @@ point to your custom branch. For version constraint naming conventions see
 
 Example assuming you patched monolog to fix a bug in the `bugfix` branch:
 
-    {
-        "repositories": [
-            {
-                "type": "vcs",
-                "url": "https://github.com/igorw/monolog"
-            }
-        ],
-        "require": {
-            "monolog/monolog": "dev-bugfix"
+```json
+{
+    "repositories": [
+        {
+            "type": "vcs",
+            "url": "https://github.com/igorw/monolog"
         }
+    ],
+    "require": {
+        "monolog/monolog": "dev-bugfix"
     }
+}
+```
 
 When you run `php composer.phar update`, you should get your modified version
 of `monolog/monolog` instead of the one from packagist.
@@ -256,17 +272,19 @@ For more information [see the aliases article](articles/aliases.md).
 Exactly the same solution allows you to work with your private repositories at
 GitHub and BitBucket:
 
-    {
-        "require": {
-            "vendor/my-private-repo": "dev-master"
-        },
-        "repositories": [
-            {
-                "type": "vcs",
-                "url":  "git@bitbucket.org:vendor/my-private-repo.git"
-            }
-        ]
-    }
+```json
+{
+    "require": {
+        "vendor/my-private-repo": "dev-master"
+    },
+    "repositories": [
+        {
+            "type": "vcs",
+            "url":  "git@bitbucket.org:vendor/my-private-repo.git"
+        }
+    ]
+}
+```
 
 The only requirement is the installation of SSH keys for a git client.
 
@@ -292,6 +310,11 @@ The VCS driver to be used is detected automatically based on the URL. However,
 should you need to specify one for whatever reason, you can use `git`, `svn` or
 `hg` as the repository type instead of `vcs`.
 
+If you set the `no-api` key to `true` on a github repository it will clone the
+repository as it would with any other git repository instead of using the
+GitHub API. But unlike using the `git` driver directly, composer will still
+attempt to use github's zip files.
+
 #### Subversion Options
 
 Since Subversion has no native concept of branches and tags, Composer assumes
@@ -300,17 +323,19 @@ by default that code is located in `$url/trunk`, `$url/branches` and
 values. For example if you used capitalized names you could configure the
 repository like this:
 
-    {
-        "repositories": [
-            {
-                "type": "vcs",
-                "url": "http://svn.example.org/projectA/",
-                "trunk-path": "Trunk",
-                "branches-path": "Branches",
-                "tags-path": "Tags"
-            }
-        ]
-    }
+```json
+{
+    "repositories": [
+        {
+            "type": "vcs",
+            "url": "http://svn.example.org/projectA/",
+            "trunk-path": "Trunk",
+            "branches-path": "Branches",
+            "tags-path": "Tags"
+        }
+    ]
+}
+```
 
 If you have no branches or tags directory you can disable them entirely by
 setting the `branches-path` or `tags-path` to `false`.
@@ -320,6 +345,37 @@ If the package is in a sub-directory, e.g. `/trunk/foo/bar/composer.json` and
 setting the `"package-path"` option to the sub-directory, in this example it
 would be `"package-path": "foo/bar/"`.
 
+If you have a private Subversion repository you can save credentials in the
+http-basic section of your config (See [Schema](04-schema.md)):
+
+```json
+{
+    "http-basic": {
+        "svn.example.org": {
+            "username": "username",
+            "password": "password"
+        }
+    }
+}
+```
+
+If your Subversion client is configured to store credentials by default these
+credentials will be saved for the current user and existing saved credentials
+for this server will be overwritten. To change this behavior by setting the
+`"svn-cache-credentials"` option in your repository configuration:
+
+```json
+{
+    "repositories": [
+        {
+            "type": "vcs",
+            "url": "http://svn.example.org/projectA/",
+            "svn-cache-credentials": false
+        }
+    ]
+}
+```
+
 ### PEAR
 
 It is possible to install packages from any PEAR channel by using the `pear`
@@ -328,18 +384,20 @@ avoid conflicts. All packages are also aliased with prefix `pear-{channelAlias}/
 
 Example using `pear2.php.net`:
 
-    {
-        "repositories": [
-            {
-                "type": "pear",
-                "url": "http://pear2.php.net"
-            }
-        ],
-        "require": {
-            "pear-pear2.php.net/PEAR2_Text_Markdown": "*",
-            "pear-pear2/PEAR2_HTTP_Request": "*"
+```json
+{
+    "repositories": [
+        {
+            "type": "pear",
+            "url": "http://pear2.php.net"
         }
+    ],
+    "require": {
+        "pear-pear2.php.net/PEAR2_Text_Markdown": "*",
+        "pear-pear2/PEAR2_HTTP_Request": "*"
     }
+}
+```
 
 In this case the short name of the channel is `pear2`, so the
 `PEAR2_HTTP_Request` package name becomes `pear-pear2/PEAR2_HTTP_Request`.
@@ -382,23 +440,25 @@ To illustrate, the following example would get the `BasePackage`,
 `TopLevelPackage1`, and `TopLevelPackage2` packages from your PEAR repository
 and `IntermediatePackage` from a Github repository:
 
-    {
-        "repositories": [
-            {
-                "type": "git",
-                "url": "https://github.com/foobar/intermediate.git"
-            },
-            {
-                "type": "pear",
-                "url": "http://pear.foobar.repo",
-                "vendor-alias": "foobar"
-            }
-        ],
-        "require": {
-            "foobar/TopLevelPackage1": "*",
-            "foobar/TopLevelPackage2": "*"
+```json
+{
+    "repositories": [
+        {
+            "type": "git",
+            "url": "https://github.com/foobar/intermediate.git"
+        },
+        {
+            "type": "pear",
+            "url": "http://pear.foobar.repo",
+            "vendor-alias": "foobar"
         }
+    ],
+    "require": {
+        "foobar/TopLevelPackage1": "*",
+        "foobar/TopLevelPackage2": "*"
     }
+}
+```
 
 ### Package
 
@@ -413,32 +473,34 @@ minimum required fields are `name`, `version`, and either of `dist` or
 
 Here is an example for the smarty template engine:
 
-    {
-        "repositories": [
-            {
-                "type": "package",
-                "package": {
-                    "name": "smarty/smarty",
-                    "version": "3.1.7",
-                    "dist": {
-                        "url": "http://www.smarty.net/files/Smarty-3.1.7.zip",
-                        "type": "zip"
-                    },
-                    "source": {
-                        "url": "http://smarty-php.googlecode.com/svn/",
-                        "type": "svn",
-                        "reference": "tags/Smarty_3_1_7/distribution/"
-                    },
-                    "autoload": {
-                        "classmap": ["libs/"]
-                    }
+```json
+{
+    "repositories": [
+        {
+            "type": "package",
+            "package": {
+                "name": "smarty/smarty",
+                "version": "3.1.7",
+                "dist": {
+                    "url": "http://www.smarty.net/files/Smarty-3.1.7.zip",
+                    "type": "zip"
+                },
+                "source": {
+                    "url": "http://smarty-php.googlecode.com/svn/",
+                    "type": "svn",
+                    "reference": "tags/Smarty_3_1_7/distribution/"
+                },
+                "autoload": {
+                    "classmap": ["libs/"]
                 }
             }
-        ],
-        "require": {
-            "smarty/smarty": "3.1.*"
         }
+    ],
+    "require": {
+        "smarty/smarty": "3.1.*"
     }
+}
+```
 
 Typically you would leave the source part off, as you don't really need it.
 
@@ -463,7 +525,7 @@ there are some use cases for hosting your own repository.
   might want to keep them separate to packagist. An example of this would be
   wordpress plugins.
 
-For hosting your own packages, a native `composer` type of repository is 
+For hosting your own packages, a native `composer` type of repository is
 recommended, which provides the best performance.
 
 There are a few tools that can help you create a `composer` repository.
@@ -507,25 +569,30 @@ of the times they are private. To simplify maintenance, one can simply use a
 repository of type `artifact` with a folder containing ZIP archives of those
 private packages:
 
-    {
-        "repositories": [
-            {
-                "type": "artifact",
-                "url": "path/to/directory/with/zips/"
-            }
-        ],
-        "require": {
-            "private-vendor-one/core": "15.6.2",
-            "private-vendor-two/connectivity": "*",
-            "acme-corp/parser": "10.3.5"
+```json
+{
+    "repositories": [
+        {
+            "type": "artifact",
+            "url": "path/to/directory/with/zips/"
         }
+    ],
+    "require": {
+        "private-vendor-one/core": "15.6.2",
+        "private-vendor-two/connectivity": "*",
+        "acme-corp/parser": "10.3.5"
     }
+}
+```
 
 Each zip artifact is just a ZIP archive with `composer.json` in root folder:
 
-    $ unzip -l acme-corp-parser-10.3.5.zip
-    composer.json
-    ...
+```sh
+unzip -l acme-corp-parser-10.3.5.zip
+
+composer.json
+...
+```
 
 If there are two archives with different versions of a package, they are both
 imported. When an archive with a newer version is added in the artifact folder
@@ -537,13 +604,14 @@ update to the latest version.
 You can disable the default Packagist repository by adding this to your
 `composer.json`:
 
-    {
-        "repositories": [
-            {
-                "packagist": false
-            }
-        ]
-    }
-
+```json
+{
+    "repositories": [
+        {
+            "packagist": false
+        }
+    ]
+}
+```
 
 &larr; [Schema](04-schema.md)  |  [Community](06-community.md) &rarr;
diff --git a/vendor/composer/composer/doc/articles/aliases.md b/vendor/composer/composer/doc/articles/aliases.md
index 26a9c46..2b43632 100644
--- a/vendor/composer/composer/doc/articles/aliases.md
+++ b/vendor/composer/composer/doc/articles/aliases.md
@@ -7,7 +7,7 @@
 ## Why aliases?
 
 When you are using a VCS repository, you will only get comparable versions for
-branches that look like versions, such as `2.0`. For your `master` branch, you
+branches that look like versions, such as `2.0` or `2.0.x`. For your `master` branch, you
 will get a `dev-master` version. For your `bugfix` branch, you will get a
 `dev-bugfix` version.
 
@@ -28,13 +28,15 @@ someone will want the latest master dev version. Thus, Composer allows you to
 alias your `dev-master` branch to a `1.0.x-dev` version. It is done by
 specifying a `branch-alias` field under `extra` in `composer.json`:
 
-    {
-        "extra": {
-            "branch-alias": {
-                "dev-master": "1.0.x-dev"
-            }
+```json
+{
+    "extra": {
+        "branch-alias": {
+            "dev-master": "1.0.x-dev"
         }
     }
+}
+```
 
 The branch version must begin with `dev-` (non-comparable version), the alias
 must be a comparable dev version (i.e. start with numbers, and end with
@@ -68,18 +70,20 @@ You are using `symfony/monolog-bundle` which requires `monolog/monolog` version
 
 Just add this to your project's root `composer.json`:
 
-    {
-        "repositories": [
-            {
-                "type": "vcs",
-                "url": "https://github.com/you/monolog"
-            }
-        ],
-        "require": {
-            "symfony/monolog-bundle": "2.0",
-            "monolog/monolog": "dev-bugfix as 1.0.x-dev"
+```json
+{
+    "repositories": [
+        {
+            "type": "vcs",
+            "url": "https://github.com/you/monolog"
         }
+    ],
+    "require": {
+        "symfony/monolog-bundle": "2.0",
+        "monolog/monolog": "dev-bugfix as 1.0.x-dev"
     }
+}
+```
 
 That will fetch the `dev-bugfix` version of `monolog/monolog` from your GitHub
 and alias it to `1.0.x-dev`.
diff --git a/vendor/composer/composer/doc/articles/custom-installers.md b/vendor/composer/composer/doc/articles/custom-installers.md
index feeebe5..98a9a22 100644
--- a/vendor/composer/composer/doc/articles/custom-installers.md
+++ b/vendor/composer/composer/doc/articles/custom-installers.md
@@ -34,13 +34,15 @@ An example use-case would be:
 
 An example composer.json of such a template package would be:
 
-    {
-        "name": "phpdocumentor/template-responsive",
-        "type": "phpdocumentor-template",
-        "require": {
-            "phpdocumentor/template-installer-plugin": "*"
-        }
+```json
+{
+    "name": "phpdocumentor/template-responsive",
+    "type": "phpdocumentor-template",
+    "require": {
+        "phpdocumentor/template-installer-plugin": "*"
     }
+}
+```
 
 > **IMPORTANT**: to make sure that the template installer is present at the
 > time the template package is installed, template packages should require
@@ -70,20 +72,22 @@ requirements:
 
 Example:
 
-    {
-        "name": "phpdocumentor/template-installer-plugin",
-        "type": "composer-plugin",
-        "license": "MIT",
-        "autoload": {
-            "psr-0": {"phpDocumentor\\Composer": "src/"}
-        },
-        "extra": {
-            "class": "phpDocumentor\\Composer\\TemplateInstallerPlugin"
-        },
-        "require": {
-            "composer-plugin-api": "1.0.0"
-        }
+```json
+{
+    "name": "phpdocumentor/template-installer-plugin",
+    "type": "composer-plugin",
+    "license": "MIT",
+    "autoload": {
+        "psr-0": {"phpDocumentor\\Composer": "src/"}
+    },
+    "extra": {
+        "class": "phpDocumentor\\Composer\\TemplateInstallerPlugin"
+    },
+    "require": {
+        "composer-plugin-api": "1.0.0"
     }
+}
+```
 
 ### The Plugin class
 
@@ -96,20 +100,24 @@ autoloadable and matches the `extra.class` element in the package definition.
 
 Example:
 
-    namespace phpDocumentor\Composer;
+```php
+<?php
+
+namespace phpDocumentor\Composer;
 
-    use Composer\Composer;
-    use Composer\IO\IOInterface;
-    use Composer\Plugin\PluginInterface;
+use Composer\Composer;
+use Composer\IO\IOInterface;
+use Composer\Plugin\PluginInterface;
 
-    class TemplateInstallerPlugin implements PluginInterface
+class TemplateInstallerPlugin implements PluginInterface
+{
+    public function activate(Composer $composer, IOInterface $io)
     {
-        public function activate(Composer $composer, IOInterface $io)
-        {
-            $installer = new TemplateInstaller($io, $composer);
-            $composer->getInstallationManager()->addInstaller($installer);
-        }
+        $installer = new TemplateInstaller($io, $composer);
+        $composer->getInstallationManager()->addInstaller($installer);
     }
+}
+```
 
 ### The Custom Installer class
 
@@ -138,38 +146,42 @@ source for the exact signature):
 
 Example:
 
-    namespace phpDocumentor\Composer;
+```php
+<?php
 
-    use Composer\Package\PackageInterface;
-    use Composer\Installer\LibraryInstaller;
+namespace phpDocumentor\Composer;
 
-    class TemplateInstaller extends LibraryInstaller
+use Composer\Package\PackageInterface;
+use Composer\Installer\LibraryInstaller;
+
+class TemplateInstaller extends LibraryInstaller
+{
+    /**
+     * {@inheritDoc}
+     */
+    public function getPackageBasePath(PackageInterface $package)
     {
-        /**
-         * {@inheritDoc}
-         */
-        public function getPackageBasePath(PackageInterface $package)
-        {
-            $prefix = substr($package->getPrettyName(), 0, 23);
-            if ('phpdocumentor/template-' !== $prefix) {
-                throw new \InvalidArgumentException(
-                    'Unable to install template, phpdocumentor templates '
-                    .'should always start their package name with '
-                    .'"phpdocumentor/template-"'
-                );
-            }
-
-            return 'data/templates/'.substr($package->getPrettyName(), 23);
+        $prefix = substr($package->getPrettyName(), 0, 23);
+        if ('phpdocumentor/template-' !== $prefix) {
+            throw new \InvalidArgumentException(
+                'Unable to install template, phpdocumentor templates '
+                .'should always start their package name with '
+                .'"phpdocumentor/template-"'
+            );
         }
 
-        /**
-         * {@inheritDoc}
-         */
-        public function supports($packageType)
-        {
-            return 'phpdocumentor-template' === $packageType;
-        }
+        return 'data/templates/'.substr($package->getPrettyName(), 23);
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public function supports($packageType)
+    {
+        return 'phpdocumentor-template' === $packageType;
     }
+}
+```
 
 The example demonstrates that it is quite simple to extend the
 [`Composer\Installer\LibraryInstaller`][5] class to strip a prefix
diff --git a/vendor/composer/composer/doc/articles/handling-private-packages-with-satis.md b/vendor/composer/composer/doc/articles/handling-private-packages-with-satis.md
index 0219f81..0ee0adb 100644
--- a/vendor/composer/composer/doc/articles/handling-private-packages-with-satis.md
+++ b/vendor/composer/composer/doc/articles/handling-private-packages-with-satis.md
@@ -2,14 +2,22 @@
     tagline: Host your own composer repository
 -->
 
-# Handling private packages with Satis
+# Handling private packages with Satis or Toran Proxy
 
-Satis is a static `composer` repository generator. It is a bit like an ultra-
-lightweight, static file-based version of packagist and can be used to host the
-metadata of your company's private packages, or your own. It basically acts as
-a micro-packagist. You can get it from
-[GitHub](http://github.com/composer/satis) or install via CLI:
-`composer.phar create-project composer/satis --stability=dev`.
+# Toran Proxy
+
+[Toran Proxy](https://toranproxy.com/) is a commercial alternative to Satis offering professional support as well as a web UI to manage everything and a better integration with Composer.
+
+Toran's revenue is also used to pay for Composer and Packagist development and hosting so using it is a good way to support open source financially. You can find more information about how to set it up and use it on the [Toran Proxy](https://toranproxy.com/) website.
+
+# Satis
+
+Satis on the other hand is open source but only a static `composer`
+repository generator. It is a bit like an ultra-lightweight, static file-based
+version of packagist and can be used to host the metadata of your company's
+private packages, or your own. You can get it from [GitHub](http://github.com/composer/satis)
+or install via CLI:
+`php composer.phar create-project composer/satis --stability=dev --keep-vcs`.
 
 ## Setup
 
@@ -25,34 +33,38 @@ repositories you defined.
 
 The default file Satis looks for is `satis.json` in the root of the repository.
 
-    {
-        "name": "My Repository",
-        "homepage": "http://packages.example.org",
-        "repositories": [
-            { "type": "vcs", "url": "http://github.com/mycompany/privaterepo" },
-            { "type": "vcs", "url": "http://svn.example.org/private/repo" },
-            { "type": "vcs", "url": "http://github.com/mycompany/privaterepo2" }
-        ],
-        "require-all": true
-    }
+```json
+{
+    "name": "My Repository",
+    "homepage": "http://packages.example.org",
+    "repositories": [
+        { "type": "vcs", "url": "http://github.com/mycompany/privaterepo" },
+        { "type": "vcs", "url": "http://svn.example.org/private/repo" },
+        { "type": "vcs", "url": "http://github.com/mycompany/privaterepo2" }
+    ],
+    "require-all": true
+}
+```
 
 If you want to cherry pick which packages you want, you can list all the packages
 you want to have in your satis repository inside the classic composer `require` key,
 using a `"*"` constraint to make sure all versions are selected, or another
 constraint if you want really specific versions.
 
-    {
-        "repositories": [
-            { "type": "vcs", "url": "http://github.com/mycompany/privaterepo" },
-            { "type": "vcs", "url": "http://svn.example.org/private/repo" },
-            { "type": "vcs", "url": "http://github.com/mycompany/privaterepo2" }
-        ],
-        "require": {
-            "company/package": "*",
-            "company/package2": "*",
-            "company/package3": "2.0.0"
-        }
+```json
+{
+    "repositories": [
+        { "type": "vcs", "url": "http://github.com/mycompany/privaterepo" },
+        { "type": "vcs", "url": "http://svn.example.org/private/repo" },
+        { "type": "vcs", "url": "http://github.com/mycompany/privaterepo2" }
+    ],
+    "require": {
+        "company/package": "*",
+        "company/package2": "*",
+        "company/package3": "2.0.0"
     }
+}
+```
 
 Once you did this, you just run `php bin/satis build <configuration file> <build dir>`.
 For example `php bin/satis build config.json web/` would read the `config.json`
@@ -80,14 +92,16 @@ everything should work smoothly. You don't need to copy all your repositories
 in every project anymore. Only that one unique repository that will update
 itself.
 
-    {
-        "repositories": [ { "type": "composer", "url": "http://packages.example.org/" } ],
-        "require": {
-            "company/package": "1.2.0",
-            "company/package2": "1.5.2",
-            "company/package3": "dev-master"
-        }
+```json
+{
+    "repositories": [ { "type": "composer", "url": "http://packages.example.org/" } ],
+    "require": {
+        "company/package": "1.2.0",
+        "company/package2": "1.5.2",
+        "company/package3": "dev-master"
     }
+}
+```
 
 ### Security
 
@@ -97,39 +111,43 @@ connection options for the server.
 
 Example using a custom repository using SSH (requires the SSH2 PECL extension):
 
-    {
-        "repositories": [
-            {
-                "type": "composer",
-                "url": "ssh2.sftp://example.org",
-                "options": {
-                    "ssh2": {
-                        "username": "composer",
-                        "pubkey_file": "/home/composer/.ssh/id_rsa.pub",
-                        "privkey_file": "/home/composer/.ssh/id_rsa"
-                    }
+```json
+{
+    "repositories": [
+        {
+            "type": "composer",
+            "url": "ssh2.sftp://example.org",
+            "options": {
+                "ssh2": {
+                    "username": "composer",
+                    "pubkey_file": "/home/composer/.ssh/id_rsa.pub",
+                    "privkey_file": "/home/composer/.ssh/id_rsa"
                 }
             }
-        ]
-    }
+        }
+    ]
+}
+```
 
 > **Tip:** See [ssh2 context options](http://www.php.net/manual/en/wrappers.ssh2.php#refsect1-wrappers.ssh2-options) for more information.
 
 Example using HTTP over SSL using a client certificate:
 
-    {
-        "repositories": [
-            {
-                "type": "composer",
-                "url": "https://example.org",
-                "options": {
-                    "ssl": {
-                        "local_cert": "/home/composer/.ssl/composer.pem"
-                    }
+```json
+{
+    "repositories": [
+        {
+            "type": "composer",
+            "url": "https://example.org",
+            "options": {
+                "ssl": {
+                    "local_cert": "/home/composer/.ssl/composer.pem"
                 }
             }
-        ]
-    }
+        }
+    ]
+}
+```
 
 > **Tip:** See [ssl context options](http://www.php.net/manual/en/context.ssl.php) for more information.
 
@@ -145,14 +163,16 @@ Subversion) will not have downloads available and thus installations usually tak
 To enable your satis installation to create downloads for all (Git, Mercurial and Subversion) your packages, add the
 following to your `satis.json`:
 
-    {
-        "archive": {
-            "directory": "dist",
-            "format": "tar",
-            "prefix-url": "https://amazing.cdn.example.org",
-            "skip-dev": true
-        }
+```json
+{
+    "archive": {
+        "directory": "dist",
+        "format": "tar",
+        "prefix-url": "https://amazing.cdn.example.org",
+        "skip-dev": true
     }
+}
+```
 
 #### Options explained
 
@@ -178,11 +198,14 @@ It is possible to make satis automatically resolve and add all dependencies for
 with the Downloads functionality to have a complete local mirror of packages. Just add the following
 to your `satis.json`:
 
-```
+```json
 {
-    "require-dependencies": true
+    "require-dependencies": true,
+    "require-dev-dependencies": true
 }
 ```
 
 When searching for packages, satis will attempt to resolve all the required packages from the listed repositories.
 Therefore, if you are requiring a package from Packagist, you will need to define it in your `satis.json`.
+
+Dev dependencies are packaged only if the `require-dev-dependencies` parameter is set to true.
diff --git a/vendor/composer/composer/doc/articles/plugins.md b/vendor/composer/composer/doc/articles/plugins.md
index 75706f7..65884fd 100644
--- a/vendor/composer/composer/doc/articles/plugins.md
+++ b/vendor/composer/composer/doc/articles/plugins.md
@@ -35,13 +35,15 @@ current composer plugin API version is 1.0.0.
 
 For example
 
-    {
-        "name": "my/plugin-package",
-        "type": "composer-plugin",
-        "require": {
-            "composer-plugin-api": "1.0.0"
-        }
+```json
+{
+    "name": "my/plugin-package",
+    "type": "composer-plugin",
+    "require": {
+        "composer-plugin-api": "1.0.0"
     }
+}
+```
 
 ### Plugin Class
 
@@ -54,20 +56,24 @@ be read and all internal objects and state can be manipulated as desired.
 
 Example:
 
-    namespace phpDocumentor\Composer;
+```php
+<?php
 
-    use Composer\Composer;
-    use Composer\IO\IOInterface;
-    use Composer\Plugin\PluginInterface;
+namespace phpDocumentor\Composer;
 
-    class TemplateInstallerPlugin implements PluginInterface
+use Composer\Composer;
+use Composer\IO\IOInterface;
+use Composer\Plugin\PluginInterface;
+
+class TemplateInstallerPlugin implements PluginInterface
+{
+    public function activate(Composer $composer, IOInterface $io)
     {
-        public function activate(Composer $composer, IOInterface $io)
-        {
-            $installer = new TemplateInstaller($io, $composer);
-            $composer->getInstallationManager()->addInstaller($installer);
-        }
+        $installer = new TemplateInstaller($io, $composer);
+        $composer->getInstallationManager()->addInstaller($installer);
     }
+}
+```
 
 ## Event Handler
 
@@ -88,46 +94,50 @@ The events available for plugins are:
 
 Example:
 
-    namespace Naderman\Composer\AWS;
+```php
+<?php
 
-    use Composer\Composer;
-    use Composer\EventDispatcher\EventSubscriberInterface;
-    use Composer\IO\IOInterface;
-    use Composer\Plugin\PluginInterface;
-    use Composer\Plugin\PluginEvents;
-    use Composer\Plugin\PreFileDownloadEvent;
+namespace Naderman\Composer\AWS;
 
-    class AwsPlugin implements PluginInterface, EventSubscriberInterface
-    {
-        protected $composer;
-        protected $io;
+use Composer\Composer;
+use Composer\EventDispatcher\EventSubscriberInterface;
+use Composer\IO\IOInterface;
+use Composer\Plugin\PluginInterface;
+use Composer\Plugin\PluginEvents;
+use Composer\Plugin\PreFileDownloadEvent;
 
-        public function activate(Composer $composer, IOInterface $io)
-        {
-            $this->composer = $composer;
-            $this->io = $io;
-        }
+class AwsPlugin implements PluginInterface, EventSubscriberInterface
+{
+    protected $composer;
+    protected $io;
 
-        public static function getSubscribedEvents()
-        {
-            return array(
-                PluginEvents::PRE_FILE_DOWNLOAD => array(
-                    array('onPreFileDownload', 0)
-                ),
-            );
-        }
+    public function activate(Composer $composer, IOInterface $io)
+    {
+        $this->composer = $composer;
+        $this->io = $io;
+    }
+
+    public static function getSubscribedEvents()
+    {
+        return array(
+            PluginEvents::PRE_FILE_DOWNLOAD => array(
+                array('onPreFileDownload', 0)
+            ),
+        );
+    }
 
-        public function onPreFileDownload(PreFileDownloadEvent $event)
-        {
-            $protocol = parse_url($event->getProcessedUrl(), PHP_URL_SCHEME);
+    public function onPreFileDownload(PreFileDownloadEvent $event)
+    {
+        $protocol = parse_url($event->getProcessedUrl(), PHP_URL_SCHEME);
 
-            if ($protocol === 's3') {
-                $awsClient = new AwsClient($this->io, $this->composer->getConfig());
-                $s3RemoteFilesystem = new S3RemoteFilesystem($this->io, $event->getRemoteFilesystem()->getOptions(), $awsClient);
-                $event->setRemoteFilesystem($s3RemoteFilesystem);
-            }
+        if ($protocol === 's3') {
+            $awsClient = new AwsClient($this->io, $this->composer->getConfig());
+            $s3RemoteFilesystem = new S3RemoteFilesystem($this->io, $event->getRemoteFilesystem()->getOptions(), $awsClient);
+            $event->setRemoteFilesystem($s3RemoteFilesystem);
         }
     }
+}
+```
 
 ## Using Plugins
 
diff --git a/vendor/composer/composer/doc/articles/scripts.md b/vendor/composer/composer/doc/articles/scripts.md
index 06e7c78..3e6ef54 100644
--- a/vendor/composer/composer/doc/articles/scripts.md
+++ b/vendor/composer/composer/doc/articles/scripts.md
@@ -11,9 +11,9 @@ static method) or any command-line executable command. Scripts are useful
 for executing a package's custom code or package-specific commands during
 the Composer execution process.
 
-**NOTE: Only scripts defined in the root package's `composer.json` are
-executed. If a dependency of the root package specifies its own scripts,
-Composer does not execute those additional scripts.**
+> **Note:** Only scripts defined in the root package's `composer.json` are
+> executed. If a dependency of the root package specifies its own scripts,
+> Composer does not execute those additional scripts.
 
 
 ## Event names
@@ -26,6 +26,8 @@ Composer fires the following named events during its execution process:
 - **post-update-cmd**: occurs after the `update` command is executed.
 - **pre-status-cmd**: occurs before the `status` command is executed.
 - **post-status-cmd**: occurs after the `status` command is executed.
+- **pre-dependencies-solving**: occurs before the dependencies are resolved.
+- **post-dependencies-solving**: occurs after the dependencies are resolved.
 - **pre-package-install**: occurs before a package is installed.
 - **post-package-install**: occurs after a package is installed.
 - **pre-package-update**: occurs before a package is updated.
@@ -40,13 +42,15 @@ Composer fires the following named events during its execution process:
   installed, during the `create-project` command.
 - **post-create-project-cmd**: occurs after the `create-project` command is
   executed.
+- **pre-archive-cmd**: occurs before the `archive` command is executed.
+- **post-archive-cmd**: occurs after the `archive` command is executed.
 
-**NOTE: Composer makes no assumptions about the state of your dependencies 
-prior to `install` or `update`. Therefore, you should not specify scripts that 
-require Composer-managed dependencies in the `pre-update-cmd` or 
-`pre-install-cmd` event hooks. If you need to execute scripts prior to 
-`install` or `update` please make sure they are self-contained within your 
-root package.**
+> **Note:** Composer makes no assumptions about the state of your dependencies
+> prior to `install` or `update`. Therefore, you should not specify scripts
+> that require Composer-managed dependencies in the `pre-update-cmd` or
+> `pre-install-cmd` event hooks. If you need to execute scripts prior to
+> `install` or `update` please make sure they are self-contained within your
+> root package.
 
 ## Defining scripts
 
@@ -59,53 +63,60 @@ For any given event:
 
 - Scripts execute in the order defined when their corresponding event is fired.
 - An array of scripts wired to a single event can contain both PHP callbacks
-and command-line executables commands.
+and command-line executable commands.
 - PHP classes containing defined callbacks must be autoloadable via Composer's
 autoload functionality.
 
 Script definition example:
 
-    {
-        "scripts": {
-            "post-update-cmd": "MyVendor\\MyClass::postUpdate",
-            "post-package-install": [
-                "MyVendor\\MyClass::postPackageInstall"
-            ],
-            "post-install-cmd": [
-                "MyVendor\\MyClass::warmCache",
-                "phpunit -c app/"
-            ]
-        }
+```json
+{
+    "scripts": {
+        "post-update-cmd": "MyVendor\\MyClass::postUpdate",
+        "post-package-install": [
+            "MyVendor\\MyClass::postPackageInstall"
+        ],
+        "post-install-cmd": [
+            "MyVendor\\MyClass::warmCache",
+            "phpunit -c app/"
+        ],
+        "post-create-project-cmd" : [
+            "php -r \"copy('config/local-example.php', 'config/local.php');\""
+        ]
     }
+}
+```
 
 Using the previous definition example, here's the class `MyVendor\MyClass`
 that might be used to execute the PHP callbacks:
 
-    <?php
+```php
+<?php
+
+namespace MyVendor;
 
-    namespace MyVendor;
+use Composer\Script\Event;
 
-    use Composer\Script\Event;
+class MyClass
+{
+    public static function postUpdate(Event $event)
+    {
+        $composer = $event->getComposer();
+        // do stuff
+    }
+
+    public static function postPackageInstall(Event $event)
+    {
+        $installedPackage = $event->getOperation()->getPackage();
+        // do stuff
+    }
 
-    class MyClass
+    public static function warmCache(Event $event)
     {
-        public static function postUpdate(Event $event)
-        {
-            $composer = $event->getComposer();
-            // do stuff
-        }
-
-        public static function postPackageInstall(Event $event)
-        {
-            $installedPackage = $event->getOperation()->getPackage();
-            // do stuff
-        }
-
-        public static function warmCache(Event $event)
-        {
-            // make cache toasty
-        }
+        // make cache toasty
     }
+}
+```
 
 When an event is fired, Composer's internal event handler receives a
 `Composer\Script\Event` object, which is passed as the first argument to your
@@ -120,6 +131,33 @@ PHP callback. This `Event` object has getters for other contextual objects:
 
 If you would like to run the scripts for an event manually, the syntax is:
 
-    $ composer run-script [--dev] [--no-dev] script
+```sh
+composer run-script [--dev] [--no-dev] script
+```
+
+For example `composer run-script post-install-cmd` will run any
+**post-install-cmd** scripts that have been defined.
+
+You can also give additional arguments to the script handler by appending `--`
+followed by the handler arguments. e.g.
+`composer run-script post-install-cmd -- --check` will pass`--check` along to
+the script handler. Those arguments are received as CLI arg by CLI handlers,
+and can be retrieved as an array via `$event->getArguments()` by PHP handlers.
+
+## Writing custom commands
+
+If you add custom scripts that do not fit one of the predefined event name
+above, you can either run them with run-script or also run them as native
+Composer commands. For example the handler defined below is executable by
+simply running `composer test`:
+
+```json
+{
+    "scripts": {
+        "test": "phpunit"
+    }
+}
+```
 
-For example `composer run-script post-install-cmd` will run any **post-install-cmd** scripts that have been defined.
+> **Note:** Composer's bin-dir is pushed on top of the PATH so that binaries
+> of dependencies are easily accessible as CLI commands when writing scripts.
diff --git a/vendor/composer/composer/doc/articles/troubleshooting.md b/vendor/composer/composer/doc/articles/troubleshooting.md
index 3483b1c..922526a 100644
--- a/vendor/composer/composer/doc/articles/troubleshooting.md
+++ b/vendor/composer/composer/doc/articles/troubleshooting.md
@@ -21,6 +21,8 @@ This is a list of common pitfalls on using Composer, and how to avoid them.
    possible interferences with existing vendor installations or `composer.lock`
    entries.
 
+5. Try clearing Composer's cache by running `composer clear-cache`.
+
 ## Package not found
 
 1. Double-check you **don't have typos** in your `composer.json` or repository
@@ -38,6 +40,9 @@ This is a list of common pitfalls on using Composer, and how to avoid them.
    your repository, especially when maintaining a third party fork and using
    `replace`.
 
+5. If you are updating to a recently published version of a package, be aware that
+   Packagist has a delay of up to 1 minute before new packages are visible to Composer.
+
 ## Package not found on travis-ci.org
 
 1. Check the ["Package not found"](#package-not-found) item above.
@@ -63,12 +68,14 @@ You can fix this by aliasing version 0.11 to 0.1:
 
 composer.json:
 
-    {
-        "require": {
-            "A": "0.2",
-            "B": "0.11 as 0.1"
-        }
+```json
+{
+    "require": {
+        "A": "0.2",
+        "B": "0.11 as 0.1"
     }
+}
+```
 
 See [aliases](aliases.md) for more information.
 
@@ -76,7 +83,7 @@ See [aliases](aliases.md) for more information.
 
 If composer shows memory errors on some commands:
 
-    PHP Fatal error:  Allowed memory size of XXXXXX bytes exhausted <...>
+`PHP Fatal error:  Allowed memory size of XXXXXX bytes exhausted <...>`
 
 The PHP `memory_limit` should be increased.
 
@@ -86,17 +93,23 @@ The PHP `memory_limit` should be increased.
 
 To get the current `memory_limit` value, run:
 
-    php -r "echo ini_get('memory_limit').PHP_EOL;"
+```sh
+php -r "echo ini_get('memory_limit').PHP_EOL;"
+```
 
 Try increasing the limit in your `php.ini` file (ex. `/etc/php5/cli/php.ini` for
 Debian-like systems):
 
-    ; Use -1 for unlimited or define an explicit value like 512M
-    memory_limit = -1
+```ini
+; Use -1 for unlimited or define an explicit value like 512M
+memory_limit = -1
+```
 
 Or, you can increase the limit with a command-line argument:
 
-    php -d memory_limit=-1 composer.phar <...>
+```sh
+php -d memory_limit=-1 composer.phar <...>
+```
 
 ## "The system cannot find the path specified" (Windows)
 
@@ -104,3 +117,42 @@ Or, you can increase the limit with a command-line argument:
 2. Search for an ```AutoRun``` key inside ```HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor```
    or ```HKEY_CURRENT_USER\Software\Microsoft\Command Processor```.
 3. Check if it contains any path to non-existent file, if it's the case, just remove them.
+
+## API rate limit and OAuth tokens
+
+Because of GitHub's rate limits on their API it can happen that Composer prompts
+for authentication asking your username and password so it can go ahead with its work.
+
+If you would prefer not to provide your GitHub credentials to Composer you can
+manually create a token using the following procedure:
+
+1. [Create](https://github.com/settings/applications) an OAuth token on GitHub.
+[Read more](https://github.com/blog/1509-personal-api-tokens) on this.
+
+2. Add it to the configuration running `composer config -g github-oauth.github.com <oauthtoken>`
+
+Now Composer should install/update without asking for authentication.
+
+## proc_open(): fork failed errors
+If composer shows proc_open() fork failed on some commands:
+
+`PHP Fatal error: Uncaught exception 'ErrorException' with message 'proc_open(): fork failed - Cannot allocate memory' in phar`
+
+This could be happening because the VPS runs out of memory and has no Swap space enabled.
+
+```sh
+free -m
+
+total used free shared buffers cached
+Mem: 2048 357 1690 0 0 237
+-/+ buffers/cache: 119 1928
+Swap: 0 0 0
+```
+
+To enable the swap you can use for example:
+
+```sh
+/bin/dd if=/dev/zero of=/var/swap.1 bs=1M count=1024
+/sbin/mkswap /var/swap.1
+/sbin/swapon /var/swap.1
+```
diff --git a/vendor/composer/composer/doc/articles/vendor-binaries.md b/vendor/composer/composer/doc/articles/vendor-binaries.md
index b258dcc..b65b6bc 100644
--- a/vendor/composer/composer/doc/articles/vendor-binaries.md
+++ b/vendor/composer/composer/doc/articles/vendor-binaries.md
@@ -20,10 +20,11 @@ It is defined by adding the `bin` key to a project's `composer.json`.
 It is specified as an array of files so multiple binaries can be added
 for any given project.
 
-    {
-        "bin": ["bin/my-script", "bin/my-other-script"]
-    }
-
+```json
+{
+    "bin": ["bin/my-script", "bin/my-other-script"]
+}
+```
 
 ## What does defining a vendor binary in composer.json do?
 
@@ -46,22 +47,26 @@ symlink is created from each dependency's binaries to `vendor/bin`.
 
 Say package `my-vendor/project-a` has binaries setup like this:
 
-    {
-        "name": "my-vendor/project-a",
-        "bin": ["bin/project-a-bin"]
-    }
+```json
+{
+    "name": "my-vendor/project-a",
+    "bin": ["bin/project-a-bin"]
+}
+```
 
 Running `composer install` for this `composer.json` will not do
 anything with `bin/project-a-bin`.
 
 Say project `my-vendor/project-b` has requirements setup like this:
 
-    {
-        "name": "my-vendor/project-b",
-        "require": {
-            "my-vendor/project-a": "*"
-        }
+```json
+{
+    "name": "my-vendor/project-b",
+    "require": {
+        "my-vendor/project-a": "*"
     }
+}
+```
 
 Running `composer install` for this `composer.json` will look at
 all of project-b's dependencies and install them to `vendor/bin`.
@@ -95,12 +100,16 @@ Yes, there are two ways an alternate vendor binary location can be specified:
 
 An example of the former looks like this:
 
-    {
-        "config": {
-            "bin-dir": "scripts"
-        }
+```json
+{
+    "config": {
+        "bin-dir": "scripts"
     }
+}
+```
 
 Running `composer install` for this `composer.json` will result in
 all of the vendor binaries being installed in `scripts/` instead of
 `vendor/bin/`.
+
+You can set `bin-dir` to `./` to put binaries in your project root.
diff --git a/vendor/composer/composer/doc/faqs/how-do-i-install-a-package-to-a-custom-path-for-my-framework.md b/vendor/composer/composer/doc/faqs/how-do-i-install-a-package-to-a-custom-path-for-my-framework.md
index b5956ca..bd38d1e 100644
--- a/vendor/composer/composer/doc/faqs/how-do-i-install-a-package-to-a-custom-path-for-my-framework.md
+++ b/vendor/composer/composer/doc/faqs/how-do-i-install-a-package-to-a-custom-path-for-my-framework.md
@@ -11,13 +11,15 @@ This is common if your package is intended for a specific framework such as
 CakePHP, Drupal or WordPress. Here is an example composer.json file for a
 WordPress theme:
 
-    {
-        "name": "you/themename",
-        "type": "wordpress-theme",
-        "require": {
-            "composer/installers": "~1.0"
-        }
+```json
+{
+    "name": "you/themename",
+    "type": "wordpress-theme",
+    "require": {
+        "composer/installers": "~1.0"
     }
+}
+```
 
 Now when your theme is installed with Composer it will be placed into
 `wp-content/themes/themename/` folder. Check the
@@ -30,13 +32,15 @@ useful example would be for a Drupal multisite setup where the package should be
 installed into your sites subdirectory. Here we are overriding the install path
 for a module that uses composer/installers:
 
-    {
-        "extra": {
-            "installer-paths": {
-                "sites/example.com/modules/{$name}": ["vendor/package"]
-            }
+```json
+{
+    "extra": {
+        "installer-paths": {
+            "sites/example.com/modules/{$name}": ["vendor/package"]
         }
     }
+}
+```
 
 Now the package would be installed to your folder location, rather than the default
 composer/installers determined location.
diff --git a/vendor/composer/composer/doc/faqs/should-i-commit-the-dependencies-in-my-vendor-directory.md b/vendor/composer/composer/doc/faqs/should-i-commit-the-dependencies-in-my-vendor-directory.md
index 8e50f72..cdbd314 100644
--- a/vendor/composer/composer/doc/faqs/should-i-commit-the-dependencies-in-my-vendor-directory.md
+++ b/vendor/composer/composer/doc/faqs/should-i-commit-the-dependencies-in-my-vendor-directory.md
@@ -24,6 +24,7 @@ If you really feel like you must do this, you have a few options:
    [config](../04-schema.md#config).
 3. Remove the `.git` directory of every dependency after the installation, then
    you can add them to your git repo. You can do that with `rm -rf vendor/**/.git`
+   in ZSH or `find vendor/ -type d -name ".git" -exec rm -rf {} \;` in Bash.
    but this means you will have to delete those dependencies from disk before
    running composer update.
 4. Add a .gitignore rule (`vendor/.git`) to ignore all the vendor `.git` folders.
diff --git a/vendor/composer/composer/doc/faqs/why-are-unbound-version-constraints-a-bad-idea.md b/vendor/composer/composer/doc/faqs/why-are-unbound-version-constraints-a-bad-idea.md
new file mode 100644
index 0000000..1834039
--- /dev/null
+++ b/vendor/composer/composer/doc/faqs/why-are-unbound-version-constraints-a-bad-idea.md
@@ -0,0 +1,21 @@
+# Why are unbound version constraints a bad idea?
+
+A version constraint without an upper bound such as `*`, `>=3.4` or
+`dev-master` will allow updates to any future version of the dependency.
+This includes major versions breaking backward compatibility.
+
+Once a release of your package is tagged, you cannot tweak its dependencies
+anymore in case a dependency breaks BC - you have to do a new release but the
+previous one stays broken.
+
+The only good alternative is to define an upper bound on your constraints,
+which you can increase in a new release after testing that your package is
+compatible with the new major version of your dependency.
+
+For example instead of using `>=3.4` you should use `~3.4` which allows all
+versions up to `3.999` but does not include `4.0` and above. The `~` operator
+works very well with libraries follow [semantic versioning](http://semver.org).
+
+**Note:** As a package maintainer, you can make the life of your users easier
+by providing an [alias version](../articles/aliases.md) for your development
+branch to allow it to match bound constraints.
diff --git a/vendor/composer/composer/doc/faqs/why-can't-composer-load-repositories-recursively.md b/vendor/composer/composer/doc/faqs/why-can't-composer-load-repositories-recursively.md
index d81a0f0..0ab44c7 100644
--- a/vendor/composer/composer/doc/faqs/why-can't-composer-load-repositories-recursively.md
+++ b/vendor/composer/composer/doc/faqs/why-can't-composer-load-repositories-recursively.md
@@ -9,7 +9,7 @@ that the main use of custom VCS & package repositories is to temporarily try
 some things, or use a fork of a project until your pull request is merged, etc.
 You should not use them to keep track of private packages. For that you should
 look into [setting up Satis](../articles/handling-private-packages-with-satis.md)
-for your company or even for yourself.
+or getting a [Toran Proxy](https://toranproxy.com) license for your company.
 
 There are three ways the dependency solver could work with custom repositories:
 
diff --git a/vendor/composer/composer/doc/fixtures/fixtures.md b/vendor/composer/composer/doc/fixtures/fixtures.md
new file mode 100644
index 0000000..fd77f3c
--- /dev/null
+++ b/vendor/composer/composer/doc/fixtures/fixtures.md
@@ -0,0 +1,20 @@
+`Composer` type repository fixtures
+=======================
+
+This directory contains some examples of what `composer` type repositories can look like. They serve as illustrating examples accompanying the docs, but can also be used as (initial) fixtures for tests.
+
+* `repo-composer-plain` is a simple, plain `packages.json` file
+* `repo-composer-with-includes` uses the `includes` mechanism
+* `repo-composer-with-providers` uses the `providers` mechanism
+
+Sample Packages used in these fixtures
+-------
+
+All these repositories contain the following packages.
+
+* `foo/bar` versions 1.0.0, 1.0.1 and 1.1.0; dev-default and 1.0.x-dev branches. On dev-default and in 1.1.0, `bar/baz` ~1.0 is required.
+* `qux/quux` only has a dev-default branch. It `replace`s `gar/nix`.
+* `gar/nix` has a 1.0.0 version and a dev-default branch. It is being replaced by `qux/quux`.
+* `bar/baz` has a 1.0.0 version and 1.0.x-dev as well as dev-default branches. Additionally, 1.1.x-dev is a branch alias for dev-default.
+
+
diff --git a/vendor/composer/composer/doc/fixtures/repo-composer-plain/packages.json b/vendor/composer/composer/doc/fixtures/repo-composer-plain/packages.json
new file mode 100644
index 0000000..2190519
--- /dev/null
+++ b/vendor/composer/composer/doc/fixtures/repo-composer-plain/packages.json
@@ -0,0 +1,158 @@
+{
+    "packages": {
+        "bar/baz": {
+            "1.0.0": {
+                "name": "bar/baz",
+                "version": "1.0.0",
+                "version_normalized": "1.0.0.0",
+                "source": {
+                    "type": "hg",
+                    "url": "http://some.where/over/the/rainbow/",
+                    "reference": "35810817c14d"
+                },
+                "time": "2014-10-13 12:04:55",
+                "type": "library"
+            },
+            "1.0.x-dev": {
+                "name": "bar/baz",
+                "version": "1.0.x-dev",
+                "version_normalized": "1.0.9999999.9999999-dev",
+                "source": {
+                    "type": "hg",
+                    "url": "http://some.where/over/the/rainbow/",
+                    "reference": "ffff9aae6ed5"
+                },
+                "time": "2014-10-13 12:05:37",
+                "type": "library"
+            },
+            "dev-default": {
+                "name": "bar/baz",
+                "version": "dev-default",
+                "version_normalized": "9999999-dev",
+                "source": {
+                    "type": "hg",
+                    "url": "http://some.where/over/the/rainbow/",
+                    "reference": "f317e556f2e2"
+                },
+                "time": "2014-10-13 12:06:45",
+                "type": "library",
+                "extra": {
+                    "branch-alias": {
+                        "dev-default": "1.1.x-dev"
+                    }
+                }
+            }
+        },
+        "foo/bar": {
+            "1.0.0": {
+                "name": "foo/bar",
+                "version": "1.0.0",
+                "version_normalized": "1.0.0.0",
+                "source": {
+                    "type": "hg",
+                    "url": "http://some.where/over/the/rainbow/",
+                    "reference": "249dec95a52a"
+                },
+                "time": "2014-10-11 15:42:00",
+                "type": "library"
+            },
+            "1.0.1": {
+                "name": "foo/bar",
+                "version": "1.0.1",
+                "version_normalized": "1.0.1.0",
+                "source": {
+                    "type": "hg",
+                    "url": "http://some.where/over/the/rainbow/",
+                    "reference": "21e3328295d4"
+                },
+                "time": "2014-10-11 15:45:56",
+                "type": "library"
+            },
+            "1.0.x-dev": {
+                "name": "foo/bar",
+                "version": "1.0.x-dev",
+                "version_normalized": "1.0.9999999.9999999-dev",
+                "source": {
+                    "type": "hg",
+                    "url": "http://some.where/over/the/rainbow/",
+                    "reference": "14dc17c8e860"
+                },
+                "time": "2014-10-11 15:45:59",
+                "type": "library"
+            },
+            "1.1.0": {
+                "name": "foo/bar",
+                "version": "1.1.0",
+                "version_normalized": "1.1.0.0",
+                "source": {
+                    "type": "hg",
+                    "url": "http://some.where/over/the/rainbow/",
+                    "reference": "d2fa3e69ad5b"
+                },
+                "require": {
+                    "bar/baz": "~1.0"
+                },
+                "time": "2014-10-11 15:43:16",
+                "type": "library"
+            },
+            "dev-default": {
+                "name": "foo/bar",
+                "version": "dev-default",
+                "version_normalized": "9999999-dev",
+                "source": {
+                    "type": "hg",
+                    "url": "http://some.where/over/the/rainbow/",
+                    "reference": "8e5a5c224336"
+                },
+                "require": {
+                    "bar/baz": "~1.0"
+                },
+                "time": "2014-10-11 15:43:18",
+                "type": "library"
+            }
+        },
+        "gar/nix": {
+            "1.0.0": {
+                "name": "gar/nix",
+                "version": "1.0.0",
+                "version_normalized": "1.0.0.0",
+                "source": {
+                    "type": "hg",
+                    "url": "http://some.where/over/the/rainbow/",
+                    "reference": "44977145d64e"
+                },
+                "time": "2014-10-13 12:03:33",
+                "type": "library"
+            },
+            "dev-default": {
+                "name": "gar/nix",
+                "version": "dev-default",
+                "version_normalized": "9999999-dev",
+                "source": {
+                    "type": "hg",
+                    "url": "http://some.where/over/the/rainbow/",
+                    "reference": "51cca95a31c2"
+                },
+                "time": "2014-10-13 12:03:35",
+                "type": "library"
+            }
+        },
+        "qux/quux": {
+            "dev-default": {
+                "name": "qux/quux",
+                "version": "dev-default",
+                "version_normalized": "9999999-dev",
+                "source": {
+                    "type": "hg",
+                    "url": "http://some.where/over/the/rainbow/",
+                    "reference": "4a10a567baa5"
+                },
+                "replace": {
+                    "gar/nix": "1.0.*"
+                },
+                "time": "2014-10-11 15:48:15",
+                "type": "library"
+            }
+        }
+    }
+}
diff --git a/vendor/composer/composer/doc/fixtures/repo-composer-with-includes/include/all$5fa86b937f0502d92f776072cd49c002dca742b9.json b/vendor/composer/composer/doc/fixtures/repo-composer-with-includes/include/all$5fa86b937f0502d92f776072cd49c002dca742b9.json
new file mode 100644
index 0000000..2190519
--- /dev/null
+++ b/vendor/composer/composer/doc/fixtures/repo-composer-with-includes/include/all$5fa86b937f0502d92f776072cd49c002dca742b9.json
@@ -0,0 +1,158 @@
+{
+    "packages": {
+        "bar/baz": {
+            "1.0.0": {
+                "name": "bar/baz",
+                "version": "1.0.0",
+                "version_normalized": "1.0.0.0",
+                "source": {
+                    "type": "hg",
+                    "url": "http://some.where/over/the/rainbow/",
+                    "reference": "35810817c14d"
+                },
+                "time": "2014-10-13 12:04:55",
+                "type": "library"
+            },
+            "1.0.x-dev": {
+                "name": "bar/baz",
+                "version": "1.0.x-dev",
+                "version_normalized": "1.0.9999999.9999999-dev",
+                "source": {
+                    "type": "hg",
+                    "url": "http://some.where/over/the/rainbow/",
+                    "reference": "ffff9aae6ed5"
+                },
+                "time": "2014-10-13 12:05:37",
+                "type": "library"
+            },
+            "dev-default": {
+                "name": "bar/baz",
+                "version": "dev-default",
+                "version_normalized": "9999999-dev",
+                "source": {
+                    "type": "hg",
+                    "url": "http://some.where/over/the/rainbow/",
+                    "reference": "f317e556f2e2"
+                },
+                "time": "2014-10-13 12:06:45",
+                "type": "library",
+                "extra": {
+                    "branch-alias": {
+                        "dev-default": "1.1.x-dev"
+                    }
+                }
+            }
+        },
+        "foo/bar": {
+            "1.0.0": {
+                "name": "foo/bar",
+                "version": "1.0.0",
+                "version_normalized": "1.0.0.0",
+                "source": {
+                    "type": "hg",
+                    "url": "http://some.where/over/the/rainbow/",
+                    "reference": "249dec95a52a"
+                },
+                "time": "2014-10-11 15:42:00",
+                "type": "library"
+            },
+            "1.0.1": {
+                "name": "foo/bar",
+                "version": "1.0.1",
+                "version_normalized": "1.0.1.0",
+                "source": {
+                    "type": "hg",
+                    "url": "http://some.where/over/the/rainbow/",
+                    "reference": "21e3328295d4"
+                },
+                "time": "2014-10-11 15:45:56",
+                "type": "library"
+            },
+            "1.0.x-dev": {
+                "name": "foo/bar",
+                "version": "1.0.x-dev",
+                "version_normalized": "1.0.9999999.9999999-dev",
+                "source": {
+                    "type": "hg",
+                    "url": "http://some.where/over/the/rainbow/",
+                    "reference": "14dc17c8e860"
+                },
+                "time": "2014-10-11 15:45:59",
+                "type": "library"
+            },
+            "1.1.0": {
+                "name": "foo/bar",
+                "version": "1.1.0",
+                "version_normalized": "1.1.0.0",
+                "source": {
+                    "type": "hg",
+                    "url": "http://some.where/over/the/rainbow/",
+                    "reference": "d2fa3e69ad5b"
+                },
+                "require": {
+                    "bar/baz": "~1.0"
+                },
+                "time": "2014-10-11 15:43:16",
+                "type": "library"
+            },
+            "dev-default": {
+                "name": "foo/bar",
+                "version": "dev-default",
+                "version_normalized": "9999999-dev",
+                "source": {
+                    "type": "hg",
+                    "url": "http://some.where/over/the/rainbow/",
+                    "reference": "8e5a5c224336"
+                },
+                "require": {
+                    "bar/baz": "~1.0"
+                },
+                "time": "2014-10-11 15:43:18",
+                "type": "library"
+            }
+        },
+        "gar/nix": {
+            "1.0.0": {
+                "name": "gar/nix",
+                "version": "1.0.0",
+                "version_normalized": "1.0.0.0",
+                "source": {
+                    "type": "hg",
+                    "url": "http://some.where/over/the/rainbow/",
+                    "reference": "44977145d64e"
+                },
+                "time": "2014-10-13 12:03:33",
+                "type": "library"
+            },
+            "dev-default": {
+                "name": "gar/nix",
+                "version": "dev-default",
+                "version_normalized": "9999999-dev",
+                "source": {
+                    "type": "hg",
+                    "url": "http://some.where/over/the/rainbow/",
+                    "reference": "51cca95a31c2"
+                },
+                "time": "2014-10-13 12:03:35",
+                "type": "library"
+            }
+        },
+        "qux/quux": {
+            "dev-default": {
+                "name": "qux/quux",
+                "version": "dev-default",
+                "version_normalized": "9999999-dev",
+                "source": {
+                    "type": "hg",
+                    "url": "http://some.where/over/the/rainbow/",
+                    "reference": "4a10a567baa5"
+                },
+                "replace": {
+                    "gar/nix": "1.0.*"
+                },
+                "time": "2014-10-11 15:48:15",
+                "type": "library"
+            }
+        }
+    }
+}
diff --git a/vendor/composer/composer/doc/fixtures/repo-composer-with-includes/packages.json b/vendor/composer/composer/doc/fixtures/repo-composer-with-includes/packages.json
new file mode 100644
index 0000000..1ef9753
--- /dev/null
+++ b/vendor/composer/composer/doc/fixtures/repo-composer-with-includes/packages.json
@@ -0,0 +1,10 @@
+{
+    "packages": [
+
+    ],
+    "includes": {
+        "include/all$5fa86b937f0502d92f776072cd49c002dca742b9.json": {
+            "sha1": "5fa86b937f0502d92f776072cd49c002dca742b9"
+        }
+    }
+}
diff --git a/vendor/composer/composer/doc/fixtures/repo-composer-with-providers/p/bar/baz$923363b3c22e73abb2e3fd891c8156dd4d0821a97fd3e428bc910833e3e46dbe.json b/vendor/composer/composer/doc/fixtures/repo-composer-with-providers/p/bar/baz$923363b3c22e73abb2e3fd891c8156dd4d0821a97fd3e428bc910833e3e46dbe.json
new file mode 100644
index 0000000..94a43b0
--- /dev/null
+++ b/vendor/composer/composer/doc/fixtures/repo-composer-with-providers/p/bar/baz$923363b3c22e73abb2e3fd891c8156dd4d0821a97fd3e428bc910833e3e46dbe.json
@@ -0,0 +1,50 @@
+{
+    "packages": {
+        "bar\/baz": {
+            "1.0.0": {
+                "name": "bar\/baz",
+                "version": "1.0.0",
+                "version_normalized": "1.0.0.0",
+                "source": {
+                    "type": "hg",
+                    "url": "http:\/\/some.where\/over\/the\/rainbow\/",
+                    "reference": "35810817c14d"
+                },
+                "time": "2014-10-13 12:04:55",
+                "type": "library",
+                "uid": 0
+            },
+            "1.0.x-dev": {
+                "name": "bar\/baz",
+                "version": "1.0.x-dev",
+                "version_normalized": "1.0.9999999.9999999-dev",
+                "source": {
+                    "type": "hg",
+                    "url": "http:\/\/some.where\/over\/the\/rainbow\/",
+                    "reference": "ffff9aae6ed5"
+                },
+                "time": "2014-10-13 12:05:37",
+                "type": "library",
+                "uid": 1
+            },
+            "dev-default": {
+                "name": "bar\/baz",
+                "version": "dev-default",
+                "version_normalized": "9999999-dev",
+                "source": {
+                    "type": "hg",
+                    "url": "http:\/\/some.where\/over\/the\/rainbow\/",
+                    "reference": "f317e556f2e2"
+                },
+                "time": "2014-10-13 12:06:45",
+                "type": "library",
+                "extra": {
+                    "branch-alias": {
+                        "dev-default": "1.1.x-dev"
+                    }
+                },
+                "uid": 2
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/vendor/composer/composer/doc/fixtures/repo-composer-with-providers/p/foo/bar$4baabb3303afa3e34a4d3af18fb138e5f3b79029c1f8d9ab5b477ea15776ba0a.json b/vendor/composer/composer/doc/fixtures/repo-composer-with-providers/p/foo/bar$4baabb3303afa3e34a4d3af18fb138e5f3b79029c1f8d9ab5b477ea15776ba0a.json
new file mode 100644
index 0000000..7dc7cc9
--- /dev/null
+++ b/vendor/composer/composer/doc/fixtures/repo-composer-with-providers/p/foo/bar$4baabb3303afa3e34a4d3af18fb138e5f3b79029c1f8d9ab5b477ea15776ba0a.json
@@ -0,0 +1,77 @@
+{
+    "packages": {
+        "foo\/bar": {
+            "1.0.0": {
+                "name": "foo\/bar",
+                "version": "1.0.0",
+                "version_normalized": "1.0.0.0",
+                "source": {
+                    "type": "hg",
+                    "url": "http:\/\/some.where\/over\/the\/rainbow\/",
+                    "reference": "249dec95a52a"
+                },
+                "time": "2014-10-11 15:42:00",
+                "type": "library",
+                "uid": 3
+            },
+            "1.0.1": {
+                "name": "foo\/bar",
+                "version": "1.0.1",
+                "version_normalized": "1.0.1.0",
+                "source": {
+                    "type": "hg",
+                    "url": "http:\/\/some.where\/over\/the\/rainbow\/",
+                    "reference": "21e3328295d4"
+                },
+                "time": "2014-10-11 15:45:56",
+                "type": "library",
+                "uid": 4
+            },
+            "1.0.x-dev": {
+                "name": "foo\/bar",
+                "version": "1.0.x-dev",
+                "version_normalized": "1.0.9999999.9999999-dev",
+                "source": {
+                    "type": "hg",
+                    "url": "http:\/\/some.where\/over\/the\/rainbow\/",
+                    "reference": "14dc17c8e860"
+                },
+                "time": "2014-10-11 15:45:59",
+                "type": "library",
+                "uid": 5
+            },
+            "1.1.0": {
+                "name": "foo\/bar",
+                "version": "1.1.0",
+                "version_normalized": "1.1.0.0",
+                "source": {
+                    "type": "hg",
+                    "url": "http:\/\/some.where\/over\/the\/rainbow\/",
+                    "reference": "d2fa3e69ad5b"
+                },
+                "require": {
+                    "bar\/baz": "~1.0"
+                },
+                "time": "2014-10-11 15:43:16",
+                "type": "library",
+                "uid": 6
+            },
+            "dev-default": {
+                "name": "foo\/bar",
+                "version": "dev-default",
+                "version_normalized": "9999999-dev",
+                "source": {
+                    "type": "hg",
+                    "url": "http:\/\/some.where\/over\/the\/rainbow\/",
+                    "reference": "8e5a5c224336"
+                },
+                "require": {
+                    "bar\/baz": "~1.0"
+                },
+                "time": "2014-10-11 15:43:18",
+                "type": "library",
+                "uid": 7
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/vendor/composer/composer/doc/fixtures/repo-composer-with-providers/p/gar/nix$5d210670cb46c8364c8e3fb449967b9bea558b971e5b082f330ae4f1d484c321.json b/vendor/composer/composer/doc/fixtures/repo-composer-with-providers/p/gar/nix$5d210670cb46c8364c8e3fb449967b9bea558b971e5b082f330ae4f1d484c321.json
new file mode 100644
index 0000000..512b8d8
--- /dev/null
+++ b/vendor/composer/composer/doc/fixtures/repo-composer-with-providers/p/gar/nix$5d210670cb46c8364c8e3fb449967b9bea558b971e5b082f330ae4f1d484c321.json
@@ -0,0 +1,50 @@
+{
+    "packages": {
+        "qux\/quux": {
+            "dev-default": {
+                "name": "qux\/quux",
+                "version": "dev-default",
+                "version_normalized": "9999999-dev",
+                "source": {
+                    "type": "hg",
+                    "url": "http:\/\/some.where\/over\/the\/rainbow\/",
+                    "reference": "4a10a567baa5"
+                },
+                "replace": {
+                    "gar\/nix": "1.0.*"
+                },
+                "time": "2014-10-11 15:48:15",
+                "type": "library",
+                "uid": 10
+            }
+        },
+        "gar\/nix": {
+            "1.0.0": {
+                "name": "gar\/nix",
+                "version": "1.0.0",
+                "version_normalized": "1.0.0.0",
+                "source": {
+                    "type": "hg",
+                    "url": "http:\/\/some.where\/over\/the\/rainbow\/",
+                    "reference": "44977145d64e"
+                },
+                "time": "2014-10-13 12:03:33",
+                "type": "library",
+                "uid": 8
+            },
+            "dev-default": {
+                "name": "gar\/nix",
+                "version": "dev-default",
+                "version_normalized": "9999999-dev",
+                "source": {
+                    "type": "hg",
+                    "url": "http:\/\/some.where\/over\/the\/rainbow\/",
+                    "reference": "51cca95a31c2"
+                },
+                "time": "2014-10-13 12:03:35",
+                "type": "library",
+                "uid": 9
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/vendor/composer/composer/doc/fixtures/repo-composer-with-providers/p/provider-active$1893a061e579543822389ecd12d791c612db0c05e22d90e9286e233cacd86ed8.json b/vendor/composer/composer/doc/fixtures/repo-composer-with-providers/p/provider-active$1893a061e579543822389ecd12d791c612db0c05e22d90e9286e233cacd86ed8.json
new file mode 100644
index 0000000..b82eb41
--- /dev/null
+++ b/vendor/composer/composer/doc/fixtures/repo-composer-with-providers/p/provider-active$1893a061e579543822389ecd12d791c612db0c05e22d90e9286e233cacd86ed8.json
@@ -0,0 +1,16 @@
+{
+    "providers": {
+        "bar\/baz": {
+            "sha256": "923363b3c22e73abb2e3fd891c8156dd4d0821a97fd3e428bc910833e3e46dbe"
+        },
+        "foo\/bar": {
+            "sha256": "4baabb3303afa3e34a4d3af18fb138e5f3b79029c1f8d9ab5b477ea15776ba0a"
+        },
+        "gar\/nix": {
+            "sha256": "5d210670cb46c8364c8e3fb449967b9bea558b971e5b082f330ae4f1d484c321"
+        },
+        "qux\/quux": {
+            "sha256": "c142d1a07ca354be46b613f59f1d601923a5a00ccc5fcce50a77ecdd461eb72d"
+        }
+    }
+}
\ No newline at end of file
diff --git a/vendor/composer/composer/doc/fixtures/repo-composer-with-providers/p/qux/quux$c142d1a07ca354be46b613f59f1d601923a5a00ccc5fcce50a77ecdd461eb72d.json b/vendor/composer/composer/doc/fixtures/repo-composer-with-providers/p/qux/quux$c142d1a07ca354be46b613f59f1d601923a5a00ccc5fcce50a77ecdd461eb72d.json
new file mode 100644
index 0000000..0141872
--- /dev/null
+++ b/vendor/composer/composer/doc/fixtures/repo-composer-with-providers/p/qux/quux$c142d1a07ca354be46b613f59f1d601923a5a00ccc5fcce50a77ecdd461eb72d.json
@@ -0,0 +1,22 @@
+{
+    "packages": {
+        "qux\/quux": {
+            "dev-default": {
+                "name": "qux\/quux",
+                "version": "dev-default",
+                "version_normalized": "9999999-dev",
+                "source": {
+                    "type": "hg",
+                    "url": "http:\/\/some.where\/over\/the\/rainbow\/",
+                    "reference": "4a10a567baa5"
+                },
+                "replace": {
+                    "gar\/nix": "1.0.*"
+                },
+                "time": "2014-10-11 15:48:15",
+                "type": "library",
+                "uid": 10
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/vendor/composer/composer/doc/fixtures/repo-composer-with-providers/packages.json b/vendor/composer/composer/doc/fixtures/repo-composer-with-providers/packages.json
new file mode 100644
index 0000000..65968a8
--- /dev/null
+++ b/vendor/composer/composer/doc/fixtures/repo-composer-with-providers/packages.json
@@ -0,0 +1,9 @@
+{
+    "packages": [],
+    "providers-url": "\/p\/%package%$%hash%.json",
+    "provider-includes": {
+        "p\/provider-active$1893a061e579543822389ecd12d791c612db0c05e22d90e9286e233cacd86ed8.json": {
+            "sha256": "1893a061e579543822389ecd12d791c612db0c05e22d90e9286e233cacd86ed8"
+        }
+    }
+}
\ No newline at end of file
diff --git a/vendor/composer/composer/res/composer-schema.json b/vendor/composer/composer/res/composer-schema.json
index 9623984..95cd199 100644
--- a/vendor/composer/composer/res/composer-schema.json
+++ b/vendor/composer/composer/res/composer-schema.json
@@ -39,7 +39,7 @@
         },
         "time": {
             "type": "string",
-            "description": "Package release date, in 'YYYY-MM-DD' or 'YYYY-MM-DD HH:MM:SS' format."
+            "description": "Package release date, in 'YYYY-MM-DD', 'YYYY-MM-DD HH:MM:SS' or 'YYYY-MM-DDTHH:MM:SSZ' format."
         },
         "license": {
             "type": ["string", "array"],
@@ -136,6 +136,15 @@
                     "description": "A hash of domain name => github API oauth tokens, typically {\"github.com\":\"<token>\"}.",
                     "additionalProperties": true
                 },
+                "http-basic": {
+                    "type": "object",
+                    "description": "A hash of domain name => {\"username\": \"...\", \"password\": \"...\"}.",
+                    "additionalProperties": true
+                },
+                "store-auths": {
+                    "type": ["string", "boolean"],
+                    "description": "What to do after prompting for authentication, one of: true (store), false (do not store) or \"prompt\" (ask every time), defaults to prompt."
+                },
                 "vendor-dir": {
                     "type": "string",
                     "description": "The location where all packages are installed, defaults to \"vendor\"."
@@ -180,6 +189,10 @@
                     "type": "string",
                     "description": "Optional string to be used as a suffix for the generated Composer autoloader. When null a random one will be generated."
                 },
+                "optimize-autoloader": {
+                    "type": "boolean",
+                    "description": "Always optimize when dumping the autoloader."
+                },
                 "prepend-autoloader": {
                     "type": "boolean",
                     "description": "If false, the composer autoloader will not be prepended to existing autoloaders, defaults to true."
@@ -190,6 +203,10 @@
                     "items": {
                         "type": "string"
                     }
+                },
+                "github-expose-hostname": {
+                    "type": "boolean",
+                    "description": "Defaults to true. If set to false, the OAuth tokens created to access the github API will have a date instead of the machine hostname."
                 }
             }
         },
@@ -222,6 +239,30 @@
                 }
             }
         },
+        "autoload-dev": {
+            "type": "object",
+            "description": "Description of additional autoload rules for development purpose (eg. a test suite).",
+            "properties": {
+                "psr-0": {
+                    "type": "object",
+                    "description": "This is a hash of namespaces (keys) and the directories they can be found into (values, can be arrays of paths) by the autoloader.",
+                    "additionalProperties": true
+                },
+                "psr-4": {
+                    "type": "object",
+                    "description": "This is a hash of namespaces (keys) and the PSR-4 directories they can map to (values, can be arrays of paths) by the autoloader.",
+                    "additionalProperties": true
+                },
+                "classmap": {
+                    "type": "array",
+                    "description": "This is an array of directories that contain classes to be included in the class-map generation process."
+                },
+                "files": {
+                    "type": "array",
+                    "description": "This is an array of files that are always required on every request."
+                }
+            }
+        },
         "archive": {
             "type": ["object"],
             "description": "Options for creating package archives for distribution.",
diff --git a/vendor/composer/composer/res/spdx-identifier.json b/vendor/composer/composer/res/spdx-identifier.json
index 8e47263..b6d8dbc 100644
--- a/vendor/composer/composer/res/spdx-identifier.json
+++ b/vendor/composer/composer/res/spdx-identifier.json
@@ -1,42 +1,59 @@
 [
-    "AFL-1.1", "AFL-1.2", "AFL-2.0", "AFL-2.1", "AFL-3.0", "APL-1.0", "Aladdin",
-    "ANTLR-PD", "Apache-1.0", "Apache-1.1", "Apache-2.0", "APSL-1.0",
-    "APSL-1.1", "APSL-1.2", "APSL-2.0", "Artistic-1.0", "Artistic-2.0", "AAL",
-    "BitTorrent-1.0", "BitTorrent-1.1", "BSL-1.0", "BSD-3-Clause-Clear",
-    "BSD-2-Clause", "BSD-2-Clause-FreeBSD", "BSD-2-Clause-NetBSD",
-    "BSD-3-Clause", "BSD-4-Clause", "BSD-4-Clause-UC", "CECILL-1.0",
-    "CECILL-1.1", "CECILL-2.0", "CECILL-B", "CECILL-C", "ClArtistic",
-    "CNRI-Python", "CNRI-Python-GPL-Compatible", "CDDL-1.0", "CDDL-1.1",
-    "CPAL-1.0", "CPL-1.0", "CATOSL-1.1", "Condor-1.1", "CC-BY-1.0", "CC-BY-2.0",
-    "CC-BY-2.5", "CC-BY-3.0", "CC-BY-ND-1.0", "CC-BY-ND-2.0", "CC-BY-ND-2.5",
-    "CC-BY-ND-3.0", "CC-BY-NC-1.0", "CC-BY-NC-2.0", "CC-BY-NC-2.5",
-    "CC-BY-NC-3.0", "CC-BY-NC-ND-1.0", "CC-BY-NC-ND-2.0", "CC-BY-NC-ND-2.5",
-    "CC-BY-NC-ND-3.0", "CC-BY-NC-SA-1.0", "CC-BY-NC-SA-2.0", "CC-BY-NC-SA-2.5",
-    "CC-BY-NC-SA-3.0", "CC-BY-SA-1.0", "CC-BY-SA-2.0", "CC-BY-SA-2.5",
-    "CC-BY-SA-3.0", "CC0-1.0", "CUA-OPL-1.0", "WTFPL", "EPL-1.0", "eCos-2.0",
-    "ECL-1.0", "ECL-2.0", "EFL-1.0", "EFL-2.0", "Entessa", "ErlPL-1.1",
-    "EUDatagrid", "EUPL-1.0", "EUPL-1.1", "Fair", "Frameworx-1.0", "FTL",
-    "AGPL-3.0", "GFDL-1.1", "GFDL-1.2", "GFDL-1.3", "GPL-1.0", "GPL-1.0+",
-    "GPL-2.0", "GPL-2.0+", "GPL-2.0-with-autoconf-exception",
+    "Glide", "Abstyles", "AFL-1.1", "AFL-1.2", "AFL-2.0", "AFL-2.1", "AFL-3.0",
+    "AMPAS", "APL-1.0", "Adobe-Glyph", "APAFML", "Adobe-2006", "AGPL-1.0",
+    "Afmparse", "Aladdin", "ADSL", "AMDPLPA", "ANTLR-PD", "Apache-1.0",
+    "Apache-1.1", "Apache-2.0", "AML", "APSL-1.0", "APSL-1.1", "APSL-1.2",
+    "APSL-2.0", "Artistic-1.0", "Artistic-1.0-Perl", "Artistic-1.0-cl8",
+    "Artistic-2.0", "AAL", "Bahyph", "Barr", "Beerware", "BitTorrent-1.0",
+    "BitTorrent-1.1", "BSL-1.0", "Borceux", "BSD-2-Clause",
+    "BSD-2-Clause-FreeBSD", "BSD-2-Clause-NetBSD", "BSD-3-Clause",
+    "BSD-3-Clause-Clear", "BSD-4-Clause", "BSD-Protection",
+    "BSD-3-Clause-Attribution", "BSD-4-Clause-UC", "bzip2-1.0.5", "bzip2-1.0.6",
+    "Caldera", "CECILL-1.0", "CECILL-1.1", "CECILL-2.0", "CECILL-B", "CECILL-C",
+    "ClArtistic", "MIT-CMU", "CNRI-Python", "CNRI-Python-GPL-Compatible",
+    "CPOL-1.02", "CDDL-1.0", "CDDL-1.1", "CPAL-1.0", "CPL-1.0", "CATOSL-1.1",
+    "Condor-1.1", "CC-BY-1.0", "CC-BY-2.0", "CC-BY-2.5", "CC-BY-3.0",
+    "CC-BY-4.0", "CC-BY-ND-1.0", "CC-BY-ND-2.0", "CC-BY-ND-2.5", "CC-BY-ND-3.0",
+    "CC-BY-ND-4.0", "CC-BY-NC-1.0", "CC-BY-NC-2.0", "CC-BY-NC-2.5",
+    "CC-BY-NC-3.0", "CC-BY-NC-4.0", "CC-BY-NC-ND-1.0", "CC-BY-NC-ND-2.0",
+    "CC-BY-NC-ND-2.5", "CC-BY-NC-ND-3.0", "CC-BY-NC-ND-4.0", "CC-BY-NC-SA-1.0",
+    "CC-BY-NC-SA-2.0", "CC-BY-NC-SA-2.5", "CC-BY-NC-SA-3.0", "CC-BY-NC-SA-4.0",
+    "CC-BY-SA-1.0", "CC-BY-SA-2.0", "CC-BY-SA-2.5", "CC-BY-SA-3.0",
+    "CC-BY-SA-4.0", "CC0-1.0", "Crossword", "CUA-OPL-1.0", "Cube", "D-FSL-1.0",
+    "diffmark", "WTFPL", "DOC", "Dotseqn", "DSDP", "dvipdfm", "EPL-1.0",
+    "eCos-2.0", "ECL-1.0", "ECL-2.0", "eGenix", "EFL-1.0", "EFL-2.0",
+    "MIT-advertising", "MIT-enna", "Entessa", "ErlPL-1.1", "EUDatagrid",
+    "EUPL-1.0", "EUPL-1.1", "Eurosym", "Fair", "MIT-feh", "Frameworx-1.0",
+    "FTL", "FSFUL", "FSFULLR", "Giftware", "GL2PS", "Glulxe", "AGPL-3.0",
+    "GFDL-1.1", "GFDL-1.2", "GFDL-1.3", "GPL-1.0", "GPL-1.0+", "GPL-2.0",
+    "GPL-2.0+", "GPL-2.0-with-autoconf-exception",
     "GPL-2.0-with-bison-exception", "GPL-2.0-with-classpath-exception",
     "GPL-2.0-with-font-exception", "GPL-2.0-with-GCC-exception", "GPL-3.0",
     "GPL-3.0+", "GPL-3.0-with-autoconf-exception", "GPL-3.0-with-GCC-exception",
     "LGPL-2.1", "LGPL-2.1+", "LGPL-3.0", "LGPL-3.0+", "LGPL-2.0", "LGPL-2.0+",
-    "gSOAP-1.3b", "HPND", "IPL-1.0", "Imlib2", "IJG", "Intel", "IPA", "ISC",
-    "JSON", "LPPL-1.3a", "LPPL-1.0", "LPPL-1.1", "LPPL-1.2", "LPPL-1.3c",
-    "Libpng", "LPL-1.02", "LPL-1.0", "MS-PL", "MS-RL", "MirOS", "MIT",
-    "Motosoto", "MPL-1.0", "MPL-1.1", "MPL-2.0",
-    "MPL-2.0-no-copyleft-exception", "Multics", "NASA-1.3", "Naumen",
-    "NBPL-1.0", "NGPL", "NOSL", "NPL-1.0", "NPL-1.1", "Nokia", "NPOSL-3.0",
-    "NTP", "OCLC-2.0", "ODbL-1.0", "PDDL-1.0", "OGTSL", "OLDAP-2.2.2",
+    "gnuplot", "gSOAP-1.3b", "HaskellReport", "HPND", "IBM-pibs", "IPL-1.0",
+    "ImageMagick", "iMatix", "Imlib2", "IJG", "Intel-ACPI", "Intel", "IPA",
+    "ISC", "JasPer-2.0", "JSON", "LPPL-1.3a", "LPPL-1.0", "LPPL-1.1",
+    "LPPL-1.2", "LPPL-1.3c", "Latex2e", "BSD-3-Clause-LBNL", "Leptonica",
+    "Libpng", "libtiff", "LPL-1.02", "LPL-1.0", "MakeIndex", "MTLL", "MS-PL",
+    "MS-RL", "MirOS", "MITNFA", "MIT", "Motosoto", "MPL-1.0", "MPL-1.1",
+    "MPL-2.0", "MPL-2.0-no-copyleft-exception", "mpich2", "Multics", "Mup",
+    "NASA-1.3", "Naumen", "NBPL-1.0", "NetCDF", "NGPL", "NOSL", "NPL-1.0",
+    "NPL-1.1", "Newsletr", "NLPL", "Nokia", "NPOSL-3.0", "Noweb", "NRL", "NTP",
+    "Nunit", "OCLC-2.0", "ODbL-1.0", "PDDL-1.0", "OGTSL", "OLDAP-2.2.2",
     "OLDAP-1.1", "OLDAP-1.2", "OLDAP-1.3", "OLDAP-1.4", "OLDAP-2.0",
     "OLDAP-2.0.1", "OLDAP-2.1", "OLDAP-2.2", "OLDAP-2.2.1", "OLDAP-2.3",
-    "OLDAP-2.4", "OLDAP-2.5", "OLDAP-2.6", "OLDAP-2.7", "OPL-1.0", "OSL-1.0",
-    "OSL-2.0", "OSL-2.1", "OSL-3.0", "OLDAP-2.8", "OpenSSL", "PHP-3.0",
-    "PHP-3.01", "PostgreSQL", "Python-2.0", "QPL-1.0", "RPSL-1.0", "RPL-1.5",
-    "RHeCos-1.1", "RSCPL", "Ruby", "SAX-PD", "SGI-B-1.0", "SGI-B-1.1",
-    "SGI-B-2.0", "OFL-1.0", "OFL-1.1", "SimPL-2.0", "Sleepycat", "SMLNJ",
-    "SugarCRM-1.1.3", "SISSL", "SPL-1.0", "Watcom-1.0", "NCSA", "VSL-1.0",
-    "W3C", "WXwindows", "Xnet", "X11", "XFree86-1.1", "YPL-1.0", "YPL-1.1",
-    "Zimbra-1.3", "Zlib", "ZPL-1.1", "ZPL-2.0", "ZPL-2.1"
-]
\ No newline at end of file
+    "OLDAP-2.4", "OLDAP-2.5", "OLDAP-2.6", "OLDAP-2.7", "OML", "OPL-1.0",
+    "OSL-1.0", "OSL-1.1", "OSL-2.0", "OSL-2.1", "OSL-3.0", "OLDAP-2.8",
+    "OpenSSL", "PHP-3.0", "PHP-3.01", "Plexus", "PostgreSQL", "psfrag",
+    "psutils", "Python-2.0", "QPL-1.0", "Qhull", "Rdisc", "RPSL-1.0", "RPL-1.1",
+    "RPL-1.5", "RHeCos-1.1", "RSCPL", "Ruby", "SAX-PD", "Saxpath", "SCEA",
+    "SWL", "SGI-B-1.0", "SGI-B-1.1", "SGI-B-2.0", "OFL-1.0", "OFL-1.1",
+    "SimPL-2.0", "Sleepycat", "SNIA", "SMLNJ", "StandardML-NJ",
+    "SugarCRM-1.1.3", "SISSL", "SISSL-1.2", "SPL-1.0", "Watcom-1.0", "TCL",
+    "Unlicense", "TMate", "TORQUE-1.1", "TOSL", "Unicode-TOU", "NCSA", "Vim",
+    "VOSTROM", "VSL-1.0", "W3C", "Wsuipa", "WXwindows", "Xnet", "X11", "Xerox",
+    "XFree86-1.1", "xinetd", "xpp", "XSkat", "YPL-1.0", "YPL-1.1", "Zed",
+    "Zend-2.0", "Zimbra-1.3", "Zlib", "zlib-acknowledgement", "ZPL-1.1",
+    "ZPL-2.0", "ZPL-2.1"
+]
diff --git a/vendor/composer/composer/src/Composer/Autoload/AutoloadGenerator.php b/vendor/composer/composer/src/Composer/Autoload/AutoloadGenerator.php
index 2359265..19f194f 100644
--- a/vendor/composer/composer/src/Composer/Autoload/AutoloadGenerator.php
+++ b/vendor/composer/composer/src/Composer/Autoload/AutoloadGenerator.php
@@ -15,6 +15,7 @@ namespace Composer\Autoload;
 use Composer\Config;
 use Composer\EventDispatcher\EventDispatcher;
 use Composer\Installer\InstallationManager;
+use Composer\IO\IOInterface;
 use Composer\Package\AliasPackage;
 use Composer\Package\PackageInterface;
 use Composer\Repository\InstalledRepositoryInterface;
@@ -32,14 +33,29 @@ class AutoloadGenerator
      */
     private $eventDispatcher;
 
-    public function __construct(EventDispatcher $eventDispatcher)
+    /**
+     * @var IOInterface
+     */
+    private $io;
+
+    private $devMode = false;
+
+    public function __construct(EventDispatcher $eventDispatcher, IOInterface $io = null)
     {
         $this->eventDispatcher = $eventDispatcher;
+        $this->io = $io;
+    }
+
+    public function setDevMode($devMode = true)
+    {
+        $this->devMode = (boolean) $devMode;
     }
 
     public function dump(Config $config, InstalledRepositoryInterface $localRepo, PackageInterface $mainPackage, InstallationManager $installationManager, $targetDir, $scanPsr0Packages = false, $suffix = '')
     {
-        $this->eventDispatcher->dispatchScript(ScriptEvents::PRE_AUTOLOAD_DUMP);
+        $this->eventDispatcher->dispatchScript(ScriptEvents::PRE_AUTOLOAD_DUMP, $this->devMode, array(), array(
+            'optimize' => (bool) $scanPsr0Packages,
+        ));
 
         $filesystem = new Filesystem();
         $filesystem->ensureDirectoryExists($config->get('vendor-dir'));
@@ -168,14 +184,14 @@ EOF;
                         $whitelist = sprintf(
                             '{%s/%s.+(?<!(?<!/)Test\.php)$}',
                             preg_quote($dir),
-                            ($psrType === 'psr-4' || strpos($namespace, '_') === false) ? preg_quote(strtr($namespace, '\\', '/')) : ''
+                            ($psrType === 'psr-0' && strpos($namespace, '_') === false) ? preg_quote(strtr($namespace, '\\', '/')) : ''
                         );
-                        foreach (ClassMapGenerator::createMap($dir, $whitelist) as $class => $path) {
-                            if ('' === $namespace || 0 === strpos($class, $namespace)) {
-                                if (!isset($classMap[$class])) {
-                                    $path = $this->getPathCode($filesystem, $basePath, $vendorPath, $path);
-                                    $classMap[$class] = $path.",\n";
-                                }
+
+                        $namespaceFilter = $namespace === '' ? null : $namespace;
+                        foreach (ClassMapGenerator::createMap($dir, $whitelist, $this->io, $namespaceFilter) as $class => $path) {
+                            if (!isset($classMap[$class])) {
+                                $path = $this->getPathCode($filesystem, $basePath, $vendorPath, $path);
+                                $classMap[$class] = $path.",\n";
                             }
                         }
                     }
@@ -183,9 +199,8 @@ EOF;
             }
         }
 
-        $autoloads['classmap'] = new \RecursiveIteratorIterator(new \RecursiveArrayIterator($autoloads['classmap']));
         foreach ($autoloads['classmap'] as $dir) {
-            foreach (ClassMapGenerator::createMap($dir) as $class => $path) {
+            foreach (ClassMapGenerator::createMap($dir, null, $this->io) as $class => $path) {
                 $path = $this->getPathCode($filesystem, $basePath, $vendorPath, $path);
                 $classMap[$class] = $path.",\n";
             }
@@ -222,7 +237,9 @@ EOF;
         fclose($targetLoader);
         unset($sourceLoader, $targetLoader);
 
-        $this->eventDispatcher->dispatchScript(ScriptEvents::POST_AUTOLOAD_DUMP);
+        $this->eventDispatcher->dispatchScript(ScriptEvents::POST_AUTOLOAD_DUMP, $this->devMode, array(), array(
+            'optimize' => (bool) $scanPsr0Packages,
+        ));
     }
 
     public function buildPackageMap(InstallationManager $installationManager, PackageInterface $mainPackage, array $packages)
@@ -238,7 +255,7 @@ EOF;
 
             $packageMap[] = array(
                 $package,
-                $installationManager->getInstallPath($package)
+                $installationManager->getInstallPath($package),
             );
         }
 
@@ -360,7 +377,6 @@ EOF;
     protected function getIncludeFilesFile(array $files, Filesystem $filesystem, $basePath, $vendorPath, $vendorPathCode, $appBaseDirCode)
     {
         $filesCode = '';
-        $files = new \RecursiveIteratorIterator(new \RecursiveArrayIterator($files));
         foreach ($files as $functionFile) {
             $filesCode .= '    '.$this->getPathCode($filesystem, $basePath, $vendorPath, $functionFile).",\n";
         }
@@ -462,9 +478,6 @@ class ComposerAutoloaderInit$suffix
         self::\$loader = \$loader = new \\Composer\\Autoload\\ClassLoader();
         spl_autoload_unregister(array('ComposerAutoloaderInit$suffix', 'loadClassLoader'));
 
-        \$vendorDir = $vendorPathCode;
-        \$baseDir = $appBaseDirCode;
-
 
 HEADER;
 
@@ -520,7 +533,6 @@ INCLUDEPATH;
 
 
 REGISTER_AUTOLOAD;
-
         }
 
         $file .= <<<REGISTER_LOADER
@@ -530,15 +542,14 @@ REGISTER_AUTOLOAD;
 REGISTER_LOADER;
 
         if ($useIncludeFiles) {
-            $file .= <<<'INCLUDE_FILES'
-        $includeFiles = require __DIR__ . '/autoload_files.php';
-        foreach ($includeFiles as $file) {
-            require $file;
+            $file .= <<<INCLUDE_FILES
+        \$includeFiles = require __DIR__ . '/autoload_files.php';
+        foreach (\$includeFiles as \$file) {
+            composerRequire$suffix(\$file);
         }
 
 
 INCLUDE_FILES;
-
         }
 
         $file .= <<<METHOD_FOOTER
@@ -552,8 +563,12 @@ METHOD_FOOTER;
         return $file . <<<FOOTER
 }
 
-FOOTER;
+function composerRequire$suffix(\$file)
+{
+    require \$file;
+}
 
+FOOTER;
     }
 
     protected function parseAutoloadsType(array $packageMap, $type, PackageInterface $mainPackage)
@@ -564,6 +579,9 @@ FOOTER;
             list($package, $installPath) = $item;
 
             $autoload = $package->getAutoload();
+            if ($this->devMode && $package === $mainPackage) {
+                $autoload = array_merge_recursive($autoload, $package->getDevAutoload());
+            }
 
             // skip misconfigured packages
             if (!isset($autoload[$type]) || !is_array($autoload[$type])) {
@@ -575,33 +593,25 @@ FOOTER;
 
             foreach ($autoload[$type] as $namespace => $paths) {
                 foreach ((array) $paths as $path) {
-                    // remove target-dir from file paths of the root package
-                    if ($type === 'files' && $package === $mainPackage && $package->getTargetDir() && !is_readable($installPath.'/'.$path)) {
-                        $targetDir = str_replace('\\<dirsep\\>', '[\\\\/]', preg_quote(str_replace(array('/', '\\'), '<dirsep>', $package->getTargetDir())));
-                        $path = ltrim(preg_replace('{^'.$targetDir.'}', '', ltrim($path, '\\/')), '\\/');
-                    }
-
-                    // add target-dir from file paths that don't have it
-                    if ($type === 'files' && $package !== $mainPackage && $package->getTargetDir() && !is_readable($installPath.'/'.$path)) {
-                        $path = $package->getTargetDir() . '/' . $path;
+                    if (($type === 'files' || $type === 'classmap') && $package->getTargetDir() && !is_readable($installPath.'/'.$path)) {
+                        // remove target-dir from file paths of the root package
+                        if ($package === $mainPackage) {
+                            $targetDir = str_replace('\\<dirsep\\>', '[\\\\/]', preg_quote(str_replace(array('/', '\\'), '<dirsep>', $package->getTargetDir())));
+                            $path = ltrim(preg_replace('{^'.$targetDir.'}', '', ltrim($path, '\\/')), '\\/');
+                        } else {
+                            // add target-dir from file paths that don't have it
+                            $path = $package->getTargetDir() . '/' . $path;
+                        }
                     }
 
-                    // remove target-dir from classmap entries of the root package
-                    if ($type === 'classmap' && $package === $mainPackage && $package->getTargetDir() && !is_readable($installPath.'/'.$path)) {
-                        $targetDir = str_replace('\\<dirsep\\>', '[\\\\/]', preg_quote(str_replace(array('/', '\\'), '<dirsep>', $package->getTargetDir())));
-                        $path = ltrim(preg_replace('{^'.$targetDir.'}', '', ltrim($path, '\\/')), '\\/');
-                    }
+                    $relativePath = empty($installPath) ? (empty($path) ? '.' : $path) : $installPath.'/'.$path;
 
-                    // add target-dir to classmap entries that don't have it
-                    if ($type === 'classmap' && $package !== $mainPackage && $package->getTargetDir() && !is_readable($installPath.'/'.$path)) {
-                        $path = $package->getTargetDir() . '/' . $path;
+                    if ($type === 'files' || $type === 'classmap') {
+                        $autoloads[] = $relativePath;
+                        continue;
                     }
 
-                    if (empty($installPath)) {
-                        $autoloads[$namespace][] = empty($path) ? '.' : $path;
-                    } else {
-                        $autoloads[$namespace][] = $installPath.'/'.$path;
-                    }
+                    $autoloads[$namespace][] = $relativePath;
                 }
             }
         }
@@ -609,47 +619,93 @@ FOOTER;
         return $autoloads;
     }
 
+    /**
+     * Sorts packages by dependency weight
+     *
+     * Packages of equal weight retain the original order
+     *
+     * @param  array $packageMap
+     * @return array
+     */
     protected function sortPackageMap(array $packageMap)
     {
-        $positions = array();
-        $names = array();
-        $indexes = array();
-
-        foreach ($packageMap as $position => $item) {
-            $mainName = $item[0]->getName();
-            $names = array_merge(array_fill_keys($item[0]->getNames(), $mainName), $names);
-            $names[$mainName] = $mainName;
-            $indexes[$mainName] = $positions[$mainName] = $position;
-        }
+        $packages = array();
+        $paths = array();
+        $usageList = array();
 
         foreach ($packageMap as $item) {
-            $position = $positions[$item[0]->getName()];
-            foreach (array_merge($item[0]->getRequires(), $item[0]->getDevRequires()) as $link) {
+            list($package, $path) = $item;
+            $name = $package->getName();
+            $packages[$name] = $package;
+            $paths[$name] = $path;
+
+            foreach (array_merge($package->getRequires(), $package->getDevRequires()) as $link) {
                 $target = $link->getTarget();
-                if (!isset($names[$target])) {
-                    continue;
-                }
+                $usageList[$target][] = $name;
+            }
+        }
 
-                $target = $names[$target];
-                if ($positions[$target] <= $position) {
-                    continue;
-                }
+        $computing = array();
+        $computed = array();
+        $computeImportance = function ($name) use (&$computeImportance, &$computing, &$computed, $usageList) {
+            // reusing computed importance
+            if (isset($computed[$name])) {
+                return $computed[$name];
+            }
 
-                foreach ($positions as $key => $value) {
-                    if ($value >= $position) {
-                        break;
-                    }
-                    $positions[$key]--;
-                }
+            // canceling circular dependency
+            if (isset($computing[$name])) {
+                return 0;
+            }
+
+            $computing[$name] = true;
+            $weight = 0;
 
-                $positions[$target] = $position - 1;
+            if (isset($usageList[$name])) {
+                foreach ($usageList[$name] as $user) {
+                    $weight -= 1 - $computeImportance($user);
+                }
             }
-            asort($positions);
+
+            unset($computing[$name]);
+            $computed[$name] = $weight;
+
+            return $weight;
+        };
+
+        $weightList = array();
+
+        foreach ($packages as $name => $package) {
+            $weight = $computeImportance($name);
+            $weightList[$name] = $weight;
         }
 
+        $stable_sort = function (&$array) {
+            static $transform, $restore;
+
+            $i = 0;
+
+            if (!$transform) {
+                $transform = function (&$v, $k) use (&$i) {
+                    $v = array($v, ++$i, $k, $v);
+                };
+
+                $restore = function (&$v, $k) {
+                    $v = $v[3];
+                };
+            }
+
+            array_walk($array, $transform);
+            asort($array);
+            array_walk($array, $restore);
+        };
+
+        $stable_sort($weightList);
+
         $sortedPackageMap = array();
-        foreach (array_keys($positions) as $packageName) {
-            $sortedPackageMap[] = $packageMap[$indexes[$packageName]];
+
+        foreach (array_keys($weightList) as $name) {
+            $sortedPackageMap[] = array($packages[$name], $paths[$name]);
         }
 
         return $sortedPackageMap;
diff --git a/vendor/composer/composer/src/Composer/Autoload/ClassLoader.php b/vendor/composer/composer/src/Composer/Autoload/ClassLoader.php
index f438e31..70d78bc 100644
--- a/vendor/composer/composer/src/Composer/Autoload/ClassLoader.php
+++ b/vendor/composer/composer/src/Composer/Autoload/ClassLoader.php
@@ -56,7 +56,11 @@ class ClassLoader
 
     public function getPrefixes()
     {
-        return call_user_func_array('array_merge', $this->prefixesPsr0);
+        if (!empty($this->prefixesPsr0)) {
+            return call_user_func_array('array_merge', $this->prefixesPsr0);
+        }
+
+        return array();
     }
 
     public function getPrefixesPsr4()
@@ -143,6 +147,8 @@ class ClassLoader
      * @param string       $prefix  The prefix/namespace, with trailing '\\'
      * @param array|string $paths   The PSR-0 base directories
      * @param bool         $prepend Whether to prepend the directories
+     *
+     * @throws \InvalidArgumentException
      */
     public function addPsr4($prefix, $paths, $prepend = false)
     {
@@ -202,10 +208,13 @@ class ClassLoader
      * Registers a set of PSR-4 directories for a given namespace,
      * replacing any others previously set for this namespace.
      *
-     * @param string       $prefix  The prefix/namespace, with trailing '\\'
-     * @param array|string $paths   The PSR-4 base directories
+     * @param string       $prefix The prefix/namespace, with trailing '\\'
+     * @param array|string $paths  The PSR-4 base directories
+     *
+     * @throws \InvalidArgumentException
      */
-    public function setPsr4($prefix, $paths) {
+    public function setPsr4($prefix, $paths)
+    {
         if (!$prefix) {
             $this->fallbackDirsPsr4 = (array) $paths;
         } else {
@@ -266,7 +275,7 @@ class ClassLoader
     public function loadClass($class)
     {
         if ($file = $this->findFile($class)) {
-            include $file;
+            includeFile($file);
 
             return true;
         }
@@ -291,8 +300,25 @@ class ClassLoader
             return $this->classMap[$class];
         }
 
+        $file = $this->findFileWithExtension($class, '.php');
+
+        // Search for Hack files if we are running on HHVM
+        if ($file === null && defined('HHVM_VERSION')) {
+            $file = $this->findFileWithExtension($class, '.hh');
+        }
+
+        if ($file === null) {
+            // Remember that this class does not exist.
+            return $this->classMap[$class] = false;
+        }
+
+        return $file;
+    }
+
+    private function findFileWithExtension($class, $ext)
+    {
         // PSR-4 lookup
-        $logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . '.php';
+        $logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext;
 
         $first = $class[0];
         if (isset($this->prefixLengthsPsr4[$first])) {
@@ -321,7 +347,7 @@ class ClassLoader
                 . strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR);
         } else {
             // PEAR-like class name
-            $logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . '.php';
+            $logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext;
         }
 
         if (isset($this->prefixesPsr0[$first])) {
@@ -347,8 +373,15 @@ class ClassLoader
         if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) {
             return $file;
         }
-
-        // Remember that this class does not exist.
-        return $this->classMap[$class] = false;
     }
 }
+
+/**
+ * Scope isolated include.
+ *
+ * Prevents access to $this/self from included files.
+ */
+function includeFile($file)
+{
+    include $file;
+}
diff --git a/vendor/composer/composer/src/Composer/Autoload/ClassMapGenerator.php b/vendor/composer/composer/src/Composer/Autoload/ClassMapGenerator.php
index e9142c1..0f289bc 100644
--- a/vendor/composer/composer/src/Composer/Autoload/ClassMapGenerator.php
+++ b/vendor/composer/composer/src/Composer/Autoload/ClassMapGenerator.php
@@ -12,20 +12,23 @@
  */
 
 namespace Composer\Autoload;
+
 use Symfony\Component\Finder\Finder;
+use Composer\IO\IOInterface;
 
 /**
  * ClassMapGenerator
  *
  * @author Gyula Sallai <salla016@gmail.com>
+ * @author Jordi Boggiano <j.boggiano@seld.be>
  */
 class ClassMapGenerator
 {
     /**
      * Generate a class map file
      *
-     * @param Traversable $dirs Directories or a single path to search in
-     * @param string      $file The name of the class map file
+     * @param \Traversable $dirs Directories or a single path to search in
+     * @param string       $file The name of the class map file
      */
     public static function dump($dirs, $file)
     {
@@ -41,20 +44,22 @@ class ClassMapGenerator
     /**
      * Iterate over all files in the given directory searching for classes
      *
-     * @param Iterator|string $path      The path to search in or an iterator
-     * @param string          $whitelist Regex that matches against the file path
+     * @param \Iterator|string $path      The path to search in or an iterator
+     * @param string           $whitelist Regex that matches against the file path
+     * @param IOInterface      $io        IO object
+     * @param string           $namespace Optional namespace prefix to filter by
      *
      * @return array A class map array
      *
      * @throws \RuntimeException When the path is neither an existing file nor directory
      */
-    public static function createMap($path, $whitelist = null)
+    public static function createMap($path, $whitelist = null, IOInterface $io = null, $namespace = null)
     {
         if (is_string($path)) {
             if (is_file($path)) {
                 $path = array(new \SplFileInfo($path));
             } elseif (is_dir($path)) {
-                $path = Finder::create()->files()->followLinks()->name('/\.(php|inc)$/')->in($path);
+                $path = Finder::create()->files()->followLinks()->name('/\.(php|inc|hh)$/')->in($path);
             } else {
                 throw new \RuntimeException(
                     'Could not scan for classes inside "'.$path.
@@ -68,7 +73,7 @@ class ClassMapGenerator
         foreach ($path as $file) {
             $filePath = $file->getRealPath();
 
-            if (!in_array(pathinfo($filePath, PATHINFO_EXTENSION), array('php', 'inc'))) {
+            if (!in_array(pathinfo($filePath, PATHINFO_EXTENSION), array('php', 'inc', 'hh'))) {
                 continue;
             }
 
@@ -79,7 +84,19 @@ class ClassMapGenerator
             $classes = self::findClasses($filePath);
 
             foreach ($classes as $class) {
-                $map[$class] = $filePath;
+                // skip classes not within the given namespace prefix
+                if (null !== $namespace && 0 !== strpos($class, $namespace)) {
+                    continue;
+                }
+
+                if (!isset($map[$class])) {
+                    $map[$class] = $filePath;
+                } elseif ($io && $map[$class] !== $filePath && !preg_match('{/(test|fixture|example)s?/}i', strtr($map[$class].' '.$filePath, '\\', '/'))) {
+                    $io->write(
+                        '<warning>Warning: Ambiguous class resolution, "'.$class.'"'.
+                        ' was found in both "'.$map[$class].'" and "'.$filePath.'", the first will be used.</warning>'
+                    );
+                }
             }
         }
 
@@ -98,7 +115,15 @@ class ClassMapGenerator
         $traits = version_compare(PHP_VERSION, '5.4', '<') ? '' : '|trait';
 
         try {
-            $contents = php_strip_whitespace($path);
+            $contents = @php_strip_whitespace($path);
+            if (!$contents) {
+                if (!file_exists($path)) {
+                    throw new \Exception('File does not exist');
+                }
+                if (!is_readable($path)) {
+                    throw new \Exception('File is not readable');
+                }
+            }
         } catch (\Exception $e) {
             throw new \RuntimeException('Could not scan for classes inside '.$path.": \n".$e->getMessage(), 0, $e);
         }
@@ -109,12 +134,15 @@ class ClassMapGenerator
         }
 
         // strip heredocs/nowdocs
-        $contents = preg_replace('{<<<\'?(\w+)\'?(?:\r\n|\n|\r)(?:.*?)(?:\r\n|\n|\r)\\1(?=\r\n|\n|\r|;)}s', 'null', $contents);
+        $contents = preg_replace('{<<<\s*(\'?)(\w+)\\1(?:\r\n|\n|\r)(?:.*?)(?:\r\n|\n|\r)\\2(?=\r\n|\n|\r|;)}s', 'null', $contents);
         // strip strings
         $contents = preg_replace('{"[^"\\\\]*(\\\\.[^"\\\\]*)*"|\'[^\'\\\\]*(\\\\.[^\'\\\\]*)*\'}s', 'null', $contents);
         // strip leading non-php code if needed
         if (substr($contents, 0, 2) !== '<?') {
-            $contents = preg_replace('{^.+?<\?}s', '<?', $contents);
+            $contents = preg_replace('{^.+?<\?}s', '<?', $contents, 1, $replacements);
+            if ($replacements === 0) {
+                return array();
+            }
         }
         // strip non-php blocks in the file
         $contents = preg_replace('{\?>.+<\?}s', '?><?', $contents);
@@ -126,7 +154,7 @@ class ClassMapGenerator
 
         preg_match_all('{
             (?:
-                 \b(?<![\$:>])(?P<type>class|interface'.$traits.') \s+ (?P<name>[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*)
+                 \b(?<![\$:>])(?P<type>class|interface'.$traits.') \s+ (?P<name>[a-zA-Z_\x7f-\xff:][a-zA-Z0-9_\x7f-\xff:\-]*)
                | \b(?<![\$:>])(?P<ns>namespace) (?P<nsname>\s+[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*(?:\s*\\\\\s*[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*)*)? \s*[\{;]
             )
         }ix', $contents, $matches);
@@ -138,7 +166,12 @@ class ClassMapGenerator
             if (!empty($matches['ns'][$i])) {
                 $namespace = str_replace(array(' ', "\t", "\r", "\n"), '', $matches['nsname'][$i]) . '\\';
             } else {
-                $classes[] = ltrim($namespace . $matches['name'][$i], '\\');
+                $name = $matches['name'][$i];
+                if ($name[0] === ':') {
+                    // This is an XHP class, https://github.com/facebook/xhp
+                    $name = 'xhp'.substr(str_replace(array('-', ':'), array('_', '__'), $name), 1);
+                }
+                $classes[] = ltrim($namespace . $name, '\\');
             }
         }
 
diff --git a/vendor/composer/composer/src/Composer/Cache.php b/vendor/composer/composer/src/Composer/Cache.php
index 6bdf43d..7341f61 100644
--- a/vendor/composer/composer/src/Composer/Cache.php
+++ b/vendor/composer/composer/src/Composer/Cache.php
@@ -83,7 +83,28 @@ class Cache
                 $this->io->write('Writing '.$this->root . $file.' into cache');
             }
 
-            return file_put_contents($this->root . $file, $contents);
+            try {
+                return file_put_contents($this->root . $file, $contents);
+            } catch (\ErrorException $e) {
+                if (preg_match('{^file_put_contents\(\): Only ([0-9]+) of ([0-9]+) bytes written}', $e->getMessage(), $m)) {
+                    // Remove partial file.
+                    unlink($this->root . $file);
+
+                    $message = sprintf(
+                        '<warning>Writing %1$s into cache failed after %2$u of %3$u bytes written, only %4$u bytes of free space available</warning>',
+                        $this->root . $file,
+                        $m[1],
+                        $m[2],
+                        @disk_free_space($this->root . dirname($file))
+                    );
+
+                    $this->io->write($message);
+
+                    return false;
+                }
+
+                throw $e;
+            }
         }
 
         return false;
@@ -129,14 +150,14 @@ class Cache
 
     public function gcIsNecessary()
     {
-       return (!self::$cacheCollected && !mt_rand(0, 50));
+        return (!self::$cacheCollected && !mt_rand(0, 50));
     }
 
     public function remove($file)
     {
         $file = preg_replace('{[^'.$this->whitelist.']}i', '-', $file);
         if ($this->enabled && file_exists($this->root . $file)) {
-            return unlink($this->root . $file);
+            return $this->filesystem->unlink($this->root . $file);
         }
 
         return false;
@@ -144,28 +165,32 @@ class Cache
 
     public function gc($ttl, $maxSize)
     {
-        $expire = new \DateTime();
-        $expire->modify('-'.$ttl.' seconds');
+        if ($this->enabled) {
+            $expire = new \DateTime();
+            $expire->modify('-'.$ttl.' seconds');
 
-        $finder = $this->getFinder()->date('until '.$expire->format('Y-m-d H:i:s'));
-        foreach ($finder as $file) {
-            unlink($file->getRealPath());
-        }
+            $finder = $this->getFinder()->date('until '.$expire->format('Y-m-d H:i:s'));
+            foreach ($finder as $file) {
+                $this->filesystem->unlink($file->getPathname());
+            }
 
-        $totalSize = $this->filesystem->size($this->root);
-        if ($totalSize > $maxSize) {
-            $iterator = $this->getFinder()->sortByAccessedTime()->getIterator();
-            while ($totalSize > $maxSize && $iterator->valid()) {
-                $filepath = $iterator->current()->getRealPath();
-                $totalSize -= $this->filesystem->size($filepath);
-                unlink($filepath);
-                $iterator->next();
+            $totalSize = $this->filesystem->size($this->root);
+            if ($totalSize > $maxSize) {
+                $iterator = $this->getFinder()->sortByAccessedTime()->getIterator();
+                while ($totalSize > $maxSize && $iterator->valid()) {
+                    $filepath = $iterator->current()->getPathname();
+                    $totalSize -= $this->filesystem->size($filepath);
+                    $this->filesystem->unlink($filepath);
+                    $iterator->next();
+                }
             }
-        }
 
-        self::$cacheCollected = true;
+            self::$cacheCollected = true;
+
+            return true;
+        }
 
-        return true;
+        return false;
     }
 
     public function sha1($file)
diff --git a/vendor/composer/composer/src/Composer/Command/AboutCommand.php b/vendor/composer/composer/src/Composer/Command/AboutCommand.php
index da0fb7f..ead7604 100644
--- a/vendor/composer/composer/src/Composer/Command/AboutCommand.php
+++ b/vendor/composer/composer/src/Composer/Command/AboutCommand.php
@@ -40,6 +40,5 @@ EOT
 See http://getcomposer.org/ for more information.</comment>
 EOT
         );
-
     }
 }
diff --git a/vendor/composer/composer/src/Composer/Command/ArchiveCommand.php b/vendor/composer/composer/src/Composer/Command/ArchiveCommand.php
index 03e8600..913a56a 100644
--- a/vendor/composer/composer/src/Composer/Command/ArchiveCommand.php
+++ b/vendor/composer/composer/src/Composer/Command/ArchiveCommand.php
@@ -15,8 +15,11 @@ namespace Composer\Command;
 use Composer\Factory;
 use Composer\IO\IOInterface;
 use Composer\DependencyResolver\Pool;
-use Composer\Package\LinkConstraint\VersionConstraint;
 use Composer\Repository\CompositeRepository;
+use Composer\Script\ScriptEvents;
+use Composer\Plugin\CommandEvent;
+use Composer\Plugin\PluginEvents;
+use Composer\Package\Version\VersionParser;
 
 use Symfony\Component\Console\Input\InputArgument;
 use Symfony\Component\Console\Input\InputInterface;
@@ -37,7 +40,7 @@ class ArchiveCommand extends Command
             ->setDescription('Create an archive of this composer package')
             ->setDefinition(array(
                 new InputArgument('package', InputArgument::OPTIONAL, 'The package to archive instead of the current project'),
-                new InputArgument('version', InputArgument::OPTIONAL, 'The package version to archive'),
+                new InputArgument('version', InputArgument::OPTIONAL, 'A version constraint to find the package to archive'),
                 new InputOption('format', 'f', InputOption::VALUE_REQUIRED, 'Format of the resulting archive: tar or zip', 'tar'),
                 new InputOption('dir', false, InputOption::VALUE_REQUIRED, 'Write the archive to this directory', '.'),
             ))
@@ -55,13 +58,26 @@ EOT
 
     protected function execute(InputInterface $input, OutputInterface $output)
     {
-        return $this->archive(
+        $composer = $this->getComposer(false);
+        if ($composer) {
+            $commandEvent = new CommandEvent(PluginEvents::COMMAND, 'archive', $input, $output);
+            $composer->getEventDispatcher()->dispatch($commandEvent->getName(), $commandEvent);
+            $composer->getEventDispatcher()->dispatchScript(ScriptEvents::PRE_ARCHIVE_CMD);
+        }
+
+        $returnCode = $this->archive(
             $this->getIO(),
             $input->getArgument('package'),
             $input->getArgument('version'),
             $input->getOption('format'),
             $input->getOption('dir')
         );
+
+        if (0 === $returnCode && $composer) {
+            $composer->getEventDispatcher()->dispatchScript(ScriptEvents::POST_ARCHIVE_CMD);
+        }
+
+        return $returnCode;
     }
 
     protected function archive(IOInterface $io, $packageName = null, $version = null, $format = 'tar', $dest = '.')
@@ -103,16 +119,17 @@ EOT
         $pool = new Pool();
         $pool->addRepository($repos);
 
-        $constraint = ($version) ? new VersionConstraint('>=', $version) : null;
-        $packages = $pool->whatProvides($packageName, $constraint);
+        $parser = new VersionParser();
+        $constraint = ($version) ? $parser->parseConstraints($version) : null;
+        $packages = $pool->whatProvides($packageName, $constraint, true);
 
         if (count($packages) > 1) {
-            $package = $packages[0];
+            $package = reset($packages);
             $io->write('<info>Found multiple matches, selected '.$package->getPrettyString().'.</info>');
             $io->write('Alternatives were '.implode(', ', array_map(function ($p) { return $p->getPrettyString(); }, $packages)).'.');
             $io->write('<comment>Please use a more specific constraint to pick a different package.</comment>');
         } elseif ($packages) {
-            $package = $packages[0];
+            $package = reset($packages);
             $io->write('<info>Found an exact match '.$package->getPrettyString().'.</info>');
         } else {
             $io->write('<error>Could not find a package matching '.$packageName.'.</error>');
diff --git a/vendor/composer/composer/src/Composer/Command/ClearCacheCommand.php b/vendor/composer/composer/src/Composer/Command/ClearCacheCommand.php
new file mode 100644
index 0000000..b1b9ecd
--- /dev/null
+++ b/vendor/composer/composer/src/Composer/Command/ClearCacheCommand.php
@@ -0,0 +1,71 @@
+<?php
+
+/*
+ * This file is part of Composer.
+ *
+ * (c) Nils Adermann <naderman@naderman.de>
+ *     Jordi Boggiano <j.boggiano@seld.be>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Composer\Command;
+
+use Composer\Cache;
+use Composer\Factory;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Output\OutputInterface;
+
+/**
+ * @author David Neilsen <petah.p@gmail.com>
+ */
+class ClearCacheCommand extends Command
+{
+    protected function configure()
+    {
+        $this
+            ->setName('clear-cache')
+            ->setAliases(array('clearcache'))
+            ->setDescription('Clears composer\'s internal package cache.')
+            ->setHelp(<<<EOT
+The <info>clear-cache</info> deletes all cached packages from composer's
+cache directory.
+EOT
+            )
+        ;
+    }
+
+    protected function execute(InputInterface $input, OutputInterface $output)
+    {
+        $config = Factory::createConfig();
+        $io = $this->getIO();
+
+        $cachePaths = array(
+            'cache-dir' => $config->get('cache-dir'),
+            'cache-files-dir' => $config->get('cache-files-dir'),
+            'cache-repo-dir' => $config->get('cache-repo-dir'),
+            'cache-vcs-dir' => $config->get('cache-vcs-dir'),
+        );
+
+        foreach ($cachePaths as $key => $cachePath) {
+            $cachePath = realpath($cachePath);
+            if (!$cachePath) {
+                $io->write("<info>Cache directory does not exist ($key): $cachePath</info>");
+
+                return;
+            }
+            $cache = new Cache($io, $cachePath);
+            if (!$cache->isEnabled()) {
+                $io->write("<info>Cache is not enabled ($key): $cachePath</info>");
+
+                return;
+            }
+
+            $io->write("<info>Clearing cache ($key): $cachePath</info>");
+            $cache->gc(0, 0);
+        }
+
+        $io->write('<info>All caches cleared.</info>');
+    }
+}
diff --git a/vendor/composer/composer/src/Composer/Command/Command.php b/vendor/composer/composer/src/Composer/Command/Command.php
index 862b54e..b996862 100644
--- a/vendor/composer/composer/src/Composer/Command/Command.php
+++ b/vendor/composer/composer/src/Composer/Command/Command.php
@@ -69,6 +69,15 @@ abstract class Command extends BaseCommand
     }
 
     /**
+     * Removes the cached composer instance
+     */
+    public function resetComposer()
+    {
+        $this->composer = null;
+        $this->getApplication()->resetComposer();
+    }
+
+    /**
      * @return IOInterface
      */
     public function getIO()
diff --git a/vendor/composer/composer/src/Composer/Command/ConfigCommand.php b/vendor/composer/composer/src/Composer/Command/ConfigCommand.php
index 629cb7f..a08a6f4 100644
--- a/vendor/composer/composer/src/Composer/Command/ConfigCommand.php
+++ b/vendor/composer/composer/src/Composer/Command/ConfigCommand.php
@@ -53,6 +53,7 @@ class ConfigCommand extends Command
             ->setDefinition(array(
                 new InputOption('global', 'g', InputOption::VALUE_NONE, 'Apply command to the global config file'),
                 new InputOption('editor', 'e', InputOption::VALUE_NONE, 'Open editor'),
+                new InputOption('auth', 'a', InputOption::VALUE_NONE, 'Affect auth config file (only used for --editor)'),
                 new InputOption('unset', null, InputOption::VALUE_NONE, 'Unset the given setting-key'),
                 new InputOption('list', 'l', InputOption::VALUE_NONE, 'List configuration settings'),
                 new InputOption('file', 'f', InputOption::VALUE_REQUIRED, 'If you want to choose a different composer.json or config.json', 'composer.json'),
@@ -102,7 +103,7 @@ EOT
             throw new \RuntimeException('--file and --global can not be combined');
         }
 
-        $this->config = Factory::createConfig();
+        $this->config = Factory::createConfig($this->getIO());
 
         // Get the local composer.json, global config.json, or if the user
         // passed in a file to use
@@ -113,12 +114,24 @@ EOT
         $this->configFile = new JsonFile($configFile);
         $this->configSource = new JsonConfigSource($this->configFile);
 
+        $authConfigFile = $input->getOption('global')
+            ? ($this->config->get('home') . '/auth.json')
+            : dirname(realpath($input->getOption('file'))) . '/auth.json';
+
+        $this->authConfigFile = new JsonFile($authConfigFile);
+        $this->authConfigSource = new JsonConfigSource($this->authConfigFile, true);
+
         // initialize the global file if it's not there
         if ($input->getOption('global') && !$this->configFile->exists()) {
             touch($this->configFile->getPath());
             $this->configFile->write(array('config' => new \ArrayObject));
             @chmod($this->configFile->getPath(), 0600);
         }
+        if ($input->getOption('global') && !$this->authConfigFile->exists()) {
+            touch($this->authConfigFile->getPath());
+            $this->authConfigFile->write(array('http-basic' => new \ArrayObject, 'github-oauth' => new \ArrayObject));
+            @chmod($this->authConfigFile->getPath(), 0600);
+        }
 
         if (!$this->configFile->exists()) {
             throw new \RuntimeException('No composer.json found in the current directory');
@@ -132,7 +145,7 @@ EOT
     {
         // Open file in editor
         if ($input->getOption('editor')) {
-            $editor = getenv('EDITOR');
+            $editor = escapeshellcmd(getenv('EDITOR'));
             if (!$editor) {
                 if (defined('PHP_WINDOWS_VERSION_BUILD')) {
                     $editor = 'notepad';
@@ -146,13 +159,15 @@ EOT
                 }
             }
 
-            system($editor . ' ' . $this->configFile->getPath() . (defined('PHP_WINDOWS_VERSION_BUILD') ? '':  ' > `tty`'));
+            $file = $input->getOption('auth') ? $this->authConfigFile->getPath() : $this->configFile->getPath();
+            system($editor . ' ' . $file . (defined('PHP_WINDOWS_VERSION_BUILD') ? '' : ' > `tty`'));
 
             return 0;
         }
 
         if (!$input->getOption('global')) {
             $this->config->merge($this->configFile->read());
+            $this->config->merge(array('config' => $this->authConfigFile->exists() ? $this->authConfigFile->read() : array()));
         }
 
         // List the configuration of the file settings
@@ -236,16 +251,29 @@ EOT
         }
 
         // handle github-oauth
-        if (preg_match('/^github-oauth\.(.+)/', $settingKey, $matches)) {
+        if (preg_match('/^(github-oauth|http-basic)\.(.+)/', $settingKey, $matches)) {
             if ($input->getOption('unset')) {
-                return $this->configSource->removeConfigSetting('github-oauth.'.$matches[1]);
+                $this->authConfigSource->removeConfigSetting($matches[1].'.'.$matches[2]);
+                $this->configSource->removeConfigSetting($matches[1].'.'.$matches[2]);
+
+                return;
             }
 
-            if (1 !== count($values)) {
-                throw new \RuntimeException('Too many arguments, expected only one token');
+            if ($matches[1] === 'github-oauth') {
+                if (1 !== count($values)) {
+                    throw new \RuntimeException('Too many arguments, expected only one token');
+                }
+                $this->configSource->removeConfigSetting($matches[1].'.'.$matches[2]);
+                $this->authConfigSource->addConfigSetting($matches[1].'.'.$matches[2], $values[0]);
+            } elseif ($matches[1] === 'http-basic') {
+                if (2 !== count($values)) {
+                    throw new \RuntimeException('Expected two arguments (username, password), got '.count($values));
+                }
+                $this->configSource->removeConfigSetting($matches[1].'.'.$matches[2]);
+                $this->authConfigSource->addConfigSetting($matches[1].'.'.$matches[2], array('username' => $values[0], 'password' => $values[1]));
             }
 
-            return $this->configSource->addConfigSetting('github-oauth.'.$matches[1], $values[0]);
+            return;
         }
 
         $booleanValidator = function ($val) { return in_array($val, array('true', 'false', '1', '0'), true); };
@@ -259,6 +287,16 @@ EOT
                 function ($val) { return in_array($val, array('auto', 'source', 'dist'), true); },
                 function ($val) { return $val; }
             ),
+            'store-auths' => array(
+                function ($val) { return in_array($val, array('true', 'false', 'prompt'), true); },
+                function ($val) {
+                    if ('prompt' === $val) {
+                        return 'prompt';
+                    }
+
+                    return $val !== 'false' && (bool) $val;
+                }
+            ),
             'notify-on-install' => array($booleanValidator, $booleanNormalizer),
             'vendor-dir' => array('is_string', function ($val) { return $val; }),
             'bin-dir' => array('is_string', function ($val) { return $val; }),
@@ -283,7 +321,9 @@ EOT
                 }
             ),
             'autoloader-suffix' => array('is_string', function ($val) { return $val === 'null' ? null : $val; }),
+            'optimize-autoloader' => array($booleanValidator, $booleanNormalizer),
             'prepend-autoloader' => array($booleanValidator, $booleanNormalizer),
+            'github-expose-hostname' => array($booleanValidator, $booleanNormalizer),
         );
         $multiConfigValues = array(
             'github-protocols' => array(
@@ -293,8 +333,8 @@ EOT
                     }
 
                     foreach ($vals as $val) {
-                        if (!in_array($val, array('git', 'https'))) {
-                            return 'valid protocols include: git, https';
+                        if (!in_array($val, array('git', 'https', 'ssh'))) {
+                            return 'valid protocols include: git, https, ssh';
                         }
                     }
 
@@ -319,7 +359,7 @@ EOT
         );
 
         foreach ($uniqueConfigValues as $name => $callbacks) {
-             if ($settingKey === $name) {
+            if ($settingKey === $name) {
                 if ($input->getOption('unset')) {
                     return $this->configSource->removeConfigSetting($settingKey);
                 }
diff --git a/vendor/composer/composer/src/Composer/Command/CreateProjectCommand.php b/vendor/composer/composer/src/Composer/Command/CreateProjectCommand.php
index 5aab270..935370b 100644
--- a/vendor/composer/composer/src/Composer/Command/CreateProjectCommand.php
+++ b/vendor/composer/composer/src/Composer/Command/CreateProjectCommand.php
@@ -19,9 +19,9 @@ use Composer\Installer\ProjectInstaller;
 use Composer\Installer\InstallationManager;
 use Composer\IO\IOInterface;
 use Composer\Package\BasePackage;
-use Composer\Package\LinkConstraint\VersionConstraint;
 use Composer\DependencyResolver\Pool;
 use Composer\DependencyResolver\Operation\InstallOperation;
+use Composer\Package\Version\VersionSelector;
 use Composer\Repository\ComposerRepository;
 use Composer\Repository\CompositeRepository;
 use Composer\Repository\FilesystemRepository;
@@ -56,7 +56,7 @@ class CreateProjectCommand extends Command
             ->setDefinition(array(
                 new InputArgument('package', InputArgument::OPTIONAL, 'Package name to be installed'),
                 new InputArgument('directory', InputArgument::OPTIONAL, 'Directory where the files should be created'),
-                new InputArgument('version', InputArgument::OPTIONAL, 'Version, will defaults to latest'),
+                new InputArgument('version', InputArgument::OPTIONAL, 'Version, will default to latest'),
                 new InputOption('stability', 's', InputOption::VALUE_REQUIRED, 'Minimum-stability allowed (unless a version is specified).'),
                 new InputOption('prefer-source', null, InputOption::VALUE_NONE, 'Forces installation from package sources when possible, including VCS information.'),
                 new InputOption('prefer-dist', null, InputOption::VALUE_NONE, 'Forces installation from package dist even for dev versions.'),
@@ -102,22 +102,7 @@ EOT
 
         $preferSource = false;
         $preferDist = false;
-        switch ($config->get('preferred-install')) {
-            case 'source':
-                $preferSource = true;
-                break;
-            case 'dist':
-                $preferDist = true;
-                break;
-            case 'auto':
-            default:
-                // noop
-                break;
-        }
-        if ($input->getOption('prefer-source') || $input->getOption('prefer-dist')) {
-            $preferSource = $input->getOption('prefer-source');
-            $preferDist = $input->getOption('prefer-dist');
-        }
+        $this->updatePreferredOptions($config, $input, $preferSource, $preferDist);
 
         if ($input->getOption('no-custom-installers')) {
             $output->writeln('<warning>You are using the deprecated option "no-custom-installers". Use "no-plugins" instead.</warning>');
@@ -139,14 +124,18 @@ EOT
             $input->getOption('no-scripts'),
             $input->getOption('keep-vcs'),
             $input->getOption('no-progress'),
-            $input->getOption('no-install')
+            $input->getOption('no-install'),
+            $input
         );
     }
 
-    public function installProject(IOInterface $io, $config, $packageName, $directory = null, $packageVersion = null, $stability = 'stable', $preferSource = false, $preferDist = false, $installDevPackages = false, $repositoryUrl = null, $disablePlugins = false, $noScripts = false, $keepVcs = false, $noProgress = false, $noInstall = false)
+    public function installProject(IOInterface $io, Config $config, $packageName, $directory = null, $packageVersion = null, $stability = 'stable', $preferSource = false, $preferDist = false, $installDevPackages = false, $repositoryUrl = null, $disablePlugins = false, $noScripts = false, $keepVcs = false, $noProgress = false, $noInstall = false, InputInterface $input)
     {
         $oldCwd = getcwd();
 
+        // we need to manually load the configuration to pass the auth credentials to the io interface!
+        $io->loadConfiguration($config);
+
         if ($packageName !== null) {
             $installedFromVcs = $this->installRootPackage($io, $config, $packageName, $directory, $packageVersion, $stability, $preferSource, $preferDist, $installDevPackages, $repositoryUrl, $disablePlugins, $noScripts, $keepVcs, $noProgress);
         } else {
@@ -161,6 +150,9 @@ EOT
             $composer->getEventDispatcher()->dispatchCommandEvent(ScriptEvents::POST_ROOT_PACKAGE_INSTALL, $installDevPackages);
         }
 
+        $rootPackageConfig = $composer->getConfig();
+        $this->updatePreferredOptions($rootPackageConfig, $input, $preferSource, $preferDist);
+
         // install dependencies of the created project
         if ($noInstall === false) {
             $installer = Installer::create($io, $composer);
@@ -238,12 +230,12 @@ EOT
         return 0;
     }
 
-    protected function installRootPackage(IOInterface $io, $config, $packageName, $directory = null, $packageVersion = null, $stability = 'stable', $preferSource = false, $preferDist = false, $installDevPackages = false, $repositoryUrl = null, $disablePlugins = false, $noScripts = false, $keepVcs = false, $noProgress = false)
+    protected function installRootPackage(IOInterface $io, Config $config, $packageName, $directory = null, $packageVersion = null, $stability = 'stable', $preferSource = false, $preferDist = false, $installDevPackages = false, $repositoryUrl = null, $disablePlugins = false, $noScripts = false, $keepVcs = false, $noProgress = false)
     {
         if (null === $repositoryUrl) {
             $sourceRepo = new CompositeRepository(Factory::createDefaultRepositories($io, $config));
         } elseif ("json" === pathinfo($repositoryUrl, PATHINFO_EXTENSION)) {
-            $sourceRepo = new FilesystemRepository(new JsonFile($repositoryUrl, new RemoteFilesystem($io)));
+            $sourceRepo = new FilesystemRepository(new JsonFile($repositoryUrl, new RemoteFilesystem($io, $config)));
         } elseif (0 === strpos($repositoryUrl, 'http')) {
             $sourceRepo = new ComposerRepository(array('url' => $repositoryUrl), $io, $config);
         } else {
@@ -251,7 +243,6 @@ EOT
         }
 
         $parser = new VersionParser();
-        $candidates = array();
         $requirements = $parser->parseNameVersionPairs(array($packageName));
         $name = strtolower($requirements[0]['name']);
         if (!$packageVersion && isset($requirements[0]['version'])) {
@@ -275,15 +266,11 @@ EOT
         $pool = new Pool($stability);
         $pool->addRepository($sourceRepo);
 
-        $constraint = $packageVersion ? $parser->parseConstraints($packageVersion) : null;
-        $candidates = $pool->whatProvides($name, $constraint);
-        foreach ($candidates as $key => $candidate) {
-            if ($candidate->getName() !== $name) {
-                unset($candidates[$key]);
-            }
-        }
+        // find the latest version if there are multiple
+        $versionSelector = new VersionSelector($pool);
+        $package = $versionSelector->findBestCandidate($name, $packageVersion);
 
-        if (!$candidates) {
+        if (!$package) {
             throw new \InvalidArgumentException("Could not find package $name" . ($packageVersion ? " with version $packageVersion." : " with stability $stability."));
         }
 
@@ -292,15 +279,6 @@ EOT
             $directory = getcwd() . DIRECTORY_SEPARATOR . array_pop($parts);
         }
 
-        // select highest version if we have many
-        $package = reset($candidates);
-        foreach ($candidates as $candidate) {
-            if (version_compare($package->getVersion(), $candidate->getVersion(), '<')) {
-                $package = $candidate;
-            }
-        }
-        unset($candidates);
-
         $io->write('<info>Installing ' . $package->getName() . ' (' . VersionParser::formatVersion($package, false) . ')</info>');
 
         if ($disablePlugins) {
@@ -343,4 +321,34 @@ EOT
     {
         return new InstallationManager();
     }
+
+    /**
+     * Updated preferSource or preferDist based on the preferredInstall config option
+     * @param Config         $config
+     * @param InputInterface $input
+     * @param boolean        $preferSource
+     * @param boolean        $preferDist
+     */
+    protected function updatePreferredOptions(Config $config, InputInterface $input, &$preferSource, &$preferDist)
+    {
+        switch ($config->get('preferred-install')) {
+            case 'source':
+                $preferSource = true;
+                $preferDist = false;
+                break;
+            case 'dist':
+                $preferSource = false;
+                $preferDist = true;
+                break;
+            case 'auto':
+            default:
+                // noop
+                break;
+        }
+
+        if ($input->getOption('prefer-source') || $input->getOption('prefer-dist')) {
+            $preferSource = $input->getOption('prefer-source');
+            $preferDist = $input->getOption('prefer-dist');
+        }
+    }
 }
diff --git a/vendor/composer/composer/src/Composer/Command/DiagnoseCommand.php b/vendor/composer/composer/src/Composer/Command/DiagnoseCommand.php
index 445bcc1..92ccf92 100644
--- a/vendor/composer/composer/src/Composer/Command/DiagnoseCommand.php
+++ b/vendor/composer/composer/src/Composer/Command/DiagnoseCommand.php
@@ -48,7 +48,22 @@ EOT
 
     protected function execute(InputInterface $input, OutputInterface $output)
     {
-        $this->rfs = new RemoteFilesystem($this->getIO());
+        $composer = $this->getComposer(false);
+        if ($composer) {
+            $commandEvent = new CommandEvent(PluginEvents::COMMAND, 'diagnose', $input, $output);
+            $composer->getEventDispatcher()->dispatch($commandEvent->getName(), $commandEvent);
+
+            $output->write('Checking composer.json: ');
+            $this->outputResult($output, $this->checkComposerSchema());
+        }
+
+        if ($composer) {
+            $config = $composer->getConfig();
+        } else {
+            $config = Factory::createConfig();
+        }
+
+        $this->rfs = new RemoteFilesystem($this->getIO(), $config);
         $this->process = new ProcessExecutor($this->getIO());
 
         $output->write('Checking platform settings: ');
@@ -70,21 +85,6 @@ EOT
             $this->outputResult($output, $this->checkHttpsProxyFullUriRequestParam());
         }
 
-        $composer = $this->getComposer(false);
-        if ($composer) {
-            $commandEvent = new CommandEvent(PluginEvents::COMMAND, 'diagnose', $input, $output);
-            $composer->getEventDispatcher()->dispatch($commandEvent->getName(), $commandEvent);
-
-            $output->write('Checking composer.json: ');
-            $this->outputResult($output, $this->checkComposerSchema());
-        }
-
-        if ($composer) {
-            $config = $composer->getConfig();
-        } else {
-            $config = Factory::createConfig();
-        }
-
         if ($oauth = $config->get('github-oauth')) {
             foreach ($oauth as $domain => $token) {
                 $output->write('Checking '.$domain.' oauth access: ');
@@ -183,7 +183,7 @@ EOT
             try {
                 $this->rfs->getContents('packagist.org', $url, false, array('http' => array('request_fulluri' => false)));
             } catch (TransportException $e) {
-                return 'Unable to assert the situation, maybe packagist.org is down ('.$e->getMessage().')';
+                return 'Unable to assess the situation, maybe packagist.org is down ('.$e->getMessage().')';
             }
 
             return 'It seems there is a problem with your proxy server, try setting the "HTTP_PROXY_REQUEST_FULLURI" and "HTTPS_PROXY_REQUEST_FULLURI" environment variables to "false"';
@@ -207,12 +207,12 @@ EOT
 
         $url = 'https://api.github.com/repos/Seldaek/jsonlint/zipball/1.0.0';
         try {
-            $rfcResult = $this->rfs->getContents('api.github.com', $url, false);
+            $rfcResult = $this->rfs->getContents('github.com', $url, false);
         } catch (TransportException $e) {
             try {
-                $this->rfs->getContents('api.github.com', $url, false, array('http' => array('request_fulluri' => false)));
+                $this->rfs->getContents('github.com', $url, false, array('http' => array('request_fulluri' => false)));
             } catch (TransportException $e) {
-                return 'Unable to assert the situation, maybe github is down ('.$e->getMessage().')';
+                return 'Unable to assess the situation, maybe github is down ('.$e->getMessage().')';
             }
 
             return 'It seems there is a problem with your proxy server, try setting the "HTTPS_PROXY_REQUEST_FULLURI" environment variable to "false"';
@@ -255,7 +255,7 @@ EOT
         $latest = trim($this->rfs->getContents('getcomposer.org', $protocol . '://getcomposer.org/version', false));
 
         if (Composer::VERSION !== $latest && Composer::VERSION !== '@package_version@') {
-            return '<warning>Your are not running the latest version</warning>';
+            return '<warning>You are not running the latest version</warning>';
         }
 
         return true;
@@ -312,7 +312,7 @@ EOT
             $warnings['openssl'] = true;
         }
 
-        if (ini_get('apc.enable_cli')) {
+        if (!defined('HHVM_VERSION') && !extension_loaded('apcu') && ini_get('apc.enable_cli')) {
             $warnings['apc_cli'] = true;
         }
 
diff --git a/vendor/composer/composer/src/Composer/Command/DumpAutoloadCommand.php b/vendor/composer/composer/src/Composer/Command/DumpAutoloadCommand.php
index 3e15415..b30fbd1 100644
--- a/vendor/composer/composer/src/Composer/Command/DumpAutoloadCommand.php
+++ b/vendor/composer/composer/src/Composer/Command/DumpAutoloadCommand.php
@@ -30,7 +30,8 @@ class DumpAutoloadCommand extends Command
             ->setAliases(array('dumpautoload'))
             ->setDescription('Dumps the autoloader')
             ->setDefinition(array(
-                new InputOption('optimize', 'o', InputOption::VALUE_NONE, 'Optimizes PSR0 packages to be loaded with classmaps too, good for production.'),
+                new InputOption('optimize', 'o', InputOption::VALUE_NONE, 'Optimizes PSR0 and PSR4 packages to be loaded with classmaps too, good for production.'),
+                new InputOption('no-dev', null, InputOption::VALUE_NONE, 'Disables autoload-dev rules.'),
             ))
             ->setHelp(<<<EOT
 <info>php composer.phar dump-autoload</info>
@@ -41,8 +42,6 @@ EOT
 
     protected function execute(InputInterface $input, OutputInterface $output)
     {
-        $output->writeln('<info>Generating autoload files</info>');
-
         $composer = $this->getComposer();
 
         $commandEvent = new CommandEvent(PluginEvents::COMMAND, 'dump-autoload', $input, $output);
@@ -53,6 +52,16 @@ EOT
         $package = $composer->getPackage();
         $config = $composer->getConfig();
 
-        $composer->getAutoloadGenerator()->dump($config, $localRepo, $package, $installationManager, 'composer', $input->getOption('optimize'));
+        $optimize = $input->getOption('optimize') || $config->get('optimize-autoloader');
+
+        if ($optimize) {
+            $output->writeln('<info>Generating optimized autoload files</info>');
+        } else {
+            $output->writeln('<info>Generating autoload files</info>');
+        }
+
+        $generator = $composer->getAutoloadGenerator();
+        $generator->setDevMode(!$input->getOption('no-dev'));
+        $generator->dump($config, $localRepo, $package, $installationManager, 'composer', $optimize);
     }
 }
diff --git a/vendor/composer/composer/src/Composer/Command/HomeCommand.php b/vendor/composer/composer/src/Composer/Command/HomeCommand.php
new file mode 100644
index 0000000..5b0e322
--- /dev/null
+++ b/vendor/composer/composer/src/Composer/Command/HomeCommand.php
@@ -0,0 +1,160 @@
+<?php
+
+/*
+ * This file is part of Composer.
+ *
+ * (c) Nils Adermann <naderman@naderman.de>
+ *     Jordi Boggiano <j.boggiano@seld.be>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Composer\Command;
+
+use Composer\DependencyResolver\Pool;
+use Composer\Factory;
+use Composer\Package\CompletePackageInterface;
+use Composer\Repository\CompositeRepository;
+use Composer\Repository\RepositoryInterface;
+use Composer\Util\ProcessExecutor;
+use Symfony\Component\Console\Input\InputArgument;
+use Symfony\Component\Console\Input\InputOption;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Output\OutputInterface;
+
+/**
+ * @author Robert Schönthal <seroscho@googlemail.com>
+ */
+class HomeCommand extends Command
+{
+    /**
+     * {@inheritDoc}
+     */
+    protected function configure()
+    {
+        $this
+            ->setName('browse')
+            ->setAliases(array('home'))
+            ->setDescription('Opens the package\'s repository URL or homepage in your browser.')
+            ->setDefinition(array(
+                new InputArgument('packages', InputArgument::IS_ARRAY | InputArgument::REQUIRED, 'Package(s) to browse to.'),
+                new InputOption('homepage', 'H', InputOption::VALUE_NONE, 'Open the homepage instead of the repository URL.'),
+            ))
+            ->setHelp(<<<EOT
+The home command opens a package's repository URL or
+homepage in your default browser.
+
+To open the homepage by default, use -H or --homepage.
+EOT
+            );
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    protected function execute(InputInterface $input, OutputInterface $output)
+    {
+        $repo = $this->initializeRepo($input, $output);
+        $return = 0;
+
+        foreach ($input->getArgument('packages') as $packageName) {
+            $package = $this->getPackage($repo, $packageName);
+
+            if (!$package instanceof CompletePackageInterface) {
+                $return = 1;
+                $output->writeln('<warning>Package '.$packageName.' not found</warning>');
+
+                continue;
+            }
+
+            $support = $package->getSupport();
+            $url = isset($support['source']) ? $support['source'] : $package->getSourceUrl();
+            if (!$url || $input->getOption('homepage')) {
+                $url = $package->getHomepage();
+            }
+
+            if (!filter_var($url, FILTER_VALIDATE_URL)) {
+                $return = 1;
+                $output->writeln('<warning>'.($input->getOption('homepage') ? 'Invalid or missing homepage' : 'Invalid or missing repository URL').' for '.$packageName.'</warning>');
+
+                continue;
+            }
+
+            $this->openBrowser($url);
+        }
+
+        return $return;
+    }
+
+    /**
+     * finds a package by name
+     *
+     * @param  RepositoryInterface      $repos
+     * @param  string                   $name
+     * @return CompletePackageInterface
+     */
+    protected function getPackage(RepositoryInterface $repos, $name)
+    {
+        $name = strtolower($name);
+        $pool = new Pool('dev');
+        $pool->addRepository($repos);
+        $matches = $pool->whatProvides($name);
+
+        foreach ($matches as $index => $package) {
+            // skip providers/replacers
+            if ($package->getName() !== $name) {
+                unset($matches[$index]);
+                continue;
+            }
+
+            return $package;
+        }
+    }
+
+    /**
+     * opens a url in your system default browser
+     *
+     * @param string $url
+     */
+    private function openBrowser($url)
+    {
+        $url = ProcessExecutor::escape($url);
+
+        if (defined('PHP_WINDOWS_VERSION_MAJOR')) {
+            return passthru('start "web" explorer "' . $url . '"');
+        }
+
+        passthru('which xdg-open', $linux);
+        passthru('which open', $osx);
+
+        if (0 === $linux) {
+            passthru('xdg-open ' . $url);
+        } elseif (0 === $osx) {
+            passthru('open ' . $url);
+        } else {
+            $this->getIO()->write('no suitable browser opening command found, open yourself: ' . $url);
+        }
+    }
+
+    /**
+     * initializes the repo
+     *
+     * @param  InputInterface      $input
+     * @param  OutputInterface     $output
+     * @return CompositeRepository
+     */
+    private function initializeRepo(InputInterface $input, OutputInterface $output)
+    {
+        $composer = $this->getComposer(false);
+
+        if ($composer) {
+            $repo = new CompositeRepository($composer->getRepositoryManager()->getRepositories());
+        } else {
+            $defaultRepos = Factory::createDefaultRepositories($this->getIO());
+            $repo = new CompositeRepository($defaultRepos);
+        }
+
+        return $repo;
+    }
+}
diff --git a/vendor/composer/composer/src/Composer/Command/InitCommand.php b/vendor/composer/composer/src/Composer/Command/InitCommand.php
index a44546b..38dc2c4 100644
--- a/vendor/composer/composer/src/Composer/Command/InitCommand.php
+++ b/vendor/composer/composer/src/Composer/Command/InitCommand.php
@@ -12,12 +12,15 @@
 
 namespace Composer\Command;
 
+use Composer\DependencyResolver\Pool;
 use Composer\Json\JsonFile;
 use Composer\Factory;
 use Composer\Package\BasePackage;
+use Composer\Package\Version\VersionSelector;
 use Composer\Repository\CompositeRepository;
 use Composer\Repository\PlatformRepository;
 use Composer\Package\Version\VersionParser;
+use Composer\Util\ProcessExecutor;
 use Symfony\Component\Console\Input\InputInterface;
 use Symfony\Component\Console\Input\InputOption;
 use Symfony\Component\Console\Output\OutputInterface;
@@ -30,8 +33,10 @@ use Symfony\Component\Process\ExecutableFinder;
  */
 class InitCommand extends Command
 {
+    protected $repos;
+
     private $gitConfig;
-    private $repos;
+    private $pool;
 
     public function parseAuthorString($author)
     {
@@ -101,7 +106,7 @@ EOT
         }
 
         if (isset($options['require-dev'])) {
-            $options['require-dev'] = $this->formatRequirements($options['require-dev']) ;
+            $options['require-dev'] = $this->formatRequirements($options['require-dev']);
             if (array() === $options['require-dev']) {
                 $options['require-dev'] = new \stdClass;
             }
@@ -224,10 +229,7 @@ EOT
             $output,
             $dialog->getQuestion('Author', $author),
             function ($value) use ($self, $author) {
-                if (null === $value) {
-                    return $author;
-                }
-
+                $value = $value ?: $author;
                 $author = $self->parseAuthorString($value);
 
                 return sprintf('%s <%s>', $author['name'], $author['email']);
@@ -284,9 +286,11 @@ EOT
 
     protected function findPackages($name)
     {
-        $packages = array();
+        return $this->getRepos()->search($name);
+    }
 
-        // init repos
+    protected function getRepos()
+    {
         if (!$this->repos) {
             $this->repos = new CompositeRepository(array_merge(
                 array(new PlatformRepository),
@@ -294,7 +298,7 @@ EOT
             ));
         }
 
-        return $this->repos->search($name);
+        return $this->repos;
     }
 
     protected function determineRequirements(InputInterface $input, OutputInterface $output, $requires = array())
@@ -306,15 +310,17 @@ EOT
             $requires = $this->normalizeRequirements($requires);
             $result = array();
 
-            foreach ($requires as $key => $requirement) {
-                if (!isset($requirement['version']) && $input->isInteractive()) {
-                    $question = $dialog->getQuestion('Please provide a version constraint for the '.$requirement['name'].' requirement');
-                    if ($constraint = $dialog->ask($output, $question)) {
-                        $requirement['version'] = $constraint;
-                    }
-                }
+            foreach ($requires as $requirement) {
                 if (!isset($requirement['version'])) {
-                    throw new \InvalidArgumentException('The requirement '.$requirement['name'].' must contain a version constraint');
+                    // determine the best version automatically
+                    $version = $this->findBestVersionForPackage($input, $requirement['name']);
+                    $requirement['version'] = $version;
+
+                    $output->writeln(sprintf(
+                        'Using version <info>%s</info> for <info>%s</info>',
+                        $requirement['version'],
+                        $requirement['name']
+                    ));
                 }
 
                 $result[] = $requirement['name'] . ' ' . $requirement['version'];
@@ -327,17 +333,11 @@ EOT
             $matches = $this->findPackages($package);
 
             if (count($matches)) {
-                $output->writeln(array(
-                    '',
-                    sprintf('Found <info>%s</info> packages matching <info>%s</info>', count($matches), $package),
-                    ''
-                ));
-
                 $exactMatch = null;
                 $choices = array();
-                foreach ($matches as $position => $package) {
-                    $choices[] = sprintf(' <info>%5s</info> %s', "[$position]", $package['name']);
-                    if ($package['name'] === $package) {
+                foreach ($matches as $position => $foundPackage) {
+                    $choices[] = sprintf(' <info>%5s</info> %s', "[$position]", $foundPackage['name']);
+                    if ($foundPackage['name'] === $package) {
                         $exactMatch = true;
                         break;
                     }
@@ -345,6 +345,12 @@ EOT
 
                 // no match, prompt which to pick
                 if (!$exactMatch) {
+                    $output->writeln(array(
+                        '',
+                        sprintf('Found <info>%s</info> packages matching <info>%s</info>', count($matches), $package),
+                        ''
+                    ));
+
                     $output->writeln($choices);
                     $output->writeln('');
 
@@ -369,7 +375,7 @@ EOT
                     $package = $dialog->askAndValidate($output, $dialog->getQuestion('Enter package # to add, or the complete package name if it is not listed', false, ':'), $validator, 3);
                 }
 
-                // no constraint yet, prompt user
+                // no constraint yet, determine the best version automatically
                 if (false !== $package && false === strpos($package, ' ')) {
                     $validator = function ($input) {
                         $input = trim($input);
@@ -377,9 +383,20 @@ EOT
                         return $input ?: false;
                     };
 
-                    $constraint = $dialog->askAndValidate($output, $dialog->getQuestion('Enter the version constraint to require', false, ':'), $validator, 3);
+                    $constraint = $dialog->askAndValidate(
+                        $output,
+                        $dialog->getQuestion('Enter the version constraint to require (or leave blank to use the latest version)', false, ':'),
+                        $validator,
+                        3)
+                    ;
                     if (false === $constraint) {
-                        continue;
+                        $constraint = $this->findBestVersionForPackage($input, $package);
+
+                        $output->writeln(sprintf(
+                            'Using version <info>%s</info> for <info>%s</info>',
+                            $constraint,
+                            $package
+                        ));
                     }
 
                     $package .= ' '.$constraint;
@@ -419,7 +436,7 @@ EOT
         $finder = new ExecutableFinder();
         $gitBin = $finder->find('git');
 
-        $cmd = new Process(sprintf('%s config -l', escapeshellarg($gitBin)));
+        $cmd = new Process(sprintf('%s config -l', ProcessExecutor::escape($gitBin)));
         $cmd->run();
 
         if ($cmd->isSuccessful()) {
@@ -504,4 +521,57 @@ EOT
 
         return false !== filter_var($email, FILTER_VALIDATE_EMAIL);
     }
+
+    private function getPool(InputInterface $input)
+    {
+        if (!$this->pool) {
+            $this->pool = new Pool($this->getMinimumStability($input));
+            $this->pool->addRepository($this->getRepos());
+        }
+
+        return $this->pool;
+    }
+
+    private function getMinimumStability(InputInterface $input)
+    {
+        if ($input->hasOption('stability')) {
+            return $input->getOption('stability') ?: 'stable';
+        }
+
+        $file = Factory::getComposerFile();
+        if (is_file($file) && is_readable($file) && is_array($composer = json_decode(file_get_contents($file), true))) {
+            if (!empty($composer['minimum-stability'])) {
+                return $composer['minimum-stability'];
+            }
+        }
+
+        return 'stable';
+    }
+
+    /**
+     * Given a package name, this determines the best version to use in the require key.
+     *
+     * This returns a version with the ~ operator prefixed when possible.
+     *
+     * @param  InputInterface            $input
+     * @param  string                    $name
+     * @return string
+     * @throws \InvalidArgumentException
+     */
+    private function findBestVersionForPackage(InputInterface $input, $name)
+    {
+        // find the latest version allowed in this pool
+        $versionSelector = new VersionSelector($this->getPool($input));
+        $package = $versionSelector->findBestCandidate($name);
+
+        if (!$package) {
+            throw new \InvalidArgumentException(sprintf(
+                'Could not find package %s at any version for your minimum-stability (%s). Check the package spelling or your minimum-stability',
+                $name,
+                $this->getMinimumStability($input)
+            ));
+        }
+
+        return $versionSelector->findRecommendedRequireVersion($package);
+    }
 }
diff --git a/vendor/composer/composer/src/Composer/Command/InstallCommand.php b/vendor/composer/composer/src/Composer/Command/InstallCommand.php
index a163d5a..669c035 100644
--- a/vendor/composer/composer/src/Composer/Command/InstallCommand.php
+++ b/vendor/composer/composer/src/Composer/Command/InstallCommand.php
@@ -17,6 +17,7 @@ use Composer\Plugin\CommandEvent;
 use Composer\Plugin\PluginEvents;
 use Symfony\Component\Console\Input\InputInterface;
 use Symfony\Component\Console\Input\InputOption;
+use Symfony\Component\Console\Input\InputArgument;
 use Symfony\Component\Console\Output\OutputInterface;
 
 /**
@@ -43,7 +44,9 @@ class InstallCommand extends Command
                 new InputOption('no-scripts', null, InputOption::VALUE_NONE, 'Skips the execution of all scripts defined in composer.json file.'),
                 new InputOption('no-progress', null, InputOption::VALUE_NONE, 'Do not output download progress.'),
                 new InputOption('verbose', 'v|vv|vvv', InputOption::VALUE_NONE, 'Shows more details including new commits pulled in when updating packages.'),
-                new InputOption('optimize-autoloader', 'o', InputOption::VALUE_NONE, 'Optimize autoloader during autoloader dump')
+                new InputOption('optimize-autoloader', 'o', InputOption::VALUE_NONE, 'Optimize autoloader during autoloader dump'),
+                new InputOption('ignore-platform-reqs', null, InputOption::VALUE_NONE, 'Ignore platform requirements (php & ext- packages).'),
+                new InputArgument('packages', InputArgument::IS_ARRAY | InputArgument::OPTIONAL, 'Should not be provided, use composer require instead to add a given package to composer.json.'),
             ))
             ->setHelp(<<<EOT
 The <info>install</info> command reads the composer.lock file from
@@ -60,6 +63,12 @@ EOT
 
     protected function execute(InputInterface $input, OutputInterface $output)
     {
+        if ($args = $input->getArgument('packages')) {
+            $output->writeln('<error>Invalid argument '.implode(' ', $args).'. Use "composer require '.implode(' ', $args).'" instead to add packages to your composer.json.</error>');
+
+            return 1;
+        }
+
         if ($input->getOption('no-custom-installers')) {
             $output->writeln('<warning>You are using the deprecated option "no-custom-installers". Use "no-plugins" instead.</warning>');
             $input->setOption('no-plugins', true);
@@ -76,7 +85,10 @@ EOT
 
         $preferSource = false;
         $preferDist = false;
-        switch ($composer->getConfig()->get('preferred-install')) {
+
+        $config = $composer->getConfig();
+
+        switch ($config->get('preferred-install')) {
             case 'source':
                 $preferSource = true;
                 break;
@@ -93,6 +105,8 @@ EOT
             $preferDist = $input->getOption('prefer-dist');
         }
 
+        $optimize = $input->getOption('optimize-autoloader') || $config->get('optimize-autoloader');
+
         $install
             ->setDryRun($input->getOption('dry-run'))
             ->setVerbose($input->getOption('verbose'))
@@ -100,7 +114,8 @@ EOT
             ->setPreferDist($preferDist)
             ->setDevMode(!$input->getOption('no-dev'))
             ->setRunScripts(!$input->getOption('no-scripts'))
-            ->setOptimizeAutoloader($input->getOption('optimize-autoloader'))
+            ->setOptimizeAutoloader($optimize)
+            ->setIgnorePlatformRequirements($input->getOption('ignore-platform-reqs'))
         ;
 
         if ($input->getOption('no-plugins')) {
diff --git a/vendor/composer/composer/src/Composer/Command/RemoveCommand.php b/vendor/composer/composer/src/Composer/Command/RemoveCommand.php
new file mode 100755
index 0000000..c292a28
--- /dev/null
+++ b/vendor/composer/composer/src/Composer/Command/RemoveCommand.php
@@ -0,0 +1,120 @@
+<?php
+
+/*
+ * This file is part of Composer.
+ *
+ * (c) Nils Adermann <naderman@naderman.de>
+ *     Jordi Boggiano <j.boggiano@seld.be>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Composer\Command;
+
+use Composer\Config\JsonConfigSource;
+use Composer\Installer;
+use Composer\Plugin\CommandEvent;
+use Composer\Plugin\PluginEvents;
+use Composer\Json\JsonFile;
+use Composer\Factory;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Input\InputOption;
+use Symfony\Component\Console\Input\InputArgument;
+use Symfony\Component\Console\Output\OutputInterface;
+
+/**
+ * @author Pierre du Plessis <pdples@gmail.com>
+ * @author Jordi Boggiano <j.boggiano@seld.be>
+ */
+class RemoveCommand extends Command
+{
+    protected function configure()
+    {
+        $this
+            ->setName('remove')
+            ->setDescription('Removes a package from the require or require-dev')
+            ->setDefinition(array(
+                new InputArgument('packages', InputArgument::IS_ARRAY, 'Packages that should be removed.'),
+                new InputOption('dev', null, InputOption::VALUE_NONE, 'Removes a package from the require-dev section.'),
+                new InputOption('no-progress', null, InputOption::VALUE_NONE, 'Do not output download progress.'),
+                new InputOption('no-update', null, InputOption::VALUE_NONE, 'Disables the automatic update of the dependencies.'),
+                new InputOption('update-no-dev', null, InputOption::VALUE_NONE, 'Run the dependency update with the --no-dev option.'),
+                new InputOption('update-with-dependencies', null, InputOption::VALUE_NONE, 'Allows inherited dependencies to be updated with explicit dependencies.'),
+                new InputOption('ignore-platform-reqs', null, InputOption::VALUE_NONE, 'Ignore platform requirements (php & ext- packages).'),
+            ))
+            ->setHelp(<<<EOT
+The <info>remove</info> command removes a package from the current
+list of installed packages
+
+<info>php composer.phar remove</info>
+
+EOT
+            )
+        ;
+    }
+
+    protected function execute(InputInterface $input, OutputInterface $output)
+    {
+        $packages = $input->getArgument('packages');
+
+        $file = Factory::getComposerFile();
+
+        $jsonFile = new JsonFile($file);
+        $composer = $jsonFile->read();
+        $composerBackup = file_get_contents($jsonFile->getPath());
+
+        $json = new JsonConfigSource($jsonFile);
+
+        $type = $input->getOption('dev') ? 'require-dev' : 'require';
+        $altType = !$input->getOption('dev') ? 'require-dev' : 'require';
+
+        foreach ($packages as $package) {
+            if (isset($composer[$type][$package])) {
+                $json->removeLink($type, $package);
+            } elseif (isset($composer[$altType][$package])) {
+                $output->writeln('<warning>'.$package.' could not be found in '.$type.' but it is present in '.$altType.'</warning>');
+                $dialog = $this->getHelperSet()->get('dialog');
+                if ($this->getIO()->isInteractive()) {
+                    if ($dialog->askConfirmation($output, $dialog->getQuestion('Do you want to remove it from '.$altType, 'yes', '?'), true)) {
+                        $json->removeLink($altType, $package);
+                    }
+                }
+            } else {
+                $output->writeln('<warning>'.$package.' is not required in your composer.json and has not been removed</warning>');
+            }
+        }
+
+        if ($input->getOption('no-update')) {
+            return 0;
+        }
+
+        // Update packages
+        $composer = $this->getComposer();
+        $composer->getDownloadManager()->setOutputProgress(!$input->getOption('no-progress'));
+        $io = $this->getIO();
+
+        $commandEvent = new CommandEvent(PluginEvents::COMMAND, 'remove', $input, $output);
+        $composer->getEventDispatcher()->dispatch($commandEvent->getName(), $commandEvent);
+
+        $install = Installer::create($io, $composer);
+
+        $updateDevMode = !$input->getOption('update-no-dev');
+        $install
+            ->setVerbose($input->getOption('verbose'))
+            ->setDevMode($updateDevMode)
+            ->setUpdate(true)
+            ->setUpdateWhitelist($packages)
+            ->setWhitelistDependencies($input->getOption('update-with-dependencies'))
+            ->setIgnorePlatformRequirements($input->getOption('ignore-platform-reqs'))
+        ;
+
+        $status = $install->run();
+        if ($status !== 0) {
+            $output->writeln("\n".'<error>Removal failed, reverting '.$file.' to its original content.</error>');
+            file_put_contents($jsonFile->getPath(), $composerBackup);
+        }
+
+        return $status;
+    }
+}
diff --git a/vendor/composer/composer/src/Composer/Command/RequireCommand.php b/vendor/composer/composer/src/Composer/Command/RequireCommand.php
index f33c2fd..55e3752 100644
--- a/vendor/composer/composer/src/Composer/Command/RequireCommand.php
+++ b/vendor/composer/composer/src/Composer/Command/RequireCommand.php
@@ -23,6 +23,8 @@ use Composer\Json\JsonManipulator;
 use Composer\Package\Version\VersionParser;
 use Composer\Plugin\CommandEvent;
 use Composer\Plugin\PluginEvents;
+use Composer\Repository\CompositeRepository;
+use Composer\Repository\PlatformRepository;
 
 /**
  * @author Jérémy Romey <jeremy@free-agent.fr>
@@ -42,6 +44,9 @@ class RequireCommand extends InitCommand
                 new InputOption('prefer-dist', null, InputOption::VALUE_NONE, 'Forces installation from package dist even for dev versions.'),
                 new InputOption('no-progress', null, InputOption::VALUE_NONE, 'Do not output download progress.'),
                 new InputOption('no-update', null, InputOption::VALUE_NONE, 'Disables the automatic update of the dependencies.'),
+                new InputOption('update-no-dev', null, InputOption::VALUE_NONE, 'Run the dependency update with the --no-dev option.'),
+                new InputOption('update-with-dependencies', null, InputOption::VALUE_NONE, 'Allows inherited dependencies to be updated with explicit dependencies.'),
+                new InputOption('ignore-platform-reqs', null, InputOption::VALUE_NONE, 'Ignore platform requirements (php & ext- packages).'),
             ))
             ->setHelp(<<<EOT
 The require command adds required packages to your composer.json and installs them
@@ -57,6 +62,7 @@ EOT
     {
         $file = Factory::getComposerFile();
 
+        $newlyCreated = !file_exists($file);
         if (!file_exists($file) && !file_put_contents($file, "{\n}\n")) {
             $output->writeln('<error>'.$file.' could not be created.</error>');
 
@@ -74,13 +80,22 @@ EOT
         }
 
         $json = new JsonFile($file);
-        $composer = $json->read();
+        $composerDefinition = $json->read();
         $composerBackup = file_get_contents($json->getPath());
 
+        $composer = $this->getComposer();
+        $repos = $composer->getRepositoryManager()->getRepositories();
+
+        $this->repos = new CompositeRepository(array_merge(
+            array(new PlatformRepository),
+            $repos
+        ));
+
         $requirements = $this->determineRequirements($input, $output, $input->getArgument('packages'));
 
         $requireKey = $input->getOption('dev') ? 'require-dev' : 'require';
-        $baseRequirements = array_key_exists($requireKey, $composer) ? $composer[$requireKey] : array();
+        $removeKey = $input->getOption('dev') ? 'require' : 'require-dev';
+        $baseRequirements = array_key_exists($requireKey, $composerDefinition) ? $composerDefinition[$requireKey] : array();
         $requirements = $this->formatRequirements($requirements);
 
         // validate requirements format
@@ -89,22 +104,28 @@ EOT
             $versionParser->parseConstraints($constraint);
         }
 
-        if (!$this->updateFileCleanly($json, $baseRequirements, $requirements, $requireKey)) {
+        if (!$this->updateFileCleanly($json, $baseRequirements, $requirements, $requireKey, $removeKey)) {
             foreach ($requirements as $package => $version) {
                 $baseRequirements[$package] = $version;
+
+                if (isset($composerDefinition[$removeKey][$package])) {
+                    unset($composerDefinition[$removeKey][$package]);
+                }
             }
 
-            $composer[$requireKey] = $baseRequirements;
-            $json->write($composer);
+            $composerDefinition[$requireKey] = $baseRequirements;
+            $json->write($composerDefinition);
         }
 
-        $output->writeln('<info>'.$file.' has been updated</info>');
+        $output->writeln('<info>'.$file.' has been '.($newlyCreated ? 'created' : 'updated').'</info>');
 
         if ($input->getOption('no-update')) {
             return 0;
         }
+        $updateDevMode = !$input->getOption('update-no-dev');
 
         // Update packages
+        $this->resetComposer();
         $composer = $this->getComposer();
         $composer->getDownloadManager()->setOutputProgress(!$input->getOption('no-progress'));
         $io = $this->getIO();
@@ -118,21 +139,28 @@ EOT
             ->setVerbose($input->getOption('verbose'))
             ->setPreferSource($input->getOption('prefer-source'))
             ->setPreferDist($input->getOption('prefer-dist'))
-            ->setDevMode(true)
+            ->setDevMode($updateDevMode)
             ->setUpdate(true)
-            ->setUpdateWhitelist(array_keys($requirements));
+            ->setUpdateWhitelist(array_keys($requirements))
+            ->setWhitelistDependencies($input->getOption('update-with-dependencies'))
+            ->setIgnorePlatformRequirements($input->getOption('ignore-platform-reqs'))
         ;
 
         $status = $install->run();
         if ($status !== 0) {
-            $output->writeln("\n".'<error>Installation failed, reverting '.$file.' to its original content.</error>');
-            file_put_contents($json->getPath(), $composerBackup);
+            if ($newlyCreated) {
+                $output->writeln("\n".'<error>Installation failed, deleting '.$file.'.</error>');
+                unlink($json->getPath());
+            } else {
+                $output->writeln("\n".'<error>Installation failed, reverting '.$file.' to its original content.</error>');
+                file_put_contents($json->getPath(), $composerBackup);
+            }
         }
 
         return $status;
     }
 
-    private function updateFileCleanly($json, array $base, array $new, $requireKey)
+    private function updateFileCleanly($json, array $base, array $new, $requireKey, $removeKey)
     {
         $contents = file_get_contents($json->getPath());
 
@@ -142,6 +170,9 @@ EOT
             if (!$manipulator->addLink($requireKey, $package, $constraint)) {
                 return false;
             }
+            if (!$manipulator->removeSubNode($removeKey, $package)) {
+                return false;
+            }
         }
 
         file_put_contents($json->getPath(), $manipulator->getContents());
diff --git a/vendor/composer/composer/src/Composer/Command/RunScriptCommand.php b/vendor/composer/composer/src/Composer/Command/RunScriptCommand.php
index c4a3a35..f01a5fe 100644
--- a/vendor/composer/composer/src/Composer/Command/RunScriptCommand.php
+++ b/vendor/composer/composer/src/Composer/Command/RunScriptCommand.php
@@ -12,6 +12,7 @@
 
 namespace Composer\Command;
 
+use Composer\Script\CommandEvent;
 use Composer\Script\ScriptEvents;
 use Symfony\Component\Console\Input\InputInterface;
 use Symfony\Component\Console\Input\InputOption;
@@ -23,6 +24,30 @@ use Symfony\Component\Console\Output\OutputInterface;
  */
 class RunScriptCommand extends Command
 {
+    /**
+     * @var array Array with command events
+     */
+    protected $commandEvents = array(
+        ScriptEvents::PRE_INSTALL_CMD,
+        ScriptEvents::POST_INSTALL_CMD,
+        ScriptEvents::PRE_UPDATE_CMD,
+        ScriptEvents::POST_UPDATE_CMD,
+        ScriptEvents::PRE_STATUS_CMD,
+        ScriptEvents::POST_STATUS_CMD,
+        ScriptEvents::POST_ROOT_PACKAGE_INSTALL,
+        ScriptEvents::POST_CREATE_PROJECT_CMD
+    );
+
+    /**
+     * @var array Array with script events
+     */
+    protected $scriptEvents = array(
+        ScriptEvents::PRE_ARCHIVE_CMD,
+        ScriptEvents::POST_ARCHIVE_CMD,
+        ScriptEvents::PRE_AUTOLOAD_DUMP,
+        ScriptEvents::POST_AUTOLOAD_DUMP
+    );
+
     protected function configure()
     {
         $this
@@ -30,6 +55,7 @@ class RunScriptCommand extends Command
             ->setDescription('Run the scripts defined in composer.json.')
             ->setDefinition(array(
                 new InputArgument('script', InputArgument::REQUIRED, 'Script name to run.'),
+                new InputArgument('args', InputArgument::IS_ARRAY | InputArgument::OPTIONAL, ''),
                 new InputOption('dev', null, InputOption::VALUE_NONE, 'Sets the dev mode.'),
                 new InputOption('no-dev', null, InputOption::VALUE_NONE, 'Disables the dev mode.'),
             ))
@@ -45,21 +71,30 @@ EOT
     protected function execute(InputInterface $input, OutputInterface $output)
     {
         $script = $input->getArgument('script');
-        if (!in_array($script, array(
-            ScriptEvents::PRE_INSTALL_CMD,
-            ScriptEvents::POST_INSTALL_CMD,
-            ScriptEvents::PRE_UPDATE_CMD,
-            ScriptEvents::POST_UPDATE_CMD,
-            ScriptEvents::PRE_STATUS_CMD,
-            ScriptEvents::POST_STATUS_CMD,
-        ))) {
+        if (!in_array($script, $this->commandEvents) && !in_array($script, $this->scriptEvents)) {
             if (defined('Composer\Script\ScriptEvents::'.str_replace('-', '_', strtoupper($script)))) {
                 throw new \InvalidArgumentException(sprintf('Script "%s" cannot be run with this command', $script));
             }
+        }
+
+        $composer = $this->getComposer();
+        $hasListeners = $composer->getEventDispatcher()->hasEventListeners(new CommandEvent($script, $composer, $this->getIO()));
+        if (!$hasListeners) {
+            throw new \InvalidArgumentException(sprintf('Script "%s" is not defined in this package', $script));
+        }
+
+        // add the bin dir to the PATH to make local binaries of deps usable in scripts
+        $binDir = $composer->getConfig()->get('bin-dir');
+        if (is_dir($binDir)) {
+            putenv('PATH='.realpath($binDir).PATH_SEPARATOR.getenv('PATH'));
+        }
+
+        $args = $input->getArgument('args');
 
-            throw new \InvalidArgumentException(sprintf('Script "%s" does not exist', $script));
+        if (in_array($script, $this->commandEvents)) {
+            return $composer->getEventDispatcher()->dispatchCommandEvent($script, $input->getOption('dev') || !$input->getOption('no-dev'), $args);
         }
 
-        $this->getComposer()->getEventDispatcher()->dispatchCommandEvent($script, $input->getOption('dev') || !$input->getOption('no-dev'));
+        return $composer->getEventDispatcher()->dispatchScript($script, $input->getOption('dev') || !$input->getOption('no-dev'), $args);
     }
 }
diff --git a/vendor/composer/composer/src/Composer/Command/ScriptAliasCommand.php b/vendor/composer/composer/src/Composer/Command/ScriptAliasCommand.php
new file mode 100644
index 0000000..9586780
--- /dev/null
+++ b/vendor/composer/composer/src/Composer/Command/ScriptAliasCommand.php
@@ -0,0 +1,67 @@
+<?php
+
+/*
+ * This file is part of Composer.
+ *
+ * (c) Nils Adermann <naderman@naderman.de>
+ *     Jordi Boggiano <j.boggiano@seld.be>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Composer\Command;
+
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Input\InputOption;
+use Symfony\Component\Console\Input\InputArgument;
+use Symfony\Component\Console\Output\OutputInterface;
+
+/**
+ * @author Jordi Boggiano <j.boggiano@seld.be>
+ */
+class ScriptAliasCommand extends Command
+{
+    private $script;
+
+    public function __construct($script)
+    {
+        $this->script = $script;
+
+        parent::__construct();
+    }
+
+    protected function configure()
+    {
+        $this
+            ->setName($this->script)
+            ->setDescription('Run the '.$this->script.' script as defined in composer.json.')
+            ->setDefinition(array(
+                new InputOption('dev', null, InputOption::VALUE_NONE, 'Sets the dev mode.'),
+                new InputOption('no-dev', null, InputOption::VALUE_NONE, 'Disables the dev mode.'),
+                new InputArgument('args', InputArgument::IS_ARRAY | InputArgument::OPTIONAL, ''),
+            ))
+            ->setHelp(<<<EOT
+The <info>run-script</info> command runs scripts defined in composer.json:
+
+<info>php composer.phar run-script post-update-cmd</info>
+EOT
+            )
+        ;
+    }
+
+    protected function execute(InputInterface $input, OutputInterface $output)
+    {
+        $composer = $this->getComposer();
+
+        // add the bin dir to the PATH to make local binaries of deps usable in scripts
+        $binDir = $composer->getConfig()->get('bin-dir');
+        if (is_dir($binDir)) {
+            putenv('PATH='.realpath($binDir).PATH_SEPARATOR.getenv('PATH'));
+        }
+
+        $args = $input->getArguments();
+
+        return $composer->getEventDispatcher()->dispatchScript($this->script, $input->getOption('dev') || !$input->getOption('no-dev'), $args['args']);
+    }
+}
diff --git a/vendor/composer/composer/src/Composer/Command/SelfUpdateCommand.php b/vendor/composer/composer/src/Composer/Command/SelfUpdateCommand.php
index b683065..13abee3 100644
--- a/vendor/composer/composer/src/Composer/Command/SelfUpdateCommand.php
+++ b/vendor/composer/composer/src/Composer/Command/SelfUpdateCommand.php
@@ -21,6 +21,7 @@ use Symfony\Component\Console\Input\InputInterface;
 use Symfony\Component\Console\Input\InputOption;
 use Symfony\Component\Console\Input\InputArgument;
 use Symfony\Component\Console\Output\OutputInterface;
+use Symfony\Component\Finder\Finder;
 
 /**
  * @author Igor Wiedler <igor@wiedler.ch>
@@ -57,8 +58,8 @@ EOT
     protected function execute(InputInterface $input, OutputInterface $output)
     {
         $baseUrl = (extension_loaded('openssl') ? 'https' : 'http') . '://' . self::HOMEPAGE;
-        $remoteFilesystem = new RemoteFilesystem($this->getIO());
         $config = Factory::createConfig();
+        $remoteFilesystem = new RemoteFilesystem($this->getIO(), $config);
         $cacheDir = $config->get('cache-dir');
         $rollbackDir = $config->get('home');
         $localFilename = realpath($_SERVER['argv'][0]) ?: $_SERVER['argv'][0];
@@ -106,22 +107,20 @@ EOT
         $remoteFilename = $baseUrl . (preg_match('{^[0-9a-f]{40}$}', $updateVersion) ? '/composer.phar' : "/download/{$updateVersion}/composer.phar");
         $remoteFilesystem->copy(self::HOMEPAGE, $remoteFilename, $tempFilename);
         if (!file_exists($tempFilename)) {
-            $output->writeln('<error>The download of the new composer version failed for an unexpected reason');
+            $output->writeln('<error>The download of the new composer version failed for an unexpected reason</error>');
 
             return 1;
         }
 
         // remove saved installations of composer
         if ($input->getOption('clean-backups')) {
-            $files = $this->getOldInstallationFiles($rollbackDir);
+            $finder = $this->getOldInstallationFinder($rollbackDir);
 
-            if (!empty($files)) {
-                $fs = new Filesystem;
-
-                foreach ($files as $file) {
-                    $output->writeln('<info>Removing: '.$file);
-                    $fs->remove($file);
-                }
+            $fs = new Filesystem;
+            foreach ($finder as $file) {
+                $file = (string) $file;
+                $output->writeln('<info>Removing: '.$file.'</info>');
+                $fs->remove($file);
             }
         }
 
@@ -174,17 +173,18 @@ EOT
     {
         try {
             @chmod($newFilename, 0777 & ~umask());
-            // test the phar validity
-            $phar = new \Phar($newFilename);
-            // free the variable to unlock the file
-            unset($phar);
+            if (!ini_get('phar.readonly')) {
+                // test the phar validity
+                $phar = new \Phar($newFilename);
+                // free the variable to unlock the file
+                unset($phar);
+            }
 
             // copy current file into installations dir
             if ($backupTarget && file_exists($localFilename)) {
                 @copy($localFilename, $backupTarget);
             }
 
-            unset($phar);
             rename($newFilename, $localFilename);
         } catch (\Exception $e) {
             if ($backupTarget) {
@@ -200,18 +200,25 @@ EOT
 
     protected function getLastBackupVersion($rollbackDir)
     {
-        $files = $this->getOldInstallationFiles($rollbackDir);
-        if (empty($files)) {
-            return false;
-        }
+        $finder = $this->getOldInstallationFinder($rollbackDir);
+        $finder->sortByName();
+        $files = iterator_to_array($finder);
 
-        sort($files);
+        if (count($files)) {
+            return basename(end($files), self::OLD_INSTALL_EXT);
+        }
 
-        return basename(end($files), self::OLD_INSTALL_EXT);
+        return false;
     }
 
-    protected function getOldInstallationFiles($rollbackDir)
+    protected function getOldInstallationFinder($rollbackDir)
     {
-        return glob($rollbackDir . '/*' . self::OLD_INSTALL_EXT) ?: array();
+        $finder = Finder::create()
+            ->depth(0)
+            ->files()
+            ->name('*' . self::OLD_INSTALL_EXT)
+            ->in($rollbackDir);
+
+        return $finder;
     }
 }
diff --git a/vendor/composer/composer/src/Composer/Command/ShowCommand.php b/vendor/composer/composer/src/Composer/Command/ShowCommand.php
index 4b5b6ee..28ea810 100644
--- a/vendor/composer/composer/src/Composer/Command/ShowCommand.php
+++ b/vendor/composer/composer/src/Composer/Command/ShowCommand.php
@@ -50,6 +50,7 @@ class ShowCommand extends Command
                 new InputOption('available', 'a', InputOption::VALUE_NONE, 'List available packages only'),
                 new InputOption('self', 's', InputOption::VALUE_NONE, 'Show the root package information'),
                 new InputOption('name-only', 'N', InputOption::VALUE_NONE, 'List package names only'),
+                new InputOption('path', 'P', InputOption::VALUE_NONE, 'Show package paths'),
             ))
             ->setHelp(<<<EOT
 The show command displays detailed information about a package, or
@@ -193,8 +194,9 @@ EOT
                     $width--;
                 }
 
-                $writeVersion = !$input->getOption('name-only') && $showVersion && ($nameLength + $versionLength + 3 <= $width);
-                $writeDescription = !$input->getOption('name-only') && ($nameLength + ($showVersion ? $versionLength : 0) + 24 <= $width);
+                $writePath = !$input->getOption('name-only') && $input->getOption('path');
+                $writeVersion = !$input->getOption('name-only') && !$input->getOption('path') && $showVersion && ($nameLength + $versionLength + 3 <= $width);
+                $writeDescription = !$input->getOption('name-only') && !$input->getOption('path') && ($nameLength + ($showVersion ? $versionLength : 0) + 24 <= $width);
                 foreach ($packages[$type] as $package) {
                     if (is_object($package)) {
                         $output->write($indent . str_pad($package->getPrettyName(), $nameLength, ' '), false);
@@ -211,6 +213,11 @@ EOT
                             }
                             $output->write(' ' . $description);
                         }
+
+                        if ($writePath) {
+                            $path = strtok(realpath($composer->getInstallationManager()->getInstallPath($package)), "\r\n");
+                            $output->write(' ' . $path);
+                        }
                     } else {
                         $output->write($indent . $package);
                     }
@@ -287,6 +294,16 @@ EOT
         $output->writeln('<info>dist</info>     : ' . sprintf('[%s] <comment>%s</comment> %s', $package->getDistType(), $package->getDistUrl(), $package->getDistReference()));
         $output->writeln('<info>names</info>    : ' . implode(', ', $package->getNames()));
 
+        if ($package->isAbandoned()) {
+            $replacement = ($package->getReplacementPackage() !== null)
+                ? ' The author suggests using the ' . $package->getReplacementPackage(). ' package instead.'
+                : null;
+
+            $output->writeln(
+                sprintf('<error>Attention: This package is abandoned and no longer maintained.%s</error>', $replacement)
+            );
+        }
+
         if ($package->getSupport()) {
             $output->writeln("\n<info>support</info>");
             foreach ($package->getSupport() as $type => $value) {
diff --git a/vendor/composer/composer/src/Composer/Command/StatusCommand.php b/vendor/composer/composer/src/Composer/Command/StatusCommand.php
index a125bdd..65662c0 100644
--- a/vendor/composer/composer/src/Composer/Command/StatusCommand.php
+++ b/vendor/composer/composer/src/Composer/Command/StatusCommand.php
@@ -84,7 +84,7 @@ EOT
         foreach ($errors as $path => $changes) {
             if ($input->getOption('verbose')) {
                 $indentedChanges = implode("\n", array_map(function ($line) {
-                    return '    ' . $line;
+                    return '    ' . ltrim($line);
                 }, explode("\n", $changes)));
                 $output->writeln('<info>'.$path.'</info>:');
                 $output->writeln($indentedChanges);
diff --git a/vendor/composer/composer/src/Composer/Command/UpdateCommand.php b/vendor/composer/composer/src/Composer/Command/UpdateCommand.php
index 7a1471a..ebfd4cb 100644
--- a/vendor/composer/composer/src/Composer/Command/UpdateCommand.php
+++ b/vendor/composer/composer/src/Composer/Command/UpdateCommand.php
@@ -45,7 +45,8 @@ class UpdateCommand extends Command
                 new InputOption('no-progress', null, InputOption::VALUE_NONE, 'Do not output download progress.'),
                 new InputOption('with-dependencies', null, InputOption::VALUE_NONE, 'Add also all dependencies of whitelisted packages to the whitelist.'),
                 new InputOption('verbose', 'v|vv|vvv', InputOption::VALUE_NONE, 'Shows more details including new commits pulled in when updating packages.'),
-                new InputOption('optimize-autoloader', 'o', InputOption::VALUE_NONE, 'Optimize autoloader during autoloader dump.')
+                new InputOption('optimize-autoloader', 'o', InputOption::VALUE_NONE, 'Optimize autoloader during autoloader dump.'),
+                new InputOption('ignore-platform-reqs', null, InputOption::VALUE_NONE, 'Ignore platform requirements (php & ext- packages).'),
             ))
             ->setHelp(<<<EOT
 The <info>update</info> command reads the composer.json file from the
@@ -58,6 +59,11 @@ To limit the update operation to a few packages, you can list the package(s)
 you want to update as such:
 
 <info>php composer.phar update vendor/package1 foo/mypackage [...]</info>
+
+You may also use an asterisk (*) pattern to limit the update operation to package(s)
+from a specific vendor:
+
+<info>php composer.phar update vendor/package1 foo/* [...]</info>
 EOT
             )
         ;
@@ -81,7 +87,10 @@ EOT
 
         $preferSource = false;
         $preferDist = false;
-        switch ($composer->getConfig()->get('preferred-install')) {
+
+        $config = $composer->getConfig();
+
+        switch ($config->get('preferred-install')) {
             case 'source':
                 $preferSource = true;
                 break;
@@ -98,6 +107,8 @@ EOT
             $preferDist = $input->getOption('prefer-dist');
         }
 
+        $optimize = $input->getOption('optimize-autoloader') || $config->get('optimize-autoloader');
+
         $install
             ->setDryRun($input->getOption('dry-run'))
             ->setVerbose($input->getOption('verbose'))
@@ -105,10 +116,11 @@ EOT
             ->setPreferDist($preferDist)
             ->setDevMode(!$input->getOption('no-dev'))
             ->setRunScripts(!$input->getOption('no-scripts'))
-            ->setOptimizeAutoloader($input->getOption('optimize-autoloader'))
+            ->setOptimizeAutoloader($optimize)
             ->setUpdate(true)
             ->setUpdateWhitelist($input->getOption('lock') ? array('lock') : $input->getArgument('packages'))
             ->setWhitelistDependencies($input->getOption('with-dependencies'))
+            ->setIgnorePlatformRequirements($input->getOption('ignore-platform-reqs'))
         ;
 
         if ($input->getOption('no-plugins')) {
diff --git a/vendor/composer/composer/src/Composer/Command/ValidateCommand.php b/vendor/composer/composer/src/Composer/Command/ValidateCommand.php
index 38a5241..e7e0860 100644
--- a/vendor/composer/composer/src/Composer/Command/ValidateCommand.php
+++ b/vendor/composer/composer/src/Composer/Command/ValidateCommand.php
@@ -12,9 +12,11 @@
 
 namespace Composer\Command;
 
+use Composer\Package\Loader\ValidatingArrayLoader;
 use Composer\Util\ConfigValidator;
-use Symfony\Component\Console\Input\InputInterface;
 use Symfony\Component\Console\Input\InputArgument;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Input\InputOption;
 use Symfony\Component\Console\Output\OutputInterface;
 
 /**
@@ -34,6 +36,7 @@ class ValidateCommand extends Command
             ->setName('validate')
             ->setDescription('Validates a composer.json')
             ->setDefinition(array(
+                new InputOption('no-check-all', null, InputOption::VALUE_NONE, 'Do not make a complete validation'),
                 new InputArgument('file', InputArgument::OPTIONAL, 'path to composer.json file', './composer.json')
             ))
             ->setHelp(<<<EOT
@@ -65,7 +68,8 @@ EOT
         }
 
         $validator = new ConfigValidator($this->getIO());
-        list($errors, $publishErrors, $warnings) = $validator->validate($file);
+        $checkAll = $input->getOption('no-check-all') ? 0 : ValidatingArrayLoader::CHECK_ALL;
+        list($errors, $publishErrors, $warnings) = $validator->validate($file, $checkAll);
 
         // output errors/warnings
         if (!$errors && !$publishErrors && !$warnings) {
diff --git a/vendor/composer/composer/src/Composer/Compiler.php b/vendor/composer/composer/src/Composer/Compiler.php
index 41c30d6..e410c18 100644
--- a/vendor/composer/composer/src/Composer/Compiler.php
+++ b/vendor/composer/composer/src/Composer/Compiler.php
@@ -12,6 +12,7 @@
 
 namespace Composer;
 
+use Composer\Json\JsonFile;
 use Symfony\Component\Finder\Finder;
 use Symfony\Component\Process\Process;
 
@@ -24,6 +25,7 @@ use Symfony\Component\Process\Process;
 class Compiler
 {
     private $version;
+    private $branchAliasVersion = '';
     private $versionDate;
 
     /**
@@ -48,6 +50,7 @@ class Compiler
         if ($process->run() != 0) {
             throw new \RuntimeException('Can\'t run git log. You must ensure to run compile from composer git repository clone and that git binary is available.');
         }
+
         $date = new \DateTime(trim($process->getOutput()));
         $date->setTimezone(new \DateTimeZone('UTC'));
         $this->versionDate = $date->format('Y-m-d H:i:s');
@@ -55,6 +58,14 @@ class Compiler
         $process = new Process('git describe --tags HEAD');
         if ($process->run() == 0) {
             $this->version = trim($process->getOutput());
+        } else {
+            // get branch-alias defined in composer.json for dev-master (if any)
+            $localConfig = __DIR__.'/../../composer.json';
+            $file = new JsonFile($localConfig);
+            $localConfig = $file->read();
+            if (isset($localConfig['extra']['branch-alias']['dev-master'])) {
+                $this->branchAliasVersion = $localConfig['extra']['branch-alias']['dev-master'];
+            }
         }
 
         $phar = new \Phar($pharFile, 0, 'composer.phar');
@@ -138,6 +149,7 @@ class Compiler
 
         if ($path === 'src/Composer/Composer.php') {
             $content = str_replace('@package_version@', $this->version, $content);
+            $content = str_replace('@package_branch_alias_version@', $this->branchAliasVersion, $content);
             $content = str_replace('@release_date@', $this->versionDate, $content);
         }
 
@@ -200,6 +212,16 @@ class Compiler
  * the license that is located at the bottom of this file.
  */
 
+// Avoid APC causing random fatal errors per https://github.com/composer/composer/issues/264
+if (extension_loaded('apc') && ini_get('apc.enable_cli') && ini_get('apc.cache_by_default')) {
+    if (version_compare(phpversion('apc'), '3.0.12', '>=')) {
+        ini_set('apc.cache_by_default', 0);
+    } else {
+        fwrite(STDERR, 'Warning: APC <= 3.0.12 may cause fatal errors when running composer commands.'.PHP_EOL);
+        fwrite(STDERR, 'Update APC, or set apc.enable_cli or apc.cache_by_default to 0 in your php.ini.'.PHP_EOL);
+    }
+}
+
 Phar::mapPhar('composer.phar');
 
 EOF;
diff --git a/vendor/composer/composer/src/Composer/Composer.php b/vendor/composer/composer/src/Composer/Composer.php
index 0162541..c874a07 100644
--- a/vendor/composer/composer/src/Composer/Composer.php
+++ b/vendor/composer/composer/src/Composer/Composer.php
@@ -28,7 +28,8 @@ use Composer\Autoload\AutoloadGenerator;
  */
 class Composer
 {
-    const VERSION = '1.0.0-alpha8';
+    const VERSION = '@package_version@';
+    const BRANCH_ALIAS_VERSION = '@package_branch_alias_version@';
     const RELEASE_DATE = '@release_date@';
 
     /**
@@ -67,7 +68,7 @@ class Composer
     private $config;
 
     /**
-     * @var EventDispatcher\EventDispatcher
+     * @var EventDispatcher
      */
     private $eventDispatcher;
 
@@ -190,7 +191,7 @@ class Composer
     }
 
     /**
-     * @param EventDispatcher\EventDispatcher $eventDispatcher
+     * @param EventDispatcher $eventDispatcher
      */
     public function setEventDispatcher(EventDispatcher $eventDispatcher)
     {
@@ -198,7 +199,7 @@ class Composer
     }
 
     /**
-     * @return EventDispatcher\EventDispatcher
+     * @return EventDispatcher
      */
     public function getEventDispatcher()
     {
diff --git a/vendor/composer/composer/src/Composer/Config.php b/vendor/composer/composer/src/Composer/Config.php
index c54bc49..176c228 100644
--- a/vendor/composer/composer/src/Composer/Config.php
+++ b/vendor/composer/composer/src/Composer/Config.php
@@ -24,7 +24,7 @@ class Config
         'use-include-path' => false,
         'preferred-install' => 'auto',
         'notify-on-install' => true,
-        'github-protocols' => array('git', 'https'),
+        'github-protocols' => array('git', 'https', 'ssh'),
         'vendor-dir' => 'vendor',
         'bin-dir' => '{$vendor-dir}/bin',
         'cache-dir' => '{$home}/cache',
@@ -36,8 +36,14 @@ class Config
         'cache-files-maxsize' => '300MiB',
         'discard-changes' => false,
         'autoloader-suffix' => null,
+        'optimize-autoloader' => false,
         'prepend-autoloader' => true,
         'github-domains' => array('github.com'),
+        'github-expose-hostname' => true,
+        'store-auths' => 'prompt',
+        // valid keys without defaults (auth config stuff):
+        // github-oauth
+        // http-basic
     );
 
     public static $defaultRepositories = array(
@@ -51,12 +57,18 @@ class Config
     private $config;
     private $repositories;
     private $configSource;
+    private $authConfigSource;
+    private $useEnvironment;
 
-    public function __construct()
+    /**
+     * @param boolean $useEnvironment Use COMPOSER_ environment variables to replace config settings
+     */
+    public function __construct($useEnvironment = true)
     {
         // load defaults
         $this->config = static::$defaultConfig;
         $this->repositories = static::$defaultRepositories;
+        $this->useEnvironment = (bool) $useEnvironment;
     }
 
     public function setConfigSource(ConfigSourceInterface $source)
@@ -69,17 +81,27 @@ class Config
         return $this->configSource;
     }
 
+    public function setAuthConfigSource(ConfigSourceInterface $source)
+    {
+        $this->authConfigSource = $source;
+    }
+
+    public function getAuthConfigSource()
+    {
+        return $this->authConfigSource;
+    }
+
     /**
      * Merges new config values with the existing ones (overriding)
      *
      * @param array $config
      */
-    public function merge(array $config)
+    public function merge($config)
     {
         // override defaults with given config
         if (!empty($config['config']) && is_array($config['config'])) {
             foreach ($config['config'] as $key => $val) {
-                if (in_array($key, array('github-oauth')) && isset($this->config[$key])) {
+                if (in_array($key, array('github-oauth', 'http-basic')) && isset($this->config[$key])) {
                     $this->config[$key] = array_merge($this->config[$key], $val);
                 } else {
                     $this->config[$key] = $val;
@@ -142,7 +164,10 @@ class Config
                 // convert foo-bar to COMPOSER_FOO_BAR and check if it exists since it overrides the local config
                 $env = 'COMPOSER_' . strtoupper(strtr($key, '-', '_'));
 
-                return rtrim($this->process(getenv($env) ?: $this->config[$key]), '/\\');
+                $val = rtrim($this->process($this->getComposerEnv($env) ?: $this->config[$key]), '/\\');
+                $val = preg_replace('#^(\$HOME|~)(/|$)#', rtrim(getenv('HOME') ?: getenv('USERPROFILE'), '/\\') . '/', $val);
+
+                return $val;
 
             case 'cache-ttl':
                 return (int) $this->config[$key];
@@ -181,7 +206,7 @@ class Config
                 return rtrim($this->process($this->config[$key]), '/\\');
 
             case 'discard-changes':
-                if ($env = getenv('COMPOSER_DISCARD_CHANGES')) {
+                if ($env = $this->getComposerEnv('COMPOSER_DISCARD_CHANGES')) {
                     if (!in_array($env, array('stash', 'true', 'false', '1', '0'), true)) {
                         throw new \RuntimeException(
                             "Invalid value for COMPOSER_DISCARD_CHANGES: {$env}. Expected 1, 0, true, false or stash"
@@ -205,7 +230,7 @@ class Config
 
             case 'github-protocols':
                 if (reset($this->config['github-protocols']) === 'http') {
-                    throw new \RuntimeException('The http protocol for github is not available anymore, update your config\'s github-protocols to use "https" or "git"');
+                    throw new \RuntimeException('The http protocol for github is not available anymore, update your config\'s github-protocols to use "https", "git" or "ssh"');
                 }
 
                 return $this->config[$key];
@@ -253,7 +278,7 @@ class Config
     /**
      * Replaces {$refs} inside a config string
      *
-     * @param string a config string that can contain {$refs-to-other-config}
+     * @param  string $value a config string that can contain {$refs-to-other-config}
      * @return string
      */
     private function process($value)
@@ -268,4 +293,22 @@ class Config
             return $config->get($match[1]);
         }, $value);
     }
+
+    /**
+     * Reads the value of a Composer environment variable
+     *
+     * This should be used to read COMPOSER_ environment variables
+     * that overload config values.
+     *
+     * @param  string         $var
+     * @return string|boolean
+     */
+    private function getComposerEnv($var)
+    {
+        if ($this->useEnvironment) {
+            return getenv($var);
+        }
+
+        return false;
+    }
 }
diff --git a/vendor/composer/composer/src/Composer/Config/ConfigSourceInterface.php b/vendor/composer/composer/src/Composer/Config/ConfigSourceInterface.php
index e1478db..edd3dff 100644
--- a/vendor/composer/composer/src/Composer/Config/ConfigSourceInterface.php
+++ b/vendor/composer/composer/src/Composer/Config/ConfigSourceInterface.php
@@ -66,4 +66,11 @@ interface ConfigSourceInterface
      * @param string $name Name
      */
     public function removeLink($type, $name);
+
+    /**
+     * Gives a user-friendly name to this source (file path or so)
+     *
+     * @return string
+     */
+    public function getName();
 }
diff --git a/vendor/composer/composer/src/Composer/Config/JsonConfigSource.php b/vendor/composer/composer/src/Composer/Config/JsonConfigSource.php
index 5223eb5..4fba294 100644
--- a/vendor/composer/composer/src/Composer/Config/JsonConfigSource.php
+++ b/vendor/composer/composer/src/Composer/Config/JsonConfigSource.php
@@ -23,17 +23,34 @@ use Composer\Json\JsonManipulator;
  */
 class JsonConfigSource implements ConfigSourceInterface
 {
+    /**
+     * @var \Composer\Json\JsonFile
+     */
     private $file;
-    private $manipulator;
+
+    /**
+     * @var bool
+     */
+    private $authConfig;
 
     /**
      * Constructor
      *
      * @param JsonFile $file
+     * @param bool     $authConfig
      */
-    public function __construct(JsonFile $file)
+    public function __construct(JsonFile $file, $authConfig = false)
     {
         $this->file = $file;
+        $this->authConfig = $authConfig;
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function getName()
+    {
+        return $this->file->getPath();
     }
 
     /**
@@ -62,7 +79,16 @@ class JsonConfigSource implements ConfigSourceInterface
     public function addConfigSetting($name, $value)
     {
         $this->manipulateJson('addConfigSetting', $name, $value, function (&$config, $key, $val) {
-            $config['config'][$key] = $val;
+            if ($key === 'github-oauth' || $key === 'http-basic') {
+                list($key, $host) = explode('.', $key, 2);
+                if ($this->authConfig) {
+                    $config[$key][$host] = $val;
+                } else {
+                    $config['config'][$key][$host] = $val;
+                }
+            } else {
+                $config['config'][$key] = $val;
+            }
         });
     }
 
@@ -72,7 +98,16 @@ class JsonConfigSource implements ConfigSourceInterface
     public function removeConfigSetting($name)
     {
         $this->manipulateJson('removeConfigSetting', $name, function (&$config, $key) {
-            unset($config['config'][$key]);
+            if ($key === 'github-oauth' || $key === 'http-basic') {
+                list($key, $host) = explode('.', $key, 2);
+                if ($this->authConfig) {
+                    unset($config[$key][$host]);
+                } else {
+                    unset($config['config'][$key][$host]);
+                }
+            } else {
+                unset($config['config'][$key]);
+            }
         });
     }
 
@@ -105,20 +140,34 @@ class JsonConfigSource implements ConfigSourceInterface
 
         if ($this->file->exists()) {
             $contents = file_get_contents($this->file->getPath());
+        } elseif ($this->authConfig) {
+            $contents = "{\n}\n";
         } else {
             $contents = "{\n    \"config\": {\n    }\n}\n";
         }
+
         $manipulator = new JsonManipulator($contents);
 
         $newFile = !$this->file->exists();
 
+        // override manipulator method for auth config files
+        if ($this->authConfig && $method === 'addConfigSetting') {
+            $method = 'addSubNode';
+            list($mainNode, $name) = explode('.', $args[0], 2);
+            $args = array($mainNode, $name, $args[1]);
+        } elseif ($this->authConfig && $method === 'removeConfigSetting') {
+            $method = 'removeSubNode';
+            list($mainNode, $name) = explode('.', $args[0], 2);
+            $args = array($mainNode, $name);
+        }
+
         // try to update cleanly
         if (call_user_func_array(array($manipulator, $method), $args)) {
             file_put_contents($this->file->getPath(), $manipulator->getContents());
         } else {
             // on failed clean update, call the fallback and rewrite the whole file
             $config = $this->file->read();
-            array_unshift($args, $config);
+            $this->arrayUnshiftRef($args, $config);
             call_user_func_array($fallback, $args);
             $this->file->write($config);
         }
@@ -127,4 +176,19 @@ class JsonConfigSource implements ConfigSourceInterface
             @chmod($this->file->getPath(), 0600);
         }
     }
+
+    /**
+     * Prepend a reference to an element to the beginning of an array.
+     *
+     * @param  array $array
+     * @param  mixed $value
+     * @return array
+     */
+    private function arrayUnshiftRef(&$array, &$value)
+    {
+        $return = array_unshift($array, '');
+        $array[0] = &$value;
+
+        return $return;
+    }
 }
diff --git a/vendor/composer/composer/src/Composer/Console/Application.php b/vendor/composer/composer/src/Composer/Console/Application.php
index 9d622cf..9408646 100644
--- a/vendor/composer/composer/src/Composer/Console/Application.php
+++ b/vendor/composer/composer/src/Composer/Console/Application.php
@@ -56,11 +56,11 @@ class Application extends BaseApplication
 
     public function __construct()
     {
-        if (function_exists('ini_set')) {
+        if (function_exists('ini_set') && extension_loaded('xdebug')) {
             ini_set('xdebug.show_exception_trace', false);
             ini_set('xdebug.scream', false);
-
         }
+
         if (function_exists('date_default_timezone_set') && function_exists('date_default_timezone_get')) {
             date_default_timezone_set(@date_default_timezone_get());
         }
@@ -94,9 +94,18 @@ class Application extends BaseApplication
             $output->writeln('<warning>Composer only officially supports PHP 5.3.2 and above, you will most likely encounter problems with your PHP '.PHP_VERSION.', upgrading is strongly recommended.</warning>');
         }
 
-        if (defined('COMPOSER_DEV_WARNING_TIME') && $this->getCommandName($input) !== 'self-update' && $this->getCommandName($input) !== 'selfupdate') {
-            if (time() > COMPOSER_DEV_WARNING_TIME) {
-                $output->writeln(sprintf('<warning>Warning: This development build of composer is over 30 days old. It is recommended to update it by running "%s self-update" to get the latest version.</warning>', $_SERVER['PHP_SELF']));
+        if (defined('COMPOSER_DEV_WARNING_TIME')) {
+            $commandName = '';
+            if ($name = $this->getCommandName($input)) {
+                try {
+                    $commandName = $this->find($name)->getName();
+                } catch (\InvalidArgumentException $e) {
+                }
+            }
+            if ($commandName !== 'self-update' && $commandName !== 'selfupdate') {
+                if (time() > COMPOSER_DEV_WARNING_TIME) {
+                    $output->writeln(sprintf('<warning>Warning: This development build of composer is over 30 days old. It is recommended to update it by running "%s self-update" to get the latest version.</warning>', $_SERVER['PHP_SELF']));
+                }
             }
         }
 
@@ -104,14 +113,34 @@ class Application extends BaseApplication
             $input->setInteractive(false);
         }
 
-        if ($input->hasParameterOption('--profile')) {
-            $startTime = microtime(true);
-            $this->io->enableDebugging($startTime);
-        }
-
+        // switch working dir
         if ($newWorkDir = $this->getNewWorkingDir($input)) {
             $oldWorkingDir = getcwd();
             chdir($newWorkDir);
+            if ($output->getVerbosity() >= 4) {
+                $output->writeln('Changed CWD to ' . getcwd());
+            }
+        }
+
+        // add non-standard scripts as own commands
+        $file = Factory::getComposerFile();
+        if (is_file($file) && is_readable($file) && is_array($composer = json_decode(file_get_contents($file), true))) {
+            if (isset($composer['scripts']) && is_array($composer['scripts'])) {
+                foreach ($composer['scripts'] as $script => $dummy) {
+                    if (!defined('Composer\Script\ScriptEvents::'.str_replace('-', '_', strtoupper($script)))) {
+                        if ($this->has($script)) {
+                            $output->writeln('<warning>A script named '.$script.' would override a native Composer function and has been skipped</warning>');
+                        } else {
+                            $this->add(new Command\ScriptAliasCommand($script));
+                        }
+                    }
+                }
+            }
+        }
+
+        if ($input->hasParameterOption('--profile')) {
+            $startTime = microtime(true);
+            $this->io->enableDebugging($startTime);
         }
 
         $result = parent::doRun($input, $output);
@@ -129,6 +158,7 @@ class Application extends BaseApplication
 
     /**
      * @param  InputInterface    $input
+     * @return string
      * @throws \RuntimeException
      */
     private function getNewWorkingDir(InputInterface $input)
@@ -158,7 +188,8 @@ class Application extends BaseApplication
                     $output->writeln('<error>The disk hosting '.$dir.' is full, this may be the cause of the following exception</error>');
                 }
             }
-        } catch (\Exception $e) {}
+        } catch (\Exception $e) {
+        }
 
         return parent::renderException($exception, $output);
     }
@@ -184,13 +215,20 @@ class Application extends BaseApplication
                 $message = $e->getMessage() . ':' . PHP_EOL . $errors;
                 throw new JsonValidationException($message);
             }
-
         }
 
         return $this->composer;
     }
 
     /**
+     * Removes the cached composer instance
+     */
+    public function resetComposer()
+    {
+        $this->composer = null;
+    }
+
+    /**
      * @return IOInterface
      */
     public function getIO()
@@ -227,6 +265,9 @@ class Application extends BaseApplication
         $commands[] = new Command\RunScriptCommand();
         $commands[] = new Command\LicensesCommand();
         $commands[] = new Command\GlobalCommand();
+        $commands[] = new Command\ClearCacheCommand();
+        $commands[] = new Command\RemoveCommand();
+        $commands[] = new Command\HomeCommand();
 
         if ('phar:' === substr(__FILE__, 0, 5)) {
             $commands[] = new Command\SelfUpdateCommand();
@@ -240,6 +281,16 @@ class Application extends BaseApplication
      */
     public function getLongVersion()
     {
+        if (Composer::BRANCH_ALIAS_VERSION) {
+            return sprintf(
+                '<info>%s</info> version <comment>%s (%s)</comment> %s',
+                $this->getName(),
+                Composer::BRANCH_ALIAS_VERSION,
+                $this->getVersion(),
+                Composer::RELEASE_DATE
+            );
+        }
+
         return parent::getLongVersion() . ' ' . Composer::RELEASE_DATE;
     }
 
diff --git a/vendor/composer/composer/src/Composer/DependencyResolver/DefaultPolicy.php b/vendor/composer/composer/src/Composer/DependencyResolver/DefaultPolicy.php
index 1908292..10cbe10 100644
--- a/vendor/composer/composer/src/Composer/DependencyResolver/DefaultPolicy.php
+++ b/vendor/composer/composer/src/Composer/DependencyResolver/DefaultPolicy.php
@@ -42,11 +42,11 @@ class DefaultPolicy implements PolicyInterface
         return $constraint->matchSpecific($version, true);
     }
 
-    public function findUpdatePackages(Pool $pool, array $installedMap, PackageInterface $package)
+    public function findUpdatePackages(Pool $pool, array $installedMap, PackageInterface $package, $mustMatchName = false)
     {
         $packages = array();
 
-        foreach ($pool->whatProvides($package->getName()) as $candidate) {
+        foreach ($pool->whatProvides($package->getName(), null, $mustMatchName) as $candidate) {
             if ($candidate !== $package) {
                 $packages[] = $candidate;
             }
@@ -151,18 +151,18 @@ class DefaultPolicy implements PolicyInterface
             }
 
             // priority equal, sort by package id to make reproducible
-            if ($a->getId() === $b->getId()) {
+            if ($a->id === $b->id) {
                 return 0;
             }
 
-            return ($a->getId() < $b->getId()) ? -1 : 1;
+            return ($a->id < $b->id) ? -1 : 1;
         }
 
-        if (isset($installedMap[$a->getId()])) {
+        if (isset($installedMap[$a->id])) {
             return -1;
         }
 
-        if (isset($installedMap[$b->getId()])) {
+        if (isset($installedMap[$b->id])) {
             return 1;
         }
 
@@ -215,26 +215,6 @@ class DefaultPolicy implements PolicyInterface
         return $bestLiterals;
     }
 
-    protected function selectNewestPackages(array $installedMap, array $literals)
-    {
-        $maxLiterals = array($literals[0]);
-        $maxPackage = $literals[0]->getPackage();
-        foreach ($literals as $i => $literal) {
-            if (0 === $i) {
-                continue;
-            }
-
-            if ($this->versionCompare($literal->getPackage(), $maxPackage, '>')) {
-                $maxPackage = $literal->getPackage();
-                $maxLiterals = array($literal);
-            } elseif ($this->versionCompare($literal->getPackage(), $maxPackage, '==')) {
-                $maxLiterals[] = $literal;
-            }
-        }
-
-        return $maxLiterals;
-    }
-
     /**
      * Assumes that installed packages come first and then all highest priority packages
      */
@@ -247,7 +227,7 @@ class DefaultPolicy implements PolicyInterface
         foreach ($literals as $literal) {
             $package = $pool->literalToPackage($literal);
 
-            if (isset($installedMap[$package->getId()])) {
+            if (isset($installedMap[$package->id])) {
                 $selected[] = $literal;
                 continue;
             }
diff --git a/vendor/composer/composer/src/Composer/DependencyResolver/Pool.php b/vendor/composer/composer/src/Composer/DependencyResolver/Pool.php
index a1bba4f..e0d2d8a 100644
--- a/vendor/composer/composer/src/Composer/DependencyResolver/Pool.php
+++ b/vendor/composer/composer/src/Composer/DependencyResolver/Pool.php
@@ -15,7 +15,6 @@ namespace Composer\DependencyResolver;
 use Composer\Package\BasePackage;
 use Composer\Package\AliasPackage;
 use Composer\Package\Version\VersionParser;
-use Composer\Package\Link;
 use Composer\Package\LinkConstraint\LinkConstraintInterface;
 use Composer\Package\LinkConstraint\VersionConstraint;
 use Composer\Package\LinkConstraint\EmptyConstraint;
@@ -23,8 +22,8 @@ use Composer\Repository\RepositoryInterface;
 use Composer\Repository\CompositeRepository;
 use Composer\Repository\ComposerRepository;
 use Composer\Repository\InstalledRepositoryInterface;
-use Composer\Repository\StreamableRepositoryInterface;
 use Composer\Repository\PlatformRepository;
+use Composer\Package\PackageInterface;
 
 /**
  * A package pool contains repositories that provide packages.
@@ -45,11 +44,13 @@ class Pool
     protected $providerRepos = array();
     protected $packages = array();
     protected $packageByName = array();
+    protected $packageByExactName = array();
     protected $acceptableStabilities;
     protected $stabilityFlags;
     protected $versionParser;
     protected $providerCache = array();
     protected $filterRequires;
+    protected $whitelist = null;
     protected $id = 1;
 
     public function __construct($minimumStability = 'stable', array $stabilityFlags = array(), array $filterRequires = array())
@@ -66,6 +67,12 @@ class Pool
         $this->filterRequires = $filterRequires;
     }
 
+    public function setWhitelist($whitelist)
+    {
+        $this->whitelist = $whitelist;
+        $this->providerCache = array();
+    }
+
     /**
      * Adds a repository and its packages to this package pool
      *
@@ -89,76 +96,6 @@ class Pool
                 $this->providerRepos[] = $repo;
                 $repo->setRootAliases($rootAliases);
                 $repo->resetPackageIds();
-            } elseif ($repo instanceof StreamableRepositoryInterface) {
-                foreach ($repo->getMinimalPackages() as $package) {
-                    $name = $package['name'];
-                    $version = $package['version'];
-                    $stability = VersionParser::parseStability($version);
-
-                    // collect names
-                    $names = array(
-                        $name => true,
-                    );
-                    if (isset($package['provide'])) {
-                        foreach ($package['provide'] as $target => $constraint) {
-                            $names[$target] = true;
-                        }
-                    }
-                    if (isset($package['replace'])) {
-                        foreach ($package['replace'] as $target => $constraint) {
-                            $names[$target] = true;
-                        }
-                    }
-                    $names = array_keys($names);
-
-                    if ($exempt || $this->isPackageAcceptable($names, $stability)) {
-                        $package['id'] = $this->id++;
-                        $package['stability'] = $stability;
-                        $this->packages[] = $package;
-
-                        foreach ($names as $provided) {
-                            $this->packageByName[$provided][$package['id']] = $this->packages[$this->id - 2];
-                        }
-
-                        // handle root package aliases
-                        unset($rootAliasData);
-                        if (isset($rootAliases[$name][$version])) {
-                            $rootAliasData = $rootAliases[$name][$version];
-                        } elseif (isset($package['alias_normalized']) && isset($rootAliases[$name][$package['alias_normalized']])) {
-                            $rootAliasData = $rootAliases[$name][$package['alias_normalized']];
-                        }
-
-                        if (isset($rootAliasData)) {
-                            $alias = $package;
-                            unset($alias['raw']);
-                            $alias['version'] = $rootAliasData['alias_normalized'];
-                            $alias['alias'] = $rootAliasData['alias'];
-                            $alias['alias_of'] = $package['id'];
-                            $alias['id'] = $this->id++;
-                            $alias['root_alias'] = true;
-                            $this->packages[] = $alias;
-
-                            foreach ($names as $provided) {
-                                $this->packageByName[$provided][$alias['id']] = $this->packages[$this->id - 2];
-                            }
-                        }
-
-                        // handle normal package aliases
-                        if (isset($package['alias'])) {
-                            $alias = $package;
-                            unset($alias['raw']);
-                            $alias['version'] = $package['alias_normalized'];
-                            $alias['alias'] = $package['alias'];
-                            $alias['alias_of'] = $package['id'];
-                            $alias['id'] = $this->id++;
-                            $this->packages[] = $alias;
-
-                            foreach ($names as $provided) {
-                                $this->packageByName[$provided][$alias['id']] = $this->packages[$this->id - 2];
-                            }
-                        }
-                    }
-                }
             } else {
                 foreach ($repo->getPackages() as $package) {
                     $names = $package->getNames();
@@ -166,6 +103,7 @@ class Pool
                     if ($exempt || $this->isPackageAcceptable($names, $stability)) {
                         $package->setId($this->id++);
                         $this->packages[] = $package;
+                        $this->packageByExactName[$package->getName()][$package->id] = $package;
 
                         foreach ($names as $provided) {
                             $this->packageByName[$provided][] = $package;
@@ -184,6 +122,7 @@ class Pool
 
                             $package->getRepository()->addPackage($aliasPackage);
                             $this->packages[] = $aliasPackage;
+                            $this->packageByExactName[$aliasPackage->getName()][$aliasPackage->id] = $aliasPackage;
 
                             foreach ($aliasPackage->getNames() as $name) {
                                 $this->packageByName[$name][] = $aliasPackage;
@@ -214,44 +153,54 @@ class Pool
     */
     public function packageById($id)
     {
-        return $this->ensurePackageIsLoaded($this->packages[$id - 1]);
+        return $this->packages[$id - 1];
     }
 
     /**
      * Searches all packages providing the given package name and match the constraint
      *
-     * @param string                  $name       The package name to be searched for
-     * @param LinkConstraintInterface $constraint A constraint that all returned
-     *                                            packages must match or null to return all
-     * @return array A set of packages
+     * @param  string                  $name          The package name to be searched for
+     * @param  LinkConstraintInterface $constraint    A constraint that all returned
+     *                                                packages must match or null to return all
+     * @param  bool                    $mustMatchName Whether the name of returned packages
+     *                                                must match the given name
+     * @return PackageInterface[]      A set of packages
      */
-    public function whatProvides($name, LinkConstraintInterface $constraint = null)
+    public function whatProvides($name, LinkConstraintInterface $constraint = null, $mustMatchName = false)
     {
-        if (isset($this->providerCache[$name][(string) $constraint])) {
-            return $this->providerCache[$name][(string) $constraint];
+        $key = ((int) $mustMatchName).$constraint;
+        if (isset($this->providerCache[$name][$key])) {
+            return $this->providerCache[$name][$key];
         }
 
-        return $this->providerCache[$name][(string) $constraint] = $this->computeWhatProvides($name, $constraint);
+        return $this->providerCache[$name][$key] = $this->computeWhatProvides($name, $constraint, $mustMatchName);
     }
 
     /**
      * @see whatProvides
      */
-    private function computeWhatProvides($name, $constraint)
+    private function computeWhatProvides($name, $constraint, $mustMatchName = false)
     {
         $candidates = array();
 
         foreach ($this->providerRepos as $repo) {
             foreach ($repo->whatProvides($this, $name) as $candidate) {
                 $candidates[] = $candidate;
-                if ($candidate->getId() < 1) {
+                if ($candidate->id < 1) {
                     $candidate->setId($this->id++);
                     $this->packages[$this->id - 2] = $candidate;
                 }
             }
         }
 
-        if (isset($this->packageByName[$name])) {
+        if ($mustMatchName) {
+            $candidates = array_filter($candidates, function ($candidate) use ($name) {
+                return $candidate->getName() == $name;
+            });
+            if (isset($this->packageByExactName[$name])) {
+                $candidates = array_merge($candidates, $this->packageByExactName[$name]);
+            }
+        } elseif (isset($this->packageByName[$name])) {
             $candidates = array_merge($candidates, $this->packageByName[$name]);
         }
 
@@ -259,6 +208,20 @@ class Pool
         $nameMatch = false;
 
         foreach ($candidates as $candidate) {
+            $aliasOfCandidate = null;
+
+            // alias packages are not white listed, make sure that the package
+            // being aliased is white listed
+            if ($candidate instanceof AliasPackage) {
+                $aliasOfCandidate = $candidate->getAliasOf();
+            }
+
+            if ($this->whitelist !== null && (
+                (!($candidate instanceof AliasPackage) && !isset($this->whitelist[$candidate->id])) ||
+                ($candidate instanceof AliasPackage && !isset($this->whitelist[$aliasOfCandidate->id]))
+            )) {
+                continue;
+            }
             switch ($this->match($candidate, $name, $constraint)) {
                 case self::MATCH_NONE:
                     break;
@@ -269,15 +232,15 @@ class Pool
 
                 case self::MATCH:
                     $nameMatch = true;
-                    $matches[] = $this->ensurePackageIsLoaded($candidate);
+                    $matches[] = $candidate;
                     break;
 
                 case self::MATCH_PROVIDE:
-                    $provideMatches[] = $this->ensurePackageIsLoaded($candidate);
+                    $provideMatches[] = $candidate;
                     break;
 
                 case self::MATCH_REPLACE:
-                    $matches[] = $this->ensurePackageIsLoaded($candidate);
+                    $matches[] = $candidate;
                     break;
 
                 case self::MATCH_FILTERED:
@@ -312,7 +275,7 @@ class Pool
     {
         $package = $this->literalToPackage($literal);
 
-        if (isset($installedMap[$package->getId()])) {
+        if (isset($installedMap[$package->id])) {
             $prefix = ($literal > 0 ? 'keep' : 'remove');
         } else {
             $prefix = ($literal > 0 ? 'install' : 'don\'t install');
@@ -338,28 +301,6 @@ class Pool
         return false;
     }
 
-    private function ensurePackageIsLoaded($data)
-    {
-        if (is_array($data)) {
-            if (isset($data['alias_of'])) {
-                $aliasOf = $this->packageById($data['alias_of']);
-                $package = $this->packages[$data['id'] - 1] = $data['repo']->loadAliasPackage($data, $aliasOf);
-                $package->setRootPackageAlias(!empty($data['root_alias']));
-            } else {
-                $package = $this->packages[$data['id'] - 1] = $data['repo']->loadPackage($data);
-            }
-
-            foreach ($package->getNames() as $name) {
-                $this->packageByName[$name][$data['id']] = $package;
-            }
-            $package->setId($data['id']);
-
-            return $package;
-        }
-
-        return $data;
-    }
-
     /**
      * Checks if the package matches the given constraint directly or through
      * provided or replaced packages
@@ -371,19 +312,10 @@ class Pool
      */
     private function match($candidate, $name, LinkConstraintInterface $constraint = null)
     {
-        // handle array packages
-        if (is_array($candidate)) {
-            $candidateName = $candidate['name'];
-            $candidateVersion = $candidate['version'];
-            $isDev = $candidate['stability'] === 'dev';
-            $isAlias = isset($candidate['alias_of']);
-        } else {
-            // handle object packages
-            $candidateName = $candidate->getName();
-            $candidateVersion = $candidate->getVersion();
-            $isDev = $candidate->getStability() === 'dev';
-            $isAlias = $candidate instanceof AliasPackage;
-        }
+        $candidateName = $candidate->getName();
+        $candidateVersion = $candidate->getVersion();
+        $isDev = $candidate->getStability() === 'dev';
+        $isAlias = $candidate instanceof AliasPackage;
 
         if (!$isDev && !$isAlias && isset($this->filterRequires[$name])) {
             $requireFilter = $this->filterRequires[$name];
@@ -401,17 +333,8 @@ class Pool
             return self::MATCH_NAME;
         }
 
-        if (is_array($candidate)) {
-            $provides = isset($candidate['provide'])
-                ? $this->versionParser->parseLinks($candidateName, $candidateVersion, 'provides', $candidate['provide'])
-                : array();
-            $replaces = isset($candidate['replace'])
-                ? $this->versionParser->parseLinks($candidateName, $candidateVersion, 'replaces', $candidate['replace'])
-                : array();
-        } else {
-            $provides = $candidate->getProvides();
-            $replaces = $candidate->getReplaces();
-        }
+        $provides = $candidate->getProvides();
+        $replaces = $candidate->getReplaces();
 
         // aliases create multiple replaces/provides for one target so they can not use the shortcut below
         if (isset($replaces[0]) || isset($provides[0])) {
diff --git a/vendor/composer/composer/src/Composer/DependencyResolver/Problem.php b/vendor/composer/composer/src/Composer/DependencyResolver/Problem.php
index 56ac867..9373a7b 100644
--- a/vendor/composer/composer/src/Composer/DependencyResolver/Problem.php
+++ b/vendor/composer/composer/src/Composer/DependencyResolver/Problem.php
@@ -80,7 +80,13 @@ class Problem
             $rule = $reason['rule'];
             $job = $reason['job'];
 
-            if ($job && $job['cmd'] === 'install' && empty($job['packages'])) {
+            if (isset($job['constraint'])) {
+                $packages = $this->pool->whatProvides($job['packageName'], $job['constraint']);
+            } else {
+                $packages = array();
+            }
+
+            if ($job && $job['cmd'] === 'install' && empty($packages)) {
                 // handle php extensions
                 if (0 === stripos($job['packageName'], 'ext-')) {
                     $ext = substr($job['packageName'], 4);
@@ -124,7 +130,7 @@ class Problem
                 $messages[] = $this->jobToText($job);
             } elseif ($rule) {
                 if ($rule instanceof Rule) {
-                    $messages[] = $rule->getPrettyString($installedMap);
+                    $messages[] = $rule->getPrettyString($this->pool, $installedMap);
                 }
             }
         }
@@ -161,18 +167,25 @@ class Problem
     {
         switch ($job['cmd']) {
             case 'install':
-                if (!$job['packages']) {
+                $packages = $this->pool->whatProvides($job['packageName'], $job['constraint']);
+                if (!$packages) {
                     return 'No package found to satisfy install request for '.$job['packageName'].$this->constraintToText($job['constraint']);
                 }
 
-                return 'Installation request for '.$job['packageName'].$this->constraintToText($job['constraint']).' -> satisfiable by '.$this->getPackageList($job['packages']).'.';
+                return 'Installation request for '.$job['packageName'].$this->constraintToText($job['constraint']).' -> satisfiable by '.$this->getPackageList($packages).'.';
             case 'update':
                 return 'Update request for '.$job['packageName'].$this->constraintToText($job['constraint']).'.';
             case 'remove':
                 return 'Removal request for '.$job['packageName'].$this->constraintToText($job['constraint']).'';
         }
 
-        return 'Job(cmd='.$job['cmd'].', target='.$job['packageName'].', packages=['.$this->getPackageList($job['packages']).'])';
+        if (isset($job['constraint'])) {
+            $packages = $this->pool->whatProvides($job['packageName'], $job['constraint']);
+        } else {
+            $packages = array();
+        }
+
+        return 'Job(cmd='.$job['cmd'].', target='.$job['packageName'].', packages=['.$this->getPackageList($packages).'])';
     }
 
     protected function getPackageList($packages)
diff --git a/vendor/composer/composer/src/Composer/DependencyResolver/Request.php b/vendor/composer/composer/src/Composer/DependencyResolver/Request.php
index 92c8aa1..79904a3 100644
--- a/vendor/composer/composer/src/Composer/DependencyResolver/Request.php
+++ b/vendor/composer/composer/src/Composer/DependencyResolver/Request.php
@@ -43,22 +43,31 @@ class Request
         $this->addJob($packageName, 'remove', $constraint);
     }
 
-    protected function addJob($packageName, $cmd, LinkConstraintInterface $constraint = null)
+    /**
+     * Mark an existing package as being installed and having to remain installed
+     *
+     * These jobs will not be tempered with by the solver
+     */
+    public function fix($packageName, LinkConstraintInterface $constraint = null)
+    {
+        $this->addJob($packageName, 'install', $constraint, true);
+    }
+
+    protected function addJob($packageName, $cmd, LinkConstraintInterface $constraint = null, $fixed = false)
     {
         $packageName = strtolower($packageName);
-        $packages = $this->pool->whatProvides($packageName, $constraint);
 
         $this->jobs[] = array(
-            'packages' => $packages,
             'cmd' => $cmd,
             'packageName' => $packageName,
             'constraint' => $constraint,
+            'fixed' => $fixed
         );
     }
 
     public function updateAll()
     {
-        $this->jobs[] = array('cmd' => 'update-all', 'packages' => array());
+        $this->jobs[] = array('cmd' => 'update-all');
     }
 
     public function getJobs()
diff --git a/vendor/composer/composer/src/Composer/DependencyResolver/Rule.php b/vendor/composer/composer/src/Composer/DependencyResolver/Rule.php
index a470384..cba9400 100644
--- a/vendor/composer/composer/src/Composer/DependencyResolver/Rule.php
+++ b/vendor/composer/composer/src/Composer/DependencyResolver/Rule.php
@@ -29,10 +29,13 @@ class Rule
     const RULE_LEARNED = 12;
     const RULE_PACKAGE_ALIAS = 13;
 
-    protected $pool;
+    /**
+     * READ-ONLY: The literals this rule consists of.
+     * @var array
+     */
+    public $literals;
 
     protected $disabled;
-    protected $literals;
     protected $type;
     protected $id;
     protected $reason;
@@ -42,10 +45,8 @@ class Rule
 
     protected $ruleHash;
 
-    public function __construct(Pool $pool, array $literals, $reason, $reasonData, $job = null)
+    public function __construct(array $literals, $reason, $reasonData, $job = null)
     {
-        $this->pool = $pool;
-
         // sort all packages ascending by id
         sort($literals);
 
@@ -160,6 +161,9 @@ class Rule
         return !$this->disabled;
     }
 
+    /**
+     * @deprecated Use public literals member
+     */
     public function getLiterals()
     {
         return $this->literals;
@@ -170,14 +174,14 @@ class Rule
         return 1 === count($this->literals);
     }
 
-    public function getPrettyString(array $installedMap = array())
+    public function getPrettyString(Pool $pool, array $installedMap = array())
     {
         $ruleText = '';
         foreach ($this->literals as $i => $literal) {
             if ($i != 0) {
                 $ruleText .= '|';
             }
-            $ruleText .= $this->pool->literalToPrettyString($literal, $installedMap);
+            $ruleText .= $pool->literalToPrettyString($literal, $installedMap);
         }
 
         switch ($this->reason) {
@@ -191,24 +195,24 @@ class Rule
                 return "Remove command rule ($ruleText)";
 
             case self::RULE_PACKAGE_CONFLICT:
-                $package1 = $this->pool->literalToPackage($this->literals[0]);
-                $package2 = $this->pool->literalToPackage($this->literals[1]);
+                $package1 = $pool->literalToPackage($this->literals[0]);
+                $package2 = $pool->literalToPackage($this->literals[1]);
 
-                return $package1->getPrettyString().' conflicts with '.$this->formatPackagesUnique(array($package2)).'.';
+                return $package1->getPrettyString().' conflicts with '.$this->formatPackagesUnique($pool, array($package2)).'.';
 
             case self::RULE_PACKAGE_REQUIRES:
                 $literals = $this->literals;
                 $sourceLiteral = array_shift($literals);
-                $sourcePackage = $this->pool->literalToPackage($sourceLiteral);
+                $sourcePackage = $pool->literalToPackage($sourceLiteral);
 
                 $requires = array();
                 foreach ($literals as $literal) {
-                    $requires[] = $this->pool->literalToPackage($literal);
+                    $requires[] = $pool->literalToPackage($literal);
                 }
 
                 $text = $this->reasonData->getPrettyString($sourcePackage);
                 if ($requires) {
-                    $text .= ' -> satisfiable by ' . $this->formatPackagesUnique($requires) . '.';
+                    $text .= ' -> satisfiable by ' . $this->formatPackagesUnique($pool, $requires) . '.';
                 } else {
                     $targetName = $this->reasonData->getTarget();
 
@@ -235,22 +239,24 @@ class Rule
             case self::RULE_INSTALLED_PACKAGE_OBSOLETES:
                 return $ruleText;
             case self::RULE_PACKAGE_SAME_NAME:
-                return 'Can only install one of: ' . $this->formatPackagesUnique($this->literals) . '.';
+                return 'Can only install one of: ' . $this->formatPackagesUnique($pool, $this->literals) . '.';
             case self::RULE_PACKAGE_IMPLICIT_OBSOLETES:
                 return $ruleText;
             case self::RULE_LEARNED:
                 return 'Conclusion: '.$ruleText;
             case self::RULE_PACKAGE_ALIAS:
                 return $ruleText;
+            default:
+                return '('.$ruleText.')';
         }
     }
 
-    protected function formatPackagesUnique(array $packages)
+    protected function formatPackagesUnique($pool, array $packages)
     {
         $prepared = array();
         foreach ($packages as $package) {
             if (!is_object($package)) {
-                $package = $this->pool->literalToPackage($package);
+                $package = $pool->literalToPackage($package);
             }
             $prepared[$package->getName()]['name'] = $package->getPrettyName();
             $prepared[$package->getName()]['versions'][$package->getVersion()] = $package->getPrettyVersion();
@@ -275,7 +281,7 @@ class Rule
             if ($i != 0) {
                 $result .= '|';
             }
-            $result .= $this->pool->literalToString($literal);
+            $result .= $literal;
         }
 
         $result .= ')';
diff --git a/vendor/composer/composer/src/Composer/DependencyResolver/RuleSet.php b/vendor/composer/composer/src/Composer/DependencyResolver/RuleSet.php
index 05ab780..b954512 100644
--- a/vendor/composer/composer/src/Composer/DependencyResolver/RuleSet.php
+++ b/vendor/composer/composer/src/Composer/DependencyResolver/RuleSet.php
@@ -22,6 +22,13 @@ class RuleSet implements \IteratorAggregate, \Countable
     const TYPE_JOB = 1;
     const TYPE_LEARNED = 4;
 
+    /**
+     * READ-ONLY: Lookup table for rule id to rule object
+     *
+     * @var Rule[]
+     */
+    public $ruleById;
+
     protected static $types = array(
         -1 => 'UNKNOWN',
         self::TYPE_PACKAGE => 'PACKAGE',
@@ -30,7 +37,6 @@ class RuleSet implements \IteratorAggregate, \Countable
     );
 
     protected $rules;
-    protected $ruleById;
     protected $nextRuleId;
 
     protected $rulesByHash;
@@ -144,17 +150,22 @@ class RuleSet implements \IteratorAggregate, \Countable
         return false;
     }
 
-    public function __toString()
+    public function getPrettyString(Pool $pool = null)
     {
         $string = "\n";
         foreach ($this->rules as $type => $rules) {
             $string .= str_pad(self::$types[$type], 8, ' ') . ": ";
             foreach ($rules as $rule) {
-                $string .= $rule."\n";
+                $string .= ($pool ? $rule->getPrettyString($pool) : $rule)."\n";
             }
             $string .= "\n\n";
         }
 
         return $string;
     }
+
+    public function __toString()
+    {
+        return $this->getPrettyString(null);
+    }
 }
diff --git a/vendor/composer/composer/src/Composer/DependencyResolver/RuleSetGenerator.php b/vendor/composer/composer/src/Composer/DependencyResolver/RuleSetGenerator.php
index b40ce1a..8ea24e7 100644
--- a/vendor/composer/composer/src/Composer/DependencyResolver/RuleSetGenerator.php
+++ b/vendor/composer/composer/src/Composer/DependencyResolver/RuleSetGenerator.php
@@ -14,6 +14,7 @@ namespace Composer\DependencyResolver;
 
 use Composer\Package\PackageInterface;
 use Composer\Package\AliasPackage;
+use Composer\Repository\PlatformRepository;
 
 /**
  * @author Nils Adermann <naderman@naderman.de>
@@ -25,6 +26,8 @@ class RuleSetGenerator
     protected $rules;
     protected $jobs;
     protected $installedMap;
+    protected $whitelistedMap;
+    protected $addedMap;
 
     public function __construct(PolicyInterface $policy, Pool $pool)
     {
@@ -38,27 +41,27 @@ class RuleSetGenerator
      * This rule is of the form (-A|B|C), where B and C are the providers of
      * one requirement of the package A.
      *
-     * @param PackageInterface $package   The package with a requirement
-     * @param array            $providers The providers of the requirement
-     * @param int              $reason    A RULE_* constant describing the
-     *                                     reason for generating this rule
-     * @param mixed $reasonData Any data, e.g. the requirement name,
-     *                                     that goes with the reason
-     * @return Rule The generated rule or null if tautological
+     * @param  PackageInterface $package    The package with a requirement
+     * @param  array            $providers  The providers of the requirement
+     * @param  int              $reason     A RULE_* constant describing the
+     *                                      reason for generating this rule
+     * @param  mixed            $reasonData Any data, e.g. the requirement name,
+     *                                      that goes with the reason
+     * @return Rule             The generated rule or null if tautological
      */
     protected function createRequireRule(PackageInterface $package, array $providers, $reason, $reasonData = null)
     {
-        $literals = array(-$package->getId());
+        $literals = array(-$package->id);
 
         foreach ($providers as $provider) {
             // self fulfilling rule?
             if ($provider === $package) {
                 return null;
             }
-            $literals[] = $provider->getId();
+            $literals[] = $provider->id;
         }
 
-        return new Rule($this->pool, $literals, $reason, $reasonData);
+        return new Rule($literals, $reason, $reasonData);
     }
 
     /**
@@ -67,20 +70,20 @@ class RuleSetGenerator
      * The rule is (A|B|C) with A, B and C different packages. If the given
      * set of packages is empty an impossible rule is generated.
      *
-     * @param array $packages The set of packages to choose from
-     * @param int   $reason   A RULE_* constant describing the reason for
-     *                            generating this rule
-     * @param  array $job The job this rule was created from
+     * @param  array $packages The set of packages to choose from
+     * @param  int   $reason   A RULE_* constant describing the reason for
+     *                         generating this rule
+     * @param  array $job      The job this rule was created from
      * @return Rule  The generated rule
      */
     protected function createInstallOneOfRule(array $packages, $reason, $job)
     {
         $literals = array();
         foreach ($packages as $package) {
-            $literals[] = $package->getId();
+            $literals[] = $package->id;
         }
 
-        return new Rule($this->pool, $literals, $reason, $job['packageName'], $job);
+        return new Rule($literals, $reason, $job['packageName'], $job);
     }
 
     /**
@@ -88,15 +91,15 @@ class RuleSetGenerator
      *
      * The rule for a package A is (-A).
      *
-     * @param PackageInterface $package The package to be removed
-     * @param int              $reason  A RULE_* constant describing the
-     *                                     reason for generating this rule
-     * @param  array $job The job this rule was created from
-     * @return Rule  The generated rule
+     * @param  PackageInterface $package The package to be removed
+     * @param  int              $reason  A RULE_* constant describing the
+     *                                   reason for generating this rule
+     * @param  array            $job     The job this rule was created from
+     * @return Rule             The generated rule
      */
     protected function createRemoveRule(PackageInterface $package, $reason, $job)
     {
-        return new Rule($this->pool, array(-$package->getId()), $reason, $job['packageName'], $job);
+        return new Rule(array(-$package->id), $reason, $job['packageName'], $job);
     }
 
     /**
@@ -105,13 +108,13 @@ class RuleSetGenerator
      * The rule for conflicting packages A and B is (-A|-B). A is called the issuer
      * and B the provider.
      *
-     * @param PackageInterface $issuer   The package declaring the conflict
-     * @param PackageInterface $provider The package causing the conflict
-     * @param int              $reason   A RULE_* constant describing the
-     *                                     reason for generating this rule
-     * @param mixed $reasonData Any data, e.g. the package name, that
-     *                                     goes with the reason
-     * @return Rule The generated rule
+     * @param  PackageInterface $issuer     The package declaring the conflict
+     * @param  PackageInterface $provider   The package causing the conflict
+     * @param  int              $reason     A RULE_* constant describing the
+     *                                      reason for generating this rule
+     * @param  mixed            $reasonData Any data, e.g. the package name, that
+     *                                      goes with the reason
+     * @return Rule             The generated rule
      */
     protected function createConflictRule(PackageInterface $issuer, PackageInterface $provider, $reason, $reasonData = null)
     {
@@ -120,7 +123,7 @@ class RuleSetGenerator
             return null;
         }
 
-        return new Rule($this->pool, array(-$issuer->getId(), -$provider->getId()), $reason, $reasonData);
+        return new Rule(array(-$issuer->id, -$provider->id), $reason, $reasonData);
     }
 
     /**
@@ -141,20 +144,59 @@ class RuleSetGenerator
         $this->rules->add($newRule, $type);
     }
 
-    protected function addRulesForPackage(PackageInterface $package)
+    protected function whitelistFromPackage(PackageInterface $package)
+    {
+        $workQueue = new \SplQueue;
+        $workQueue->enqueue($package);
+
+        while (!$workQueue->isEmpty()) {
+            $package = $workQueue->dequeue();
+            if (isset($this->whitelistedMap[$package->id])) {
+                continue;
+            }
+
+            $this->whitelistedMap[$package->id] = true;
+
+            foreach ($package->getRequires() as $link) {
+                $possibleRequires = $this->pool->whatProvides($link->getTarget(), $link->getConstraint(), true);
+
+                foreach ($possibleRequires as $require) {
+                    $workQueue->enqueue($require);
+                }
+            }
+
+            $obsoleteProviders = $this->pool->whatProvides($package->getName(), null, true);
+
+            foreach ($obsoleteProviders as $provider) {
+                if ($provider === $package) {
+                    continue;
+                }
+
+                if (($package instanceof AliasPackage) && $package->getAliasOf() === $provider) {
+                    $workQueue->enqueue($provider);
+                }
+            }
+        }
+    }
+
+    protected function addRulesForPackage(PackageInterface $package, $ignorePlatformReqs)
     {
         $workQueue = new \SplQueue;
         $workQueue->enqueue($package);
 
         while (!$workQueue->isEmpty()) {
             $package = $workQueue->dequeue();
-            if (isset($this->addedMap[$package->getId()])) {
+            if (isset($this->addedMap[$package->id])) {
                 continue;
             }
 
-            $this->addedMap[$package->getId()] = true;
+            $this->addedMap[$package->id] = true;
 
             foreach ($package->getRequires() as $link) {
+                if ($ignorePlatformReqs && preg_match(PlatformRepository::PLATFORM_PACKAGE_REGEX, $link->getTarget())) {
+                    continue;
+                }
+
                 $possibleRequires = $this->pool->whatProvides($link->getTarget(), $link->getConstraint());
 
                 $this->addRule(RuleSet::TYPE_PACKAGE, $rule = $this->createRequireRule($package, $possibleRequires, Rule::RULE_PACKAGE_REQUIRES, $link));
@@ -173,7 +215,7 @@ class RuleSetGenerator
             }
 
             // check obsoletes and implicit obsoletes of a package
-            $isInstalled = (isset($this->installedMap[$package->getId()]));
+            $isInstalled = (isset($this->installedMap[$package->id]));
 
             foreach ($package->getReplaces() as $link) {
                 $obsoleteProviders = $this->pool->whatProvides($link->getTarget(), $link->getConstraint());
@@ -221,41 +263,46 @@ class RuleSetGenerator
         return $impossible;
     }
 
-    /**
-     * Adds all rules for all update packages of a given package
-     *
-     * @param PackageInterface $package Rules for this package's updates are to
-     *                                   be added
-     */
-    private function addRulesForUpdatePackages(PackageInterface $package)
+    protected function whitelistFromJobs()
     {
-        $updates = $this->policy->findUpdatePackages($this->pool, $this->installedMap, $package);
-
-        foreach ($updates as $update) {
-            $this->addRulesForPackage($update);
+        foreach ($this->jobs as $job) {
+            switch ($job['cmd']) {
+                case 'install':
+                    $packages = $this->pool->whatProvides($job['packageName'], $job['constraint'], true);
+                    foreach ($packages as $package) {
+                        $this->whitelistFromPackage($package);
+                    }
+                    break;
+            }
         }
     }
 
-    protected function addRulesForJobs()
+    protected function addRulesForJobs($ignorePlatformReqs)
     {
         foreach ($this->jobs as $job) {
             switch ($job['cmd']) {
                 case 'install':
-                    if ($job['packages']) {
-                        foreach ($job['packages'] as $package) {
-                            if (!isset($this->installedMap[$package->getId()])) {
-                                $this->addRulesForPackage($package);
+                    if (!$job['fixed'] && $ignorePlatformReqs && preg_match(PlatformRepository::PLATFORM_PACKAGE_REGEX, $job['packageName'])) {
+                        continue;
+                    }
+
+                    $packages = $this->pool->whatProvides($job['packageName'], $job['constraint']);
+                    if ($packages) {
+                        foreach ($packages as $package) {
+                            if (!isset($this->installedMap[$package->id])) {
+                                $this->addRulesForPackage($package, $ignorePlatformReqs);
                             }
                         }
 
-                        $rule = $this->createInstallOneOfRule($job['packages'], Rule::RULE_JOB_INSTALL, $job);
+                        $rule = $this->createInstallOneOfRule($packages, Rule::RULE_JOB_INSTALL, $job);
                         $this->addRule(RuleSet::TYPE_JOB, $rule);
                     }
                     break;
                 case 'remove':
                     // remove all packages with this name including uninstalled
                     // ones to make sure none of them are picked as replacements
-                    foreach ($job['packages'] as $package) {
+                    $packages = $this->pool->whatProvides($job['packageName'], $job['constraint']);
+                    foreach ($packages as $package) {
                         $rule = $this->createRemoveRule($package, Rule::RULE_JOB_REMOVE, $job);
                         $this->addRule(RuleSet::TYPE_JOB, $rule);
                     }
@@ -264,18 +311,26 @@ class RuleSetGenerator
         }
     }
 
-    public function getRulesFor($jobs, $installedMap)
+    public function getRulesFor($jobs, $installedMap, $ignorePlatformReqs = false)
     {
         $this->jobs = $jobs;
         $this->rules = new RuleSet;
         $this->installedMap = $installedMap;
 
+        $this->whitelistedMap = array();
+        foreach ($this->installedMap as $package) {
+            $this->whitelistFromPackage($package);
+        }
+        $this->whitelistFromJobs();
+
+        $this->pool->setWhitelist($this->whitelistedMap);
+
+        $this->addedMap = array();
         foreach ($this->installedMap as $package) {
-            $this->addRulesForPackage($package);
-            $this->addRulesForUpdatePackages($package);
+            $this->addRulesForPackage($package, $ignorePlatformReqs);
         }
 
-        $this->addRulesForJobs();
+        $this->addRulesForJobs($ignorePlatformReqs);
 
         return $this->rules;
     }
diff --git a/vendor/composer/composer/src/Composer/DependencyResolver/RuleWatchGraph.php b/vendor/composer/composer/src/Composer/DependencyResolver/RuleWatchGraph.php
index 627a66e..2360c52 100644
--- a/vendor/composer/composer/src/Composer/DependencyResolver/RuleWatchGraph.php
+++ b/vendor/composer/composer/src/Composer/DependencyResolver/RuleWatchGraph.php
@@ -69,11 +69,11 @@ class RuleWatchGraph
      * above example the rule was (-A|+B), then A turning true means that
      * B must now be decided true as well.
      *
-     * @param int $decidedLiteral The literal which was decided (A in our example)
-     * @param int $level          The level at which the decision took place and at which
-     *     all resulting decisions should be made.
-     * @param Decisions $decisions Used to check previous decisions and to
-     *     register decisions resulting from propagation
+     * @param  int       $decidedLiteral The literal which was decided (A in our example)
+     * @param  int       $level          The level at which the decision took place and at which
+     *                                   all resulting decisions should be made.
+     * @param  Decisions $decisions      Used to check previous decisions and to
+     *                                   register decisions resulting from propagation
      * @return Rule|null If a conflict is found the conflicting rule is returned
      */
     public function propagateLiteral($decidedLiteral, $level, $decisions)
@@ -95,7 +95,7 @@ class RuleWatchGraph
             $otherWatch = $node->getOtherWatch($literal);
 
             if (!$node->getRule()->isDisabled() && !$decisions->satisfy($otherWatch)) {
-                $ruleLiterals = $node->getRule()->getLiterals();
+                $ruleLiterals = $node->getRule()->literals;
 
                 $alternativeLiterals = array_filter($ruleLiterals, function ($ruleLiteral) use ($literal, $otherWatch, $decisions) {
                     return $literal !== $ruleLiteral &&
diff --git a/vendor/composer/composer/src/Composer/DependencyResolver/RuleWatchNode.php b/vendor/composer/composer/src/Composer/DependencyResolver/RuleWatchNode.php
index a08337f..cdbf6a0 100644
--- a/vendor/composer/composer/src/Composer/DependencyResolver/RuleWatchNode.php
+++ b/vendor/composer/composer/src/Composer/DependencyResolver/RuleWatchNode.php
@@ -35,7 +35,7 @@ class RuleWatchNode
     {
         $this->rule = $rule;
 
-        $literals = $rule->getLiterals();
+        $literals = $rule->literals;
 
         $this->watch1 = count($literals) > 0 ? $literals[0] : 0;
         $this->watch2 = count($literals) > 1 ? $literals[1] : 0;
@@ -51,10 +51,10 @@ class RuleWatchNode
      */
     public function watch2OnHighest(Decisions $decisions)
     {
-        $literals = $this->rule->getLiterals();
+        $literals = $this->rule->literals;
 
         // if there are only 2 elements, both are being watched anyway
-        if ($literals < 3) {
+        if (count($literals) < 3) {
             return;
         }
 
diff --git a/vendor/composer/composer/src/Composer/DependencyResolver/Solver.php b/vendor/composer/composer/src/Composer/DependencyResolver/Solver.php
index 0fc860c..19e6991 100644
--- a/vendor/composer/composer/src/Composer/DependencyResolver/Solver.php
+++ b/vendor/composer/composer/src/Composer/DependencyResolver/Solver.php
@@ -13,6 +13,7 @@
 namespace Composer\DependencyResolver;
 
 use Composer\Repository\RepositoryInterface;
+use Composer\Repository\PlatformRepository;
 
 /**
  * @author Nils Adermann <naderman@naderman.de>
@@ -55,13 +56,13 @@ class Solver
 
         $rulesCount = count($this->rules);
         for ($ruleIndex = 0; $ruleIndex < $rulesCount; $ruleIndex++) {
-            $rule = $this->rules->ruleById($ruleIndex);
+            $rule = $this->rules->ruleById[$ruleIndex];
 
             if (!$rule->isAssertion() || $rule->isDisabled()) {
                 continue;
             }
 
-            $literals = $rule->getLiterals();
+            $literals = $rule->literals;
             $literal = $literals[0];
 
             if (!$this->decisions->decided(abs($literal))) {
@@ -82,7 +83,6 @@ class Solver
             $conflict = $this->decisions->decisionRule($literal);
 
             if ($conflict && RuleSet::TYPE_PACKAGE === $conflict->getType()) {
-
                 $problem = new Problem($this->pool);
 
                 $problem->addRule($rule);
@@ -104,7 +104,7 @@ class Solver
                     continue;
                 }
 
-                $assertRuleLiterals = $assertRule->getLiterals();
+                $assertRuleLiterals = $assertRule->literals;
                 $assertRuleLiteral = $assertRuleLiterals[0];
 
                 if (abs($literal) !== abs($assertRuleLiteral)) {
@@ -125,29 +125,37 @@ class Solver
     {
         $this->installedMap = array();
         foreach ($this->installed->getPackages() as $package) {
-            $this->installedMap[$package->getId()] = $package;
+            $this->installedMap[$package->id] = $package;
         }
+    }
 
+    protected function checkForRootRequireProblems($ignorePlatformReqs)
+    {
         foreach ($this->jobs as $job) {
             switch ($job['cmd']) {
                 case 'update':
-                    foreach ($job['packages'] as $package) {
-                        if (isset($this->installedMap[$package->getId()])) {
-                            $this->updateMap[$package->getId()] = true;
+                    $packages = $this->pool->whatProvides($job['packageName'], $job['constraint']);
+                    foreach ($packages as $package) {
+                        if (isset($this->installedMap[$package->id])) {
+                            $this->updateMap[$package->id] = true;
                         }
                     }
                     break;
 
                 case 'update-all':
                     foreach ($this->installedMap as $package) {
-                        $this->updateMap[$package->getId()] = true;
+                        $this->updateMap[$package->id] = true;
                     }
                     break;
 
                 case 'install':
-                    if (!$job['packages']) {
+                    if ($ignorePlatformReqs && preg_match(PlatformRepository::PLATFORM_PACKAGE_REGEX, $job['packageName'])) {
+                        break;
+                    }
+
+                    if (!$this->pool->whatProvides($job['packageName'], $job['constraint'])) {
                         $problem = new Problem($this->pool);
-                        $problem->addRule(new Rule($this->pool, array(), null, null, $job));
+                        $problem->addRule(new Rule(array(), null, null, $job));
                         $this->problems[] = $problem;
                     }
                     break;
@@ -155,15 +163,14 @@ class Solver
         }
     }
 
-    public function solve(Request $request)
+    public function solve(Request $request, $ignorePlatformReqs = false)
     {
         $this->jobs = $request->getJobs();
 
         $this->setupInstalledMap();
-
+        $this->rules = $this->ruleSetGenerator->getRulesFor($this->jobs, $this->installedMap, $ignorePlatformReqs);
+        $this->checkForRootRequireProblems($ignorePlatformReqs);
         $this->decisions = new Decisions($this->pool);
-
-        $this->rules = $this->ruleSetGenerator->getRulesFor($this->jobs, $this->installedMap);
         $this->watchGraph = new RuleWatchGraph;
 
         foreach ($this->rules as $rule) {
@@ -349,7 +356,7 @@ class Solver
         while (true) {
             $this->learnedPool[count($this->learnedPool) - 1][] = $rule;
 
-            foreach ($rule->getLiterals() as $literal) {
+            foreach ($rule->literals as $literal) {
                 // skip the one true literal
                 if ($this->decisions->satisfy($literal)) {
                     continue;
@@ -434,7 +441,7 @@ class Solver
             );
         }
 
-        $newRule = new Rule($this->pool, $learnedLiterals, Rule::RULE_LEARNED, $why);
+        $newRule = new Rule($learnedLiterals, Rule::RULE_LEARNED, $why);
 
         return array($learnedLiterals[0], $ruleLevel, $newRule, $why);
     }
@@ -473,7 +480,7 @@ class Solver
         $this->problems[] = $problem;
 
         $seen = array();
-        $literals = $conflictRule->getLiterals();
+        $literals = $conflictRule->literals;
 
         foreach ($literals as $literal) {
             // skip the one true literal
@@ -496,7 +503,7 @@ class Solver
             $problem->addRule($why);
             $this->analyzeUnsolvableRule($problem, $why);
 
-            $literals = $why->getLiterals();
+            $literals = $why->literals;
 
             foreach ($literals as $literal) {
                 // skip the one true literal
@@ -601,7 +608,6 @@ class Solver
         $installedPos = 0;
 
         while (true) {
-
             if (1 === $level) {
                 $conflictRule = $this->propagate($level);
                 if (null !== $conflictRule) {
@@ -621,7 +627,7 @@ class Solver
                         $decisionQueue = array();
                         $noneSatisfied = true;
 
-                        foreach ($rule->getLiterals() as $literal) {
+                        foreach ($rule->literals as $literal) {
                             if ($this->decisions->satisfy($literal)) {
                                 $noneSatisfied = false;
                                 break;
@@ -650,7 +656,6 @@ class Solver
                         }
 
                         if ($noneSatisfied && count($decisionQueue)) {
-
                             $oLevel = $level;
                             $level = $this->selectAndInstall($level, $decisionQueue, $disableRules, $rule);
 
@@ -682,8 +687,8 @@ class Solver
                     $i = 0;
                 }
 
-                $rule = $this->rules->ruleById($i);
-                $literals = $rule->getLiterals();
+                $rule = $this->rules->ruleById[$i];
+                $literals = $rule->literals;
 
                 if ($rule->isDisabled()) {
                     continue;
@@ -734,7 +739,6 @@ class Solver
 
             // minimization step
             if (count($this->branches)) {
-
                 $lastLiteral = null;
                 $lastLevel = null;
                 $lastBranchIndex = 0;
diff --git a/vendor/composer/composer/src/Composer/DependencyResolver/Transaction.php b/vendor/composer/composer/src/Composer/DependencyResolver/Transaction.php
index 4c1fb12..b847164 100644
--- a/vendor/composer/composer/src/Composer/DependencyResolver/Transaction.php
+++ b/vendor/composer/composer/src/Composer/DependencyResolver/Transaction.php
@@ -13,7 +13,6 @@
 namespace Composer\DependencyResolver;
 
 use Composer\Package\AliasPackage;
-use Composer\DependencyResolver\Operation;
 
 /**
  * @author Nils Adermann <naderman@naderman.de>
@@ -50,16 +49,15 @@ class Transaction
             $package = $this->pool->literalToPackage($literal);
 
             // wanted & installed || !wanted & !installed
-            if (($literal > 0) == (isset($this->installedMap[$package->getId()]))) {
+            if (($literal > 0) == (isset($this->installedMap[$package->id]))) {
                 continue;
             }
 
             if ($literal > 0) {
                 if (isset($installMeansUpdateMap[abs($literal)]) && !$package instanceof AliasPackage) {
-
                     $source = $installMeansUpdateMap[abs($literal)];
 
-                    $updateMap[$package->getId()] = array(
+                    $updateMap[$package->id] = array(
                         'package' => $package,
                         'source' => $source,
                         'reason' => $reason,
@@ -67,9 +65,9 @@ class Transaction
 
                     // avoid updates to one package from multiple origins
                     unset($installMeansUpdateMap[abs($literal)]);
-                    $ignoreRemove[$source->getId()] = true;
+                    $ignoreRemove[$source->id] = true;
                 } else {
-                    $installMap[$package->getId()] = array(
+                    $installMap[$package->id] = array(
                         'package' => $package,
                         'reason' => $reason,
                     );
@@ -79,16 +77,16 @@ class Transaction
 
         foreach ($this->decisions as $i => $decision) {
             $literal = $decision[Decisions::DECISION_LITERAL];
+            $reason = $decision[Decisions::DECISION_REASON];
             $package = $this->pool->literalToPackage($literal);
 
             if ($literal <= 0 &&
-                isset($this->installedMap[$package->getId()]) &&
-                !isset($ignoreRemove[$package->getId()])) {
-                $uninstallMap[$package->getId()] = array(
+                isset($this->installedMap[$package->id]) &&
+                !isset($ignoreRemove[$package->id])) {
+                $uninstallMap[$package->id] = array(
                     'package' => $package,
                     'reason' => $reason,
                 );
-
             }
         }
 
@@ -109,7 +107,7 @@ class Transaction
 
         while (!empty($queue)) {
             $package = array_pop($queue);
-            $packageId = $package->getId();
+            $packageId = $package->id;
 
             if (!isset($visited[$packageId])) {
                 array_push($queue, $package);
@@ -126,7 +124,7 @@ class Transaction
                     }
                 }
 
-                $visited[$package->getId()] = true;
+                $visited[$package->id] = true;
             } else {
                 if (isset($installMap[$packageId])) {
                     $this->install(
@@ -167,7 +165,7 @@ class Transaction
                 $possibleRequires = $this->pool->whatProvides($link->getTarget(), $link->getConstraint());
 
                 foreach ($possibleRequires as $require) {
-                    unset($roots[$require->getId()]);
+                    unset($roots[$require->id]);
                 }
             }
         }
@@ -188,13 +186,13 @@ class Transaction
             }
 
             // !wanted & installed
-            if ($literal <= 0 && isset($this->installedMap[$package->getId()])) {
+            if ($literal <= 0 && isset($this->installedMap[$package->id])) {
                 $updates = $this->policy->findUpdatePackages($this->pool, $this->installedMap, $package);
 
-                $literals = array($package->getId());
+                $literals = array($package->id);
 
                 foreach ($updates as $update) {
-                    $literals[] = $update->getId();
+                    $literals[] = $update->id;
                 }
 
                 foreach ($literals as $updateLiteral) {
diff --git a/vendor/composer/composer/src/Composer/Downloader/ArchiveDownloader.php b/vendor/composer/composer/src/Composer/Downloader/ArchiveDownloader.php
index bfe174f..204c091 100644
--- a/vendor/composer/composer/src/Composer/Downloader/ArchiveDownloader.php
+++ b/vendor/composer/composer/src/Composer/Downloader/ArchiveDownloader.php
@@ -13,6 +13,7 @@
 namespace Composer\Downloader;
 
 use Composer\Package\PackageInterface;
+use Symfony\Component\Finder\Finder;
 
 /**
  * Base downloader for archives
@@ -47,22 +48,28 @@ abstract class ArchiveDownloader extends FileDownloader
                     throw $e;
                 }
 
-                unlink($fileName);
+                $this->filesystem->unlink($fileName);
 
-                // get file list
-                $contentDir = $this->listFiles($temporaryDir);
+                $contentDir = $this->getFolderContent($temporaryDir);
 
                 // only one dir in the archive, extract its contents out of it
-                if (1 === count($contentDir) && !is_file($contentDir[0])) {
-                    $contentDir = $this->listFiles($contentDir[0]);
+                if (1 === count($contentDir) && is_dir(reset($contentDir))) {
+                    $contentDir = $this->getFolderContent((string) reset($contentDir));
                 }
 
                 // move files back out of the temp dir
                 foreach ($contentDir as $file) {
+                    $file = (string) $file;
                     $this->filesystem->rename($file, $path . '/' . basename($file));
                 }
 
                 $this->filesystem->removeDirectory($temporaryDir);
+                if ($this->filesystem->isDirEmpty($this->config->get('vendor-dir').'/composer/')) {
+                    $this->filesystem->removeDirectory($this->config->get('vendor-dir').'/composer/');
+                }
+                if ($this->filesystem->isDirEmpty($this->config->get('vendor-dir'))) {
+                    $this->filesystem->removeDirectory($this->config->get('vendor-dir'));
+                }
             } catch (\Exception $e) {
                 // clean up
                 $this->filesystem->removeDirectory($path);
@@ -128,14 +135,19 @@ abstract class ArchiveDownloader extends FileDownloader
     abstract protected function extract($file, $path);
 
     /**
-     * Returns the list of files in a directory including dotfiles
+     * Returns the folder content, excluding dotfiles
+     *
+     * @param  string         $dir Directory
+     * @return \SplFileInfo[]
      */
-    private function listFiles($dir)
+    private function getFolderContent($dir)
     {
-        $files = array_merge(glob($dir . '/.*') ?: array(), glob($dir . '/*') ?: array());
+        $finder = Finder::create()
+            ->ignoreVCS(false)
+            ->ignoreDotFiles(false)
+            ->depth(0)
+            ->in($dir);
 
-        return array_values(array_filter($files, function ($el) {
-            return basename($el) !== '.' && basename($el) !== '..';
-        }));
+        return iterator_to_array($finder);
     }
 }
diff --git a/vendor/composer/composer/src/Composer/Downloader/DownloadManager.php b/vendor/composer/composer/src/Composer/Downloader/DownloadManager.php
index e1eb1a9..4bbbae5 100644
--- a/vendor/composer/composer/src/Composer/Downloader/DownloadManager.php
+++ b/vendor/composer/composer/src/Composer/Downloader/DownloadManager.php
@@ -13,7 +13,7 @@
 namespace Composer\Downloader;
 
 use Composer\Package\PackageInterface;
-use Composer\Downloader\DownloaderInterface;
+use Composer\IO\IOInterface;
 use Composer\Util\Filesystem;
 
 /**
@@ -23,6 +23,7 @@ use Composer\Util\Filesystem;
  */
 class DownloadManager
 {
+    private $io;
     private $preferDist = false;
     private $preferSource = false;
     private $filesystem;
@@ -31,11 +32,13 @@ class DownloadManager
     /**
      * Initializes download manager.
      *
+     * @param IOInterface     $io           The Input Output Interface
      * @param bool            $preferSource prefer downloading from source
      * @param Filesystem|null $filesystem   custom Filesystem object
      */
-    public function __construct($preferSource = false, Filesystem $filesystem = null)
+    public function __construct(IOInterface $io, $preferSource = false, Filesystem $filesystem = null)
     {
+        $this->io = $io;
         $this->preferSource = $preferSource;
         $this->filesystem = $filesystem ?: new Filesystem();
     }
@@ -100,7 +103,7 @@ class DownloadManager
     /**
      * Returns downloader for a specific installation type.
      *
-     * @param string $type installation type
+     * @param  string              $type installation type
      * @return DownloaderInterface
      *
      * @throws \InvalidArgumentException if downloader for provided type is not registered
@@ -118,12 +121,12 @@ class DownloadManager
     /**
      * Returns downloader for already installed package.
      *
-     * @param PackageInterface $package package instance
+     * @param  PackageInterface         $package package instance
      * @return DownloaderInterface|null
      *
      * @throws \InvalidArgumentException if package has no installation source specified
      * @throws \LogicException           if specific downloader used to load package with
-     *                                          wrong type
+     *                                   wrong type
      */
     public function getDownloaderForInstalledPackage(PackageInterface $package)
     {
@@ -161,6 +164,7 @@ class DownloadManager
      * @param bool             $preferSource prefer installation from source
      *
      * @throws \InvalidArgumentException if package have no urls to download from
+     * @throws \RuntimeException
      */
     public function download(PackageInterface $package, $targetDir, $preferSource = null)
     {
@@ -168,18 +172,48 @@ class DownloadManager
         $sourceType   = $package->getSourceType();
         $distType     = $package->getDistType();
 
-        if ((!$package->isDev() || $this->preferDist || !$sourceType) && !($preferSource && $sourceType) && $distType) {
-            $package->setInstallationSource('dist');
-        } elseif ($sourceType) {
-            $package->setInstallationSource('source');
-        } else {
+        $sources = array();
+        if ($sourceType) {
+            $sources[] = 'source';
+        }
+        if ($distType) {
+            $sources[] = 'dist';
+        }
+
+        if (empty($sources)) {
             throw new \InvalidArgumentException('Package '.$package.' must have a source or dist specified');
         }
 
+        if ((!$package->isDev() || $this->preferDist) && !$preferSource) {
+            $sources = array_reverse($sources);
+        }
+
         $this->filesystem->ensureDirectoryExists($targetDir);
 
-        $downloader = $this->getDownloaderForInstalledPackage($package);
-        $downloader->download($package, $targetDir);
+        foreach ($sources as $i => $source) {
+            if (isset($e)) {
+                $this->io->write('    <warning>Now trying to download from ' . $source . '</warning>');
+            }
+            $package->setInstallationSource($source);
+            try {
+                $downloader = $this->getDownloaderForInstalledPackage($package);
+                if ($downloader) {
+                    $downloader->download($package, $targetDir);
+                }
+                break;
+            } catch (\RuntimeException $e) {
+                if ($i === count($sources) - 1) {
+                    throw $e;
+                }
+
+                $this->io->write(
+                    '    <warning>Failed to download '.
+                    $package->getPrettyName().
+                    ' from ' . $source . ': '.
+                    $e->getMessage().'</warning>'
+                );
+            }
+        }
     }
 
     /**
@@ -194,6 +228,10 @@ class DownloadManager
     public function update(PackageInterface $initial, PackageInterface $target, $targetDir)
     {
         $downloader = $this->getDownloaderForInstalledPackage($initial);
+        if (!$downloader) {
+            return;
+        }
+
         $installationSource = $initial->getInstallationSource();
 
         if ('dist' === $installationSource) {
@@ -230,6 +268,8 @@ class DownloadManager
     public function remove(PackageInterface $package, $targetDir)
     {
         $downloader = $this->getDownloaderForInstalledPackage($package);
-        $downloader->remove($package, $targetDir);
+        if ($downloader) {
+            $downloader->remove($package, $targetDir);
+        }
     }
 }
diff --git a/vendor/composer/composer/src/Composer/Downloader/FileDownloader.php b/vendor/composer/composer/src/Composer/Downloader/FileDownloader.php
index 2f8c048..0c03f18 100644
--- a/vendor/composer/composer/src/Composer/Downloader/FileDownloader.php
+++ b/vendor/composer/composer/src/Composer/Downloader/FileDownloader.php
@@ -21,7 +21,6 @@ use Composer\Plugin\PluginEvents;
 use Composer\Plugin\PreFileDownloadEvent;
 use Composer\EventDispatcher\EventDispatcher;
 use Composer\Util\Filesystem;
-use Composer\Util\GitHub;
 use Composer\Util\RemoteFilesystem;
 
 /**
@@ -56,11 +55,10 @@ class FileDownloader implements DownloaderInterface
         $this->io = $io;
         $this->config = $config;
         $this->eventDispatcher = $eventDispatcher;
-        $this->rfs = $rfs ?: new RemoteFilesystem($io);
+        $this->rfs = $rfs ?: new RemoteFilesystem($io, $config);
         $this->filesystem = $filesystem ?: new Filesystem();
         $this->cache = $cache;
 
-
         if ($this->cache && $this->cache->gcIsNecessary()) {
             $this->cache->gc($config->get('cache-files-ttl'), $config->get('cache-files-maxsize'));
         }
@@ -79,17 +77,39 @@ class FileDownloader implements DownloaderInterface
      */
     public function download(PackageInterface $package, $path)
     {
-        $url = $package->getDistUrl();
-        if (!$url) {
+        if (!$package->getDistUrl()) {
             throw new \InvalidArgumentException('The given package is missing url information');
         }
 
-        $this->filesystem->removeDirectory($path);
-        $this->filesystem->ensureDirectoryExists($path);
+        $this->io->write("  - Installing <info>" . $package->getName() . "</info> (<comment>" . VersionParser::formatVersion($package) . "</comment>)");
 
-        $fileName = $this->getFileName($package, $path);
+        $urls = $package->getDistUrls();
+        while ($url = array_shift($urls)) {
+            try {
+                return $this->doDownload($package, $path, $url);
+            } catch (\Exception $e) {
+                if ($this->io->isDebug()) {
+                    $this->io->write('');
+                    $this->io->write('Failed: ['.get_class($e).'] '.$e->getMessage());
+                } elseif (count($urls)) {
+                    $this->io->write('');
+                    $this->io->write('    Failed, trying the next URL');
+                }
 
-        $this->io->write("  - Installing <info>" . $package->getName() . "</info> (<comment>" . VersionParser::formatVersion($package) . "</comment>)");
+                if (!count($urls)) {
+                    throw $e;
+                }
+            }
+        }
+
+        $this->io->write('');
+    }
+
+    protected function doDownload(PackageInterface $package, $path, $url)
+    {
+        $this->filesystem->emptyDirectory($path);
+
+        $fileName = $this->getFileName($package, $path);
 
         $processedUrl = $this->processUrl($package, $url);
         $hostname = parse_url($processedUrl, PHP_URL_HOST);
@@ -100,61 +120,39 @@ class FileDownloader implements DownloaderInterface
         }
         $rfs = $preFileDownloadEvent->getRemoteFilesystem();
 
-        if (strpos($hostname, '.github.com') === (strlen($hostname) - 11)) {
-            $hostname = 'github.com';
-        }
-
         try {
             $checksum = $package->getDistSha1Checksum();
             $cacheKey = $this->getCacheKey($package);
 
-            try {
-                // download if we don't have it in cache or the cache is invalidated
-                if (!$this->cache || ($checksum && $checksum !== $this->cache->sha1($cacheKey)) || !$this->cache->copyTo($cacheKey, $fileName)) {
-                    if (!$this->outputProgress) {
-                        $this->io->write('    Downloading');
-                    }
+            // download if we don't have it in cache or the cache is invalidated
+            if (!$this->cache || ($checksum && $checksum !== $this->cache->sha1($cacheKey)) || !$this->cache->copyTo($cacheKey, $fileName)) {
+                if (!$this->outputProgress) {
+                    $this->io->write('    Downloading');
+                }
 
-                    // try to download 3 times then fail hard
-                    $retries = 3;
-                    while ($retries--) {
-                        try {
-                            $rfs->copy($hostname, $processedUrl, $fileName, $this->outputProgress);
-                            break;
-                        } catch (TransportException $e) {
-                            // if we got an http response with a proper code, then requesting again will probably not help, abort
-                            if ((0 !== $e->getCode() && !in_array($e->getCode(),array(500, 502, 503, 504))) || !$retries) {
-                                throw $e;
-                            }
-                            if ($this->io->isVerbose()) {
-                                $this->io->write('    Download failed, retrying...');
-                            }
-                            usleep(500000);
+                // try to download 3 times then fail hard
+                $retries = 3;
+                while ($retries--) {
+                    try {
+                        $rfs->copy($hostname, $processedUrl, $fileName, $this->outputProgress, $package->getTransportOptions());
+                        break;
+                    } catch (TransportException $e) {
+                        // if we got an http response with a proper code, then requesting again will probably not help, abort
+                        if ((0 !== $e->getCode() && !in_array($e->getCode(),array(500, 502, 503, 504))) || !$retries) {
+                            throw $e;
                         }
+                        if ($this->io->isVerbose()) {
+                            $this->io->write('    Download failed, retrying...');
+                        }
+                        usleep(500000);
                     }
-
-                    if ($this->cache) {
-                        $this->cache->copyFrom($cacheKey, $fileName);
-                    }
-                } else {
-                    $this->io->write('    Loading from cache');
-                }
-            } catch (TransportException $e) {
-                if (!in_array($e->getCode(), array(404, 403, 412))) {
-                    throw $e;
                 }
-                if ('github.com' === $hostname && !$this->io->hasAuthentication($hostname)) {
-                    $message = "\n".'Could not fetch '.$processedUrl.', enter your GitHub credentials '.($e->getCode() === 404 ? 'to access private repos' : 'to go over the API rate limit');
-                    $gitHubUtil = new GitHub($this->io, $this->config, null, $rfs);
-                    if (!$gitHubUtil->authorizeOAuth($hostname)
-                        && (!$this->io->isInteractive() || !$gitHubUtil->authorizeOAuthInteractively($hostname, $message))
-                    ) {
-                        throw $e;
-                    }
-                    $rfs->copy($hostname, $processedUrl, $fileName, $this->outputProgress);
-                } else {
-                    throw $e;
+
+                if ($this->cache) {
+                    $this->cache->copyFrom($cacheKey, $fileName);
                 }
+            } else {
+                $this->io->write('    Loading from cache');
             }
 
             if (!file_exists($fileName)) {
@@ -209,10 +207,7 @@ class FileDownloader implements DownloaderInterface
     {
         $this->io->write("  - Removing <info>" . $package->getName() . "</info> (<comment>" . VersionParser::formatVersion($package) . "</comment>)");
         if (!$this->filesystem->removeDirectory($path)) {
-            // retry after a bit on windows since it tends to be touchy with mass removals
-            if (!defined('PHP_WINDOWS_VERSION_BUILD') || (usleep(250000) && !$this->filesystem->removeDirectory($path))) {
-                throw new \RuntimeException('Could not completely delete '.$path.', aborting.');
-            }
+            throw new \RuntimeException('Could not completely delete '.$path.', aborting.');
         }
     }
 
diff --git a/vendor/composer/composer/src/Composer/Downloader/GitDownloader.php b/vendor/composer/composer/src/Composer/Downloader/GitDownloader.php
index 8103058..bdebaf4 100644
--- a/vendor/composer/composer/src/Composer/Downloader/GitDownloader.php
+++ b/vendor/composer/composer/src/Composer/Downloader/GitDownloader.php
@@ -15,6 +15,10 @@ namespace Composer\Downloader;
 use Composer\Package\PackageInterface;
 use Composer\Util\GitHub;
 use Composer\Util\Git as GitUtil;
+use Composer\Util\ProcessExecutor;
+use Composer\IO\IOInterface;
+use Composer\Util\Filesystem;
+use Composer\Config;
 
 /**
  * @author Jordi Boggiano <j.boggiano@seld.be>
@@ -22,26 +26,37 @@ use Composer\Util\Git as GitUtil;
 class GitDownloader extends VcsDownloader
 {
     private $hasStashedChanges = false;
+    private $gitUtil;
+
+    public function __construct(IOInterface $io, Config $config, ProcessExecutor $process = null, Filesystem $fs = null)
+    {
+        parent::__construct($io, $config, $process, $fs);
+        $this->gitUtil = new GitUtil($this->io, $this->config, $this->process, $this->filesystem);
+    }
 
     /**
      * {@inheritDoc}
      */
-    public function doDownload(PackageInterface $package, $path)
+    public function doDownload(PackageInterface $package, $path, $url)
     {
-        $this->cleanEnv();
+        GitUtil::cleanEnv();
         $path = $this->normalizePath($path);
 
         $ref = $package->getSourceReference();
         $flag = defined('PHP_WINDOWS_VERSION_MAJOR') ? '/D ' : '';
-        $command = 'git clone %s %s && cd '.$flag.'%2$s && git remote add composer %1$s && git fetch composer';
+        $command = 'git clone --no-checkout %s %s && cd '.$flag.'%2$s && git remote add composer %1$s && git fetch composer';
         $this->io->write("    Cloning ".$ref);
 
-        $commandCallable = function($url) use ($ref, $path, $command) {
-            return sprintf($command, escapeshellarg($url), escapeshellarg($path), escapeshellarg($ref));
+        $commandCallable = function ($url) use ($ref, $path, $command) {
+            return sprintf($command, ProcessExecutor::escape($url), ProcessExecutor::escape($path), ProcessExecutor::escape($ref));
         };
 
-        $this->runCommand($commandCallable, $package->getSourceUrl(), $path, true);
-        $this->setPushUrl($package, $path);
+        $this->gitUtil->runCommand($commandCallable, $url, $path, true);
+        if ($url !== $package->getSourceUrl()) {
+            $url = $package->getSourceUrl();
+            $this->process->execute(sprintf('git remote set-url origin %s', ProcessExecutor::escape($url)), $output, $path);
+        }
+        $this->setPushUrl($path, $url);
 
         if ($newRef = $this->updateToCommit($path, $ref, $package->getPrettyVersion(), $package->getReleaseDate())) {
             if ($package->getDistReference() === $package->getSourceReference()) {
@@ -54,9 +69,9 @@ class GitDownloader extends VcsDownloader
     /**
      * {@inheritDoc}
      */
-    public function doUpdate(PackageInterface $initial, PackageInterface $target, $path)
+    public function doUpdate(PackageInterface $initial, PackageInterface $target, $path, $url)
     {
-        $this->cleanEnv();
+        GitUtil::cleanEnv();
         $path = $this->normalizePath($path);
         if (!is_dir($path.'/.git')) {
             throw new \RuntimeException('The .git directory is missing from '.$path.', see http://getcomposer.org/commit-deps for more information');
@@ -66,17 +81,11 @@ class GitDownloader extends VcsDownloader
         $this->io->write("    Checking out ".$ref);
         $command = 'git remote set-url composer %s && git fetch composer && git fetch --tags composer';
 
-        // capture username/password from URL if there is one
-        $this->process->execute('git remote -v', $output, $path);
-        if (preg_match('{^(?:composer|origin)\s+https?://(.+):(.+)@([^/]+)}im', $output, $match)) {
-            $this->io->setAuthentication($match[3], urldecode($match[1]), urldecode($match[2]));
-        }
-
-        $commandCallable = function($url) use ($command) {
-            return sprintf($command, escapeshellarg($url));
+        $commandCallable = function ($url) use ($command) {
+            return sprintf($command, ProcessExecutor::escape ($url));
         };
 
-        $this->runCommand($commandCallable, $target->getSourceUrl(), $path);
+        $this->gitUtil->runCommand($commandCallable, $url, $path);
         if ($newRef =  $this->updateToCommit($path, $ref, $target->getPrettyVersion(), $target->getReleaseDate())) {
             if ($target->getDistReference() === $target->getSourceReference()) {
                 $target->setDistReference($newRef);
@@ -90,7 +99,7 @@ class GitDownloader extends VcsDownloader
      */
     public function getLocalChanges(PackageInterface $package, $path)
     {
-        $this->cleanEnv();
+        GitUtil::cleanEnv();
         $path = $this->normalizePath($path);
         if (!is_dir($path.'/.git')) {
             return;
@@ -109,7 +118,7 @@ class GitDownloader extends VcsDownloader
      */
     protected function cleanChanges(PackageInterface $package, $path, $update)
     {
-        $this->cleanEnv();
+        GitUtil::cleanEnv();
         $path = $this->normalizePath($path);
         if (!$changes = $this->getLocalChanges($package, $path)) {
             return;
@@ -186,7 +195,7 @@ class GitDownloader extends VcsDownloader
         $path = $this->normalizePath($path);
         if ($this->hasStashedChanges) {
             $this->hasStashedChanges = false;
-            $this->io->write('    <info>Re-applying stashed changes');
+            $this->io->write('    <info>Re-applying stashed changes</info>');
             if (0 !== $this->process->execute('git stash pop', $output, $path)) {
                 throw new \RuntimeException("Failed to apply stashed changes:\n\n".$this->process->getErrorOutput());
             }
@@ -194,13 +203,15 @@ class GitDownloader extends VcsDownloader
     }
 
     /**
-     * Updates the given apth to the given commit ref
+     * Updates the given path to the given commit ref
      *
-     * @param string $path
-     * @param string $reference
-     * @param string $branch
-     * @param DateTime $date
+     * @param  string      $path
+     * @param  string      $reference
+     * @param  string      $branch
+     * @param  \DateTime   $date
      * @return null|string if a string is returned, it is the commit reference that was checked out if the original could not be found
+     *
+     * @throws \RuntimeException
      */
     protected function updateToCommit($path, $reference, $branch, $date)
     {
@@ -218,7 +229,7 @@ class GitDownloader extends VcsDownloader
             && $branches
             && preg_match('{^\s+composer/'.preg_quote($reference).'$}m', $branches)
         ) {
-            $command = sprintf('git checkout -B %s %s && git reset --hard %2$s', escapeshellarg($branch), escapeshellarg('composer/'.$reference));
+            $command = sprintf('git checkout -B %s %s && git reset --hard %2$s', ProcessExecutor::escape($branch), ProcessExecutor::escape('composer/'.$reference));
             if (0 === $this->process->execute($command, $output, $path)) {
                 return;
             }
@@ -231,192 +242,41 @@ class GitDownloader extends VcsDownloader
                 $branch = 'v' . $branch;
             }
 
-            $command = sprintf('git checkout %s', escapeshellarg($branch));
-            $fallbackCommand = sprintf('git checkout -B %s %s', escapeshellarg($branch), escapeshellarg('composer/'.$branch));
+            $command = sprintf('git checkout %s', ProcessExecutor::escape($branch));
+            $fallbackCommand = sprintf('git checkout -B %s %s', ProcessExecutor::escape($branch), ProcessExecutor::escape('composer/'.$branch));
             if (0 === $this->process->execute($command, $output, $path)
                 || 0 === $this->process->execute($fallbackCommand, $output, $path)
             ) {
-                $command = sprintf('git reset --hard %s', escapeshellarg($reference));
+                $command = sprintf('git reset --hard %s', ProcessExecutor::escape($reference));
                 if (0 === $this->process->execute($command, $output, $path)) {
                     return;
                 }
             }
         }
 
-        $command = sprintf($template, escapeshellarg($gitRef));
+        $command = sprintf($template, ProcessExecutor::escape($gitRef));
         if (0 === $this->process->execute($command, $output, $path)) {
             return;
         }
 
         // reference was not found (prints "fatal: reference is not a tree: $ref")
-        if ($date && false !== strpos($this->process->getErrorOutput(), $reference)) {
-            $date = $date->format('U');
-
-            // guess which remote branch to look at first
-            $command = 'git branch -r';
-            if (0 !== $this->process->execute($command, $output, $path)) {
-                throw new \RuntimeException('Failed to execute ' . $command . "\n\n" . $this->process->getErrorOutput());
-            }
-
-            $guessTemplate = 'git log --until=%s --date=raw -n1 --pretty=%%H %s';
-            foreach ($this->process->splitLines($output) as $line) {
-                if (preg_match('{^composer/'.preg_quote($branch).'(?:\.x)?$}i', trim($line))) {
-                    // find the previous commit by date in the given branch
-                    if (0 === $this->process->execute(sprintf($guessTemplate, $date, escapeshellarg(trim($line))), $output, $path)) {
-                        $newReference = trim($output);
-                    }
-
-                    break;
-                }
-            }
-
-            if (empty($newReference)) {
-                // no matching branch found, find the previous commit by date in all commits
-                if (0 !== $this->process->execute(sprintf($guessTemplate, $date, '--all'), $output, $path)) {
-                    throw new \RuntimeException('Failed to execute ' . $this->sanitizeUrl($command) . "\n\n" . $this->process->getErrorOutput());
-                }
-                $newReference = trim($output);
-            }
-
-            // checkout the new recovered ref
-            $command = sprintf($template, escapeshellarg($newReference));
-            if (0 === $this->process->execute($command, $output, $path)) {
-                $this->io->write('    '.$reference.' is gone (history was rewritten?), recovered by checking out '.$newReference);
-
-                return $newReference;
-            }
+        if (false !== strpos($this->process->getErrorOutput(), $reference)) {
+            $this->io->write('    <warning>'.$reference.' is gone (history was rewritten?)</warning>');
         }
 
-        throw new \RuntimeException('Failed to execute ' . $this->sanitizeUrl($command) . "\n\n" . $this->process->getErrorOutput());
+        throw new \RuntimeException('Failed to execute ' . GitUtil::sanitizeUrl($command) . "\n\n" . $this->process->getErrorOutput());
     }
 
-    /**
-     * Runs a command doing attempts for each protocol supported by github.
-     *
-     * @param  callable                  $commandCallable A callable building the command for the given url
-     * @param  string                    $url
-     * @param  string                    $cwd
-     * @param  bool                      $initialClone    If true, the directory if cleared between every attempt
-     * @throws \InvalidArgumentException
-     * @throws \RuntimeException
-     */
-    protected function runCommand($commandCallable, $url, $cwd, $initialClone = false)
-    {
-        if ($initialClone) {
-            $origCwd = $cwd;
-            $cwd = null;
-        }
-
-        if (preg_match('{^ssh://[^@]+@[^:]+:[^0-9]+}', $url)) {
-            throw new \InvalidArgumentException('The source URL '.$url.' is invalid, ssh URLs should have a port number after ":".'."\n".'Use ssh://git@example.com:22/path or just git@example.com:path if you do not want to provide a password or custom port.');
-        }
-
-        // public github, autoswitch protocols
-        if (preg_match('{^(?:https?|git)(://'.$this->getGitHubDomainsRegex().'/.*)}', $url, $match)) {
-            $protocols = $this->config->get('github-protocols');
-            if (!is_array($protocols)) {
-                throw new \RuntimeException('Config value "github-protocols" must be an array, got '.gettype($protocols));
-            }
-            $messages = array();
-            foreach ($protocols as $protocol) {
-                $url = $protocol . $match[1];
-                if (0 === $this->process->execute(call_user_func($commandCallable, $url), $ignoredOutput, $cwd)) {
-                    return;
-                }
-                $messages[] = '- ' . $url . "\n" . preg_replace('#^#m', '  ', $this->process->getErrorOutput());
-                if ($initialClone) {
-                    $this->filesystem->removeDirectory($origCwd);
-                }
-            }
-
-            // failed to checkout, first check git accessibility
-            $this->throwException('Failed to clone ' . $this->sanitizeUrl($url) .' via '.implode(', ', $protocols).' protocols, aborting.' . "\n\n" . implode("\n", $messages), $url);
-        }
-
-        $command = call_user_func($commandCallable, $url);
-        if (0 !== $this->process->execute($command, $ignoredOutput, $cwd)) {
-            // private github repository without git access, try https with auth
-            if (preg_match('{^git@'.$this->getGitHubDomainsRegex().':(.+?)\.git$}i', $url, $match)) {
-                if (!$this->io->hasAuthentication($match[1])) {
-                    $gitHubUtil = new GitHub($this->io, $this->config, $this->process);
-                    $message = 'Cloning failed using an ssh key for authentication, enter your GitHub credentials to access private repos';
-
-                    if (!$gitHubUtil->authorizeOAuth($match[1]) && $this->io->isInteractive()) {
-                        $gitHubUtil->authorizeOAuthInteractively($match[1], $message);
-                    }
-                }
-
-                if ($this->io->hasAuthentication($match[1])) {
-                    $auth = $this->io->getAuthentication($match[1]);
-                    $url = 'https://'.urlencode($auth['username']) . ':' . urlencode($auth['password']) . '@'.$match[1].'/'.$match[2].'.git';
-
-                    $command = call_user_func($commandCallable, $url);
-                    if (0 === $this->process->execute($command, $ignoredOutput, $cwd)) {
-                        return;
-                    }
-                }
-            } elseif ( // private non-github repo that failed to authenticate
-                $this->io->isInteractive() &&
-                preg_match('{(https?://)([^/]+)(.*)$}i', $url, $match) &&
-                strpos($this->process->getErrorOutput(), 'fatal: Authentication failed') !== false
-            ) {
-                // TODO this should use an auth manager class that prompts and stores in the config
-                if ($this->io->hasAuthentication($match[2])) {
-                    $auth = $this->io->getAuthentication($match[2]);
-                } else {
-                    $this->io->write($url.' requires Authentication');
-                    $auth = array(
-                        'username'  => $this->io->ask('Username: '),
-                        'password'  => $this->io->askAndHideAnswer('Password: '),
-                    );
-                }
-
-                $url = $match[1].urlencode($auth['username']).':'.urlencode($auth['password']).'@'.$match[2].$match[3];
-
-                $command = call_user_func($commandCallable, $url);
-                if (0 === $this->process->execute($command, $ignoredOutput, $cwd)) {
-                    $this->io->setAuthentication($match[2], $auth['username'], $auth['password']);
-
-                    return;
-                }
-            }
-
-            if ($initialClone) {
-                $this->filesystem->removeDirectory($origCwd);
-            }
-            $this->throwException('Failed to execute ' . $this->sanitizeUrl($command) . "\n\n" . $this->process->getErrorOutput(), $url);
-        }
-    }
-
-    protected function getGitHubDomainsRegex()
-    {
-        return '('.implode('|', array_map('preg_quote', $this->config->get('github-domains'))).')';
-    }
-
-    protected function throwException($message, $url)
-    {
-        if (0 !== $this->process->execute('git --version', $ignoredOutput)) {
-            throw new \RuntimeException('Failed to clone '.$this->sanitizeUrl($url).', git was not found, check that it is installed and in your PATH env.' . "\n\n" . $this->process->getErrorOutput());
-        }
-
-        throw new \RuntimeException($message);
-    }
-
-    protected function sanitizeUrl($message)
-    {
-        return preg_replace('{://([^@]+?):.+?@}', '://$1:***@', $message);
-    }
-
-    protected function setPushUrl(PackageInterface $package, $path)
+    protected function setPushUrl($path, $url)
     {
         // set push url for github projects
-        if (preg_match('{^(?:https?|git)://'.$this->getGitHubDomainsRegex().'/([^/]+)/([^/]+?)(?:\.git)?$}', $package->getSourceUrl(), $match)) {
+        if (preg_match('{^(?:https?|git)://'.GitUtil::getGitHubDomainsRegex($this->config).'/([^/]+)/([^/]+?)(?:\.git)?$}', $url, $match)) {
             $protocols = $this->config->get('github-protocols');
             $pushUrl = 'git@'.$match[1].':'.$match[2].'/'.$match[3].'.git';
             if ($protocols[0] !== 'git') {
                 $pushUrl = 'https://' . $match[1] . '/'.$match[2].'/'.$match[3].'.git';
             }
-            $cmd = sprintf('git remote set-url --push origin %s', escapeshellarg($pushUrl));
+            $cmd = sprintf('git remote set-url --push origin %s', ProcessExecutor::escape($pushUrl));
             $this->process->execute($cmd, $ignoredOutput, $path);
         }
     }
@@ -462,12 +322,6 @@ class GitDownloader extends VcsDownloader
         $this->hasStashedChanges = true;
     }
 
-    protected function cleanEnv()
-    {
-        $util = new GitUtil;
-        $util->cleanEnv();
-    }
-
     protected function normalizePath($path)
     {
         if (defined('PHP_WINDOWS_VERSION_MAJOR') && strlen($path) > 0) {
diff --git a/vendor/composer/composer/src/Composer/Downloader/GzipDownloader.php b/vendor/composer/composer/src/Composer/Downloader/GzipDownloader.php
new file mode 100644
index 0000000..f8624ab
--- /dev/null
+++ b/vendor/composer/composer/src/Composer/Downloader/GzipDownloader.php
@@ -0,0 +1,70 @@
+<?php
+
+/*
+ * This file is part of Composer.
+ *
+ * (c) Nils Adermann <naderman@naderman.de>
+ *     Jordi Boggiano <j.boggiano@seld.be>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Composer\Downloader;
+
+use Composer\Config;
+use Composer\Cache;
+use Composer\EventDispatcher\EventDispatcher;
+use Composer\Package\PackageInterface;
+use Composer\Util\ProcessExecutor;
+use Composer\IO\IOInterface;
+
+/**
+ * GZip archive downloader.
+ *
+ * @author Pavel Puchkin <i@neoascetic.me>
+ */
+class GzipDownloader extends ArchiveDownloader
+{
+    protected $process;
+
+    public function __construct(IOInterface $io, Config $config, EventDispatcher $eventDispatcher = null, Cache $cache = null, ProcessExecutor $process = null)
+    {
+        $this->process = $process ?: new ProcessExecutor($io);
+        parent::__construct($io, $config, $eventDispatcher, $cache);
+    }
+
+    protected function extract($file, $path)
+    {
+        $targetFilepath = $path . DIRECTORY_SEPARATOR . basename(substr($file, 0, -3));
+
+        // Try to use gunzip on *nix
+        if (!defined('PHP_WINDOWS_VERSION_BUILD')) {
+            $command = 'gzip -cd ' . ProcessExecutor::escape($file) . ' > ' . ProcessExecutor::escape($targetFilepath);
+
+            if (0 === $this->process->execute($command, $ignoredOutput)) {
+                return;
+            }
+
+            $processError = 'Failed to execute ' . $command . "\n\n" . $this->process->getErrorOutput();
+            throw new \RuntimeException($processError);
+        }
+
+        // Windows version of PHP has built-in support of gzip functions
+        $archiveFile = gzopen($file, 'rb');
+        $targetFile = fopen($targetFilepath, 'wb');
+        while ($string = gzread($archiveFile, 4096)) {
+            fwrite($targetFile, $string, strlen($string));
+        }
+        gzclose($archiveFile);
+        fclose($targetFile);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    protected function getFileName(PackageInterface $package, $path)
+    {
+        return $path.'/'.pathinfo(parse_url($package->getDistUrl(), PHP_URL_PATH), PATHINFO_BASENAME);
+    }
+}
diff --git a/vendor/composer/composer/src/Composer/Downloader/HgDownloader.php b/vendor/composer/composer/src/Composer/Downloader/HgDownloader.php
index 7252bf4..3d5cc62 100644
--- a/vendor/composer/composer/src/Composer/Downloader/HgDownloader.php
+++ b/vendor/composer/composer/src/Composer/Downloader/HgDownloader.php
@@ -13,6 +13,7 @@
 namespace Composer\Downloader;
 
 use Composer\Package\PackageInterface;
+use Composer\Util\ProcessExecutor;
 
 /**
  * @author Per Bernhardt <plb@webfactory.de>
@@ -22,12 +23,12 @@ class HgDownloader extends VcsDownloader
     /**
      * {@inheritDoc}
      */
-    public function doDownload(PackageInterface $package, $path)
+    public function doDownload(PackageInterface $package, $path, $url)
     {
-        $url = escapeshellarg($package->getSourceUrl());
-        $ref = escapeshellarg($package->getSourceReference());
+        $url = ProcessExecutor::escape($url);
+        $ref = ProcessExecutor::escape($package->getSourceReference());
         $this->io->write("    Cloning ".$package->getSourceReference());
-        $command = sprintf('hg clone %s %s', $url, escapeshellarg($path));
+        $command = sprintf('hg clone %s %s', $url, ProcessExecutor::escape($path));
         if (0 !== $this->process->execute($command, $ignoredOutput)) {
             throw new \RuntimeException('Failed to execute ' . $command . "\n\n" . $this->process->getErrorOutput());
         }
@@ -40,10 +41,10 @@ class HgDownloader extends VcsDownloader
     /**
      * {@inheritDoc}
      */
-    public function doUpdate(PackageInterface $initial, PackageInterface $target, $path)
+    public function doUpdate(PackageInterface $initial, PackageInterface $target, $path, $url)
     {
-        $url = escapeshellarg($target->getSourceUrl());
-        $ref = escapeshellarg($target->getSourceReference());
+        $url = ProcessExecutor::escape($url);
+        $ref = ProcessExecutor::escape($target->getSourceReference());
         $this->io->write("    Updating to ".$target->getSourceReference());
 
         if (!is_dir($path.'/.hg')) {
diff --git a/vendor/composer/composer/src/Composer/Downloader/PearPackageExtractor.php b/vendor/composer/composer/src/Composer/Downloader/PearPackageExtractor.php
index 5310c7a..ff0c90a 100644
--- a/vendor/composer/composer/src/Composer/Downloader/PearPackageExtractor.php
+++ b/vendor/composer/composer/src/Composer/Downloader/PearPackageExtractor.php
@@ -127,19 +127,20 @@ class PearPackageExtractor
     /**
      * Builds list of copy and list of remove actions that would transform extracted PEAR tarball into installed package.
      *
-     * @param  string $source string path to extracted files
-     * @param  array  $roles  array [role => roleRoot] relative root for files having that role
-     * @param  array  $vars   list of values can be used for replacement tasks
-     * @return array  array of 'source' => 'target', where source is location of file in the tarball (relative to source
-     *  path, and target is destination of file (also relative to $source path)
+     * @param  string            $source string path to extracted files
+     * @param  array             $roles  array [role => roleRoot] relative root for files having that role
+     * @param  array             $vars   list of values can be used for replacement tasks
+     * @return array             array of 'source' => 'target', where source is location of file in the tarball (relative to source
+     *                                  path, and target is destination of file (also relative to $source path)
      * @throws \RuntimeException
      */
     private function buildCopyActions($source, array $roles, $vars)
     {
         /** @var $package \SimpleXmlElement */
         $package = simplexml_load_file($this->combine($source, 'package.xml'));
-        if(false === $package)
+        if (false === $package) {
             throw new \RuntimeException('Package definition file is not valid.');
+        }
 
         $packageSchemaVersion = $package['version'];
         if ('1.0' == $packageSchemaVersion) {
@@ -203,16 +204,16 @@ class PearPackageExtractor
             /** @var $child \SimpleXMLElement */
             if ($child->getName() == 'dir') {
                 $dirSource = $this->combine($source, (string) $child['name']);
-                $dirTarget = $child['baseinstalldir'] ? : $target;
-                $dirRole = $child['role'] ? : $role;
+                $dirTarget = $child['baseinstalldir'] ?: $target;
+                $dirRole = $child['role'] ?: $role;
                 $dirFiles = $this->buildSourceList10($child->children(), $targetRoles, $dirSource, $dirTarget, $dirRole, $packageName);
                 $result = array_merge($result, $dirFiles);
             } elseif ($child->getName() == 'file') {
-                $fileRole = (string) $child['role'] ? : $role;
+                $fileRole = (string) $child['role'] ?: $role;
                 if (isset($targetRoles[$fileRole])) {
-                    $fileName = (string) ($child['name'] ? : $child[0]); // $child[0] means text content
+                    $fileName = (string) ($child['name'] ?: $child[0]); // $child[0] means text content
                     $fileSource = $this->combine($source, $fileName);
-                    $fileTarget = $this->combine((string) $child['baseinstalldir'] ? : $target, $fileName);
+                    $fileTarget = $this->combine((string) $child['baseinstalldir'] ?: $target, $fileName);
                     if (!in_array($fileRole, self::$rolesWithoutPackageNamePrefix)) {
                         $fileTarget = $packageName . '/' . $fileTarget;
                     }
@@ -233,15 +234,15 @@ class PearPackageExtractor
             /** @var $child \SimpleXMLElement */
             if ('dir' == $child->getName()) {
                 $dirSource = $this->combine($source, $child['name']);
-                $dirTarget = $child['baseinstalldir'] ? : $target;
-                $dirRole = $child['role'] ? : $role;
+                $dirTarget = $child['baseinstalldir'] ?: $target;
+                $dirRole = $child['role'] ?: $role;
                 $dirFiles = $this->buildSourceList20($child->children(), $targetRoles, $dirSource, $dirTarget, $dirRole, $packageName);
                 $result = array_merge($result, $dirFiles);
             } elseif ('file' == $child->getName()) {
-                $fileRole = (string) $child['role'] ? : $role;
+                $fileRole = (string) $child['role'] ?: $role;
                 if (isset($targetRoles[$fileRole])) {
                     $fileSource = $this->combine($source, (string) $child['name']);
-                    $fileTarget = $this->combine((string) ($child['baseinstalldir'] ? : $target), (string) $child['name']);
+                    $fileTarget = $this->combine((string) ($child['baseinstalldir'] ?: $target), (string) $child['name']);
                     $fileTasks = array();
                     foreach ($child->children('http://pear.php.net/dtd/tasks-1.0') as $taskNode) {
                         if ('replace' == $taskNode->getName()) {
diff --git a/vendor/composer/composer/src/Composer/Downloader/PerforceDownloader.php b/vendor/composer/composer/src/Composer/Downloader/PerforceDownloader.php
index 2bb1ba6..683ea9f 100644
--- a/vendor/composer/composer/src/Composer/Downloader/PerforceDownloader.php
+++ b/vendor/composer/composer/src/Composer/Downloader/PerforceDownloader.php
@@ -22,18 +22,17 @@ use Composer\Util\Perforce;
 class PerforceDownloader extends VcsDownloader
 {
     protected $perforce;
-    protected $perforceInjected = false;
 
     /**
      * {@inheritDoc}
      */
-    public function doDownload(PackageInterface $package, $path)
+    public function doDownload(PackageInterface $package, $path, $url)
     {
         $ref = $package->getSourceReference();
-        $label = $package->getPrettyVersion();
+        $label = $this->getLabelFromSourceReference($ref);
 
         $this->io->write('    Cloning ' . $ref);
-        $this->initPerforce($package, $path);
+        $this->initPerforce($package, $path, $url);
         $this->perforce->setStream($ref);
         $this->perforce->p4Login($this->io);
         $this->perforce->writeP4ClientSpec();
@@ -42,10 +41,21 @@ class PerforceDownloader extends VcsDownloader
         $this->perforce->cleanupClientSpec();
     }
 
-    public function initPerforce($package, $path)
+    private function getLabelFromSourceReference($ref)
     {
-        if ($this->perforce) {
+        $pos = strpos($ref,'@');
+        if (false !== $pos) {
+            return substr($ref, $pos + 1);
+        }
+
+        return null;
+    }
+
+    public function initPerforce($package, $path, $url)
+    {
+        if (!empty($this->perforce)) {
             $this->perforce->initializePath($path);
+
             return;
         }
 
@@ -54,7 +64,7 @@ class PerforceDownloader extends VcsDownloader
         if ($repository instanceof VcsRepository) {
             $repoConfig = $this->getRepoConfig($repository);
         }
-        $this->perforce = Perforce::create($repoConfig, $package->getSourceUrl(), $path);
+        $this->perforce = Perforce::create($repoConfig, $url, $path, $this->process, $this->io);
     }
 
     private function getRepoConfig(VcsRepository $repository)
@@ -65,9 +75,9 @@ class PerforceDownloader extends VcsDownloader
     /**
      * {@inheritDoc}
      */
-    public function doUpdate(PackageInterface $initial, PackageInterface $target, $path)
+    public function doUpdate(PackageInterface $initial, PackageInterface $target, $path, $url)
     {
-        $this->doDownload($target, $path);
+        $this->doDownload($target, $path, $url);
     }
 
     /**
diff --git a/vendor/composer/composer/src/Composer/Downloader/RarDownloader.php b/vendor/composer/composer/src/Composer/Downloader/RarDownloader.php
index bb62ee0..1282342 100644
--- a/vendor/composer/composer/src/Composer/Downloader/RarDownloader.php
+++ b/vendor/composer/composer/src/Composer/Downloader/RarDownloader.php
@@ -42,7 +42,7 @@ class RarDownloader extends ArchiveDownloader
 
         // Try to use unrar on *nix
         if (!defined('PHP_WINDOWS_VERSION_BUILD')) {
-            $command = 'unrar x ' . escapeshellarg($file) . ' ' . escapeshellarg($path) . ' && chmod -R u+w ' . escapeshellarg($path);
+            $command = 'unrar x ' . ProcessExecutor::escape($file) . ' ' . ProcessExecutor::escape($path) . ' && chmod -R u+w ' . ProcessExecutor::escape($path);
 
             if (0 === $this->process->execute($command, $ignoredOutput)) {
                 return;
diff --git a/vendor/composer/composer/src/Composer/Downloader/SvnDownloader.php b/vendor/composer/composer/src/Composer/Downloader/SvnDownloader.php
index ec789c9..689781f 100644
--- a/vendor/composer/composer/src/Composer/Downloader/SvnDownloader.php
+++ b/vendor/composer/composer/src/Composer/Downloader/SvnDownloader.php
@@ -24,10 +24,10 @@ class SvnDownloader extends VcsDownloader
     /**
      * {@inheritDoc}
      */
-    public function doDownload(PackageInterface $package, $path)
+    public function doDownload(PackageInterface $package, $path, $url)
     {
-        $url =  $package->getSourceUrl();
-        $ref =  $package->getSourceReference();
+        SvnUtil::cleanEnv();
+        $ref = $package->getSourceReference();
 
         $this->io->write("    Checking out ".$package->getSourceReference());
         $this->execute($url, "svn co", sprintf("%s/%s", $url, $ref), null, $path);
@@ -36,17 +36,24 @@ class SvnDownloader extends VcsDownloader
     /**
      * {@inheritDoc}
      */
-    public function doUpdate(PackageInterface $initial, PackageInterface $target, $path)
+    public function doUpdate(PackageInterface $initial, PackageInterface $target, $path, $url)
     {
-        $url = $target->getSourceUrl();
+        SvnUtil::cleanEnv();
         $ref = $target->getSourceReference();
 
         if (!is_dir($path.'/.svn')) {
             throw new \RuntimeException('The .svn directory is missing from '.$path.', see http://getcomposer.org/commit-deps for more information');
         }
 
+        $flags = "";
+        if (0 === $this->process->execute('svn --version', $output)) {
+            if (preg_match('{(\d+(?:\.\d+)+)}', $output, $match) && version_compare($match[1], '1.7.0', '>=')) {
+                $flags .= ' --ignore-ancestry';
+            }
+        }
+
         $this->io->write("    Checking out " . $ref);
-        $this->execute($url, "svn switch", sprintf("%s/%s", $url, $ref), $path);
+        $this->execute($url, "svn switch" . $flags, sprintf("%s/%s", $url, $ref), $path);
     }
 
     /**
@@ -77,7 +84,7 @@ class SvnDownloader extends VcsDownloader
      */
     protected function execute($baseUrl, $command, $url, $cwd = null, $path = null)
     {
-        $util = new SvnUtil($baseUrl, $this->io);
+        $util = new SvnUtil($baseUrl, $this->io, $this->config);
         try {
             return $util->execute($command, $url, $cwd, $path, $this->io->isVerbose());
         } catch (\RuntimeException $e) {
@@ -144,14 +151,20 @@ class SvnDownloader extends VcsDownloader
      */
     protected function getCommitLogs($fromReference, $toReference, $path)
     {
-        // strip paths from references and only keep the actual revision
-        $fromRevision = preg_replace('{.*@(\d+)$}', '$1', $fromReference);
-        $toRevision = preg_replace('{.*@(\d+)$}', '$1', $toReference);
+        if (preg_match('{.*@(\d+)$}', $fromReference) && preg_match('{.*@(\d+)$}', $toReference) ) {
+            // strip paths from references and only keep the actual revision
+            $fromRevision = preg_replace('{.*@(\d+)$}', '$1', $fromReference);
+            $toRevision = preg_replace('{.*@(\d+)$}', '$1', $toReference);
 
-        $command = sprintf('svn log -r%s:%s --incremental', $fromRevision, $toRevision);
+            $command = sprintf('svn log -r%s:%s --incremental', $fromRevision, $toRevision);
 
-        if (0 !== $this->process->execute($command, $output, $path)) {
-            throw new \RuntimeException('Failed to execute ' . $command . "\n\n" . $this->process->getErrorOutput());
+            if (0 !== $this->process->execute($command, $output, $path)) {
+                throw new \RuntimeException(
+                    'Failed to execute ' . $command . "\n\n" . $this->process->getErrorOutput()
+                );
+            }
+        } else {
+            $output = "Could not retrieve changes between $fromReference and $toReference due to missing revision information";
         }
 
         return $output;
diff --git a/vendor/composer/composer/src/Composer/Downloader/TransportException.php b/vendor/composer/composer/src/Composer/Downloader/TransportException.php
index d157dde..2e4b42f 100644
--- a/vendor/composer/composer/src/Composer/Downloader/TransportException.php
+++ b/vendor/composer/composer/src/Composer/Downloader/TransportException.php
@@ -15,9 +15,10 @@ namespace Composer\Downloader;
 /**
  * @author Jordi Boggiano <j.boggiano@seld.be>
  */
-class TransportException extends \Exception
+class TransportException extends \RuntimeException
 {
     protected $headers;
+    protected $response;
 
     public function setHeaders($headers)
     {
@@ -28,4 +29,14 @@ class TransportException extends \Exception
     {
         return $this->headers;
     }
+
+    public function setResponse($response)
+    {
+        $this->response = $response;
+    }
+
+    public function getResponse()
+    {
+        return $this->response;
+    }
 }
diff --git a/vendor/composer/composer/src/Composer/Downloader/VcsDownloader.php b/vendor/composer/composer/src/Composer/Downloader/VcsDownloader.php
index 4e06d63..e653794 100644
--- a/vendor/composer/composer/src/Composer/Downloader/VcsDownloader.php
+++ b/vendor/composer/composer/src/Composer/Downloader/VcsDownloader.php
@@ -55,8 +55,28 @@ abstract class VcsDownloader implements DownloaderInterface, ChangeReportInterfa
         }
 
         $this->io->write("  - Installing <info>" . $package->getName() . "</info> (<comment>" . VersionParser::formatVersion($package) . "</comment>)");
-        $this->filesystem->removeDirectory($path);
-        $this->doDownload($package, $path);
+        $this->filesystem->emptyDirectory($path);
+
+        $urls = $package->getSourceUrls();
+        while ($url = array_shift($urls)) {
+            try {
+                if (Filesystem::isLocalPath($url)) {
+                    $url = realpath($url);
+                }
+                $this->doDownload($package, $path, $url);
+                break;
+            } catch (\Exception $e) {
+                if ($this->io->isDebug()) {
+                    $this->io->write('Failed: ['.get_class($e).'] '.$e->getMessage());
+                } elseif (count($urls)) {
+                    $this->io->write('    Failed, trying the next URL');
+                }
+                if (!count($urls)) {
+                    throw $e;
+                }
+            }
+        }
+
         $this->io->write('');
     }
 
@@ -87,17 +107,31 @@ abstract class VcsDownloader implements DownloaderInterface, ChangeReportInterfa
         $this->io->write("  - Updating <info>" . $name . "</info> (<comment>" . $from . "</comment> => <comment>" . $to . "</comment>)");
 
         $this->cleanChanges($initial, $path, true);
-        try {
-            $this->doUpdate($initial, $target, $path);
-        } catch (\Exception $e) {
-            // in case of failed update, try to reapply the changes before aborting
-            $this->reapplyChanges($path);
-
-            throw $e;
+        $urls = $target->getSourceUrls();
+        while ($url = array_shift($urls)) {
+            try {
+                if (Filesystem::isLocalPath($url)) {
+                    $url = realpath($url);
+                }
+                $this->doUpdate($initial, $target, $path, $url);
+                break;
+            } catch (\Exception $e) {
+                if ($this->io->isDebug()) {
+                    $this->io->write('Failed: ['.get_class($e).'] '.$e->getMessage());
+                } elseif (count($urls)) {
+                    $this->io->write('    Failed, trying the next URL');
+                } else {
+                    // in case of failed update, try to reapply the changes before aborting
+                    $this->reapplyChanges($path);
+
+                    throw $e;
+                }
+            }
         }
+
         $this->reapplyChanges($path);
 
-        //print the commit logs if in verbose mode
+        // print the commit logs if in verbose mode
         if ($this->io->isVerbose()) {
             $message = 'Pulling in changes:';
             $logs = $this->getCommitLogs($initial->getSourceReference(), $target->getSourceReference(), $path);
@@ -128,10 +162,7 @@ abstract class VcsDownloader implements DownloaderInterface, ChangeReportInterfa
         $this->io->write("  - Removing <info>" . $package->getName() . "</info> (<comment>" . $package->getPrettyVersion() . "</comment>)");
         $this->cleanChanges($package, $path, false);
         if (!$this->filesystem->removeDirectory($path)) {
-            // retry after a bit on windows since it tends to be touchy with mass removals
-            if (!defined('PHP_WINDOWS_VERSION_BUILD') || (usleep(250) && !$this->filesystem->removeDirectory($path))) {
-                throw new \RuntimeException('Could not completely delete '.$path.', aborting.');
-            }
+            throw new \RuntimeException('Could not completely delete '.$path.', aborting.');
         }
     }
 
@@ -147,10 +178,10 @@ abstract class VcsDownloader implements DownloaderInterface, ChangeReportInterfa
     /**
      * Prompt the user to check if changes should be stashed/removed or the operation aborted
      *
-     * @param PackageInterface $package
-     * @param string           $path
-     * @param bool             $update  if true (update) the changes can be stashed and reapplied after an update,
-     *                                  if false (remove) the changes should be assumed to be lost if the operation is not aborted
+     * @param  PackageInterface  $package
+     * @param  string            $path
+     * @param  bool              $update  if true (update) the changes can be stashed and reapplied after an update,
+     *                                    if false (remove) the changes should be assumed to be lost if the operation is not aborted
      * @throws \RuntimeException in case the operation must be aborted
      */
     protected function cleanChanges(PackageInterface $package, $path, $update)
@@ -176,8 +207,9 @@ abstract class VcsDownloader implements DownloaderInterface, ChangeReportInterfa
      *
      * @param PackageInterface $package package instance
      * @param string           $path    download path
+     * @param string           $url     package url
      */
-    abstract protected function doDownload(PackageInterface $package, $path);
+    abstract protected function doDownload(PackageInterface $package, $path, $url);
 
     /**
      * Updates specific package in specific folder from initial to target version.
@@ -185,8 +217,9 @@ abstract class VcsDownloader implements DownloaderInterface, ChangeReportInterfa
      * @param PackageInterface $initial initial package
      * @param PackageInterface $target  updated package
      * @param string           $path    download path
+     * @param string           $url     package url
      */
-    abstract protected function doUpdate(PackageInterface $initial, PackageInterface $target, $path);
+    abstract protected function doUpdate(PackageInterface $initial, PackageInterface $target, $path, $url);
 
     /**
      * Fetches the commit logs between two commits
diff --git a/vendor/composer/composer/src/Composer/Downloader/ZipDownloader.php b/vendor/composer/composer/src/Composer/Downloader/ZipDownloader.php
index 7195894..1370d82 100644
--- a/vendor/composer/composer/src/Composer/Downloader/ZipDownloader.php
+++ b/vendor/composer/composer/src/Composer/Downloader/ZipDownloader.php
@@ -38,12 +38,16 @@ class ZipDownloader extends ArchiveDownloader
 
         // try to use unzip on *nix
         if (!defined('PHP_WINDOWS_VERSION_BUILD')) {
-            $command = 'unzip '.escapeshellarg($file).' -d '.escapeshellarg($path) . ' && chmod -R u+w ' . escapeshellarg($path);
-            if (0 === $this->process->execute($command, $ignoredOutput)) {
-                return;
+            $command = 'unzip '.ProcessExecutor::escape($file).' -d '.ProcessExecutor::escape($path) . ' && chmod -R u+w ' . ProcessExecutor::escape($path);
+            try {
+                if (0 === $this->process->execute($command, $ignoredOutput)) {
+                    return;
+                }
+
+                $processError = 'Failed to execute ' . $command . "\n\n" . $this->process->getErrorOutput();
+            } catch (\Exception $e) {
+                $processError = 'Failed to execute ' . $command . "\n\n" . $e->getMessage();
             }
-
-            $processError = 'Failed to execute ' . $command . "\n\n" . $this->process->getErrorOutput();
         }
 
         if (!class_exists('ZipArchive')) {
diff --git a/vendor/composer/composer/src/Composer/EventDispatcher/Event.php b/vendor/composer/composer/src/Composer/EventDispatcher/Event.php
index 0b3c9c9..38ae4f4 100644
--- a/vendor/composer/composer/src/Composer/EventDispatcher/Event.php
+++ b/vendor/composer/composer/src/Composer/EventDispatcher/Event.php
@@ -25,6 +25,16 @@ class Event
     protected $name;
 
     /**
+     * @var array Arguments passed by the user, these will be forwarded to CLI script handlers
+     */
+    protected $args;
+
+    /**
+     * @var array Flags usable in PHP script handlers
+     */
+    protected $flags;
+
+    /**
      * @var boolean Whether the event should not be passed to more listeners
      */
     private $propagationStopped = false;
@@ -32,11 +42,15 @@ class Event
     /**
      * Constructor.
      *
-     * @param string $name The event name
+     * @param string $name  The event name
+     * @param array  $args  Arguments passed by the user
+     * @param array  $flags Optional flags to pass data not as argument
      */
-    public function __construct($name)
+    public function __construct($name, array $args = array(), array $flags = array())
     {
         $this->name = $name;
+        $this->args = $args;
+        $this->flags = $flags;
     }
 
     /**
@@ -50,6 +64,26 @@ class Event
     }
 
     /**
+     * Returns the event's arguments.
+     *
+     * @return array The event arguments
+     */
+    public function getArguments()
+    {
+        return $this->args;
+    }
+
+    /**
+     * Returns the event's flags.
+     *
+     * @return array The event flags
+     */
+    public function getFlags()
+    {
+        return $this->flags;
+    }
+
+    /**
      * Checks if stopPropagation has been called
      *
      * @return boolean Whether propagation has been stopped
diff --git a/vendor/composer/composer/src/Composer/EventDispatcher/EventDispatcher.php b/vendor/composer/composer/src/Composer/EventDispatcher/EventDispatcher.php
index f1e94e6..8d5ee9f 100644
--- a/vendor/composer/composer/src/Composer/EventDispatcher/EventDispatcher.php
+++ b/vendor/composer/composer/src/Composer/EventDispatcher/EventDispatcher.php
@@ -12,9 +12,14 @@
 
 namespace Composer\EventDispatcher;
 
+use Composer\DependencyResolver\PolicyInterface;
+use Composer\DependencyResolver\Pool;
+use Composer\DependencyResolver\Request;
+use Composer\Installer\InstallerEvent;
 use Composer\IO\IOInterface;
 use Composer\Composer;
 use Composer\DependencyResolver\Operation\OperationInterface;
+use Composer\Repository\CompositeRepository;
 use Composer\Script;
 use Composer\Script\CommandEvent;
 use Composer\Script\PackageEvent;
@@ -57,8 +62,10 @@ class EventDispatcher
     /**
      * Dispatch an event
      *
-     * @param string $eventName An event name
-     * @param Event  $event
+     * @param  string $eventName An event name
+     * @param  Event  $event
+     * @return int    return code of the executed script if any, for php scripts a false return
+     *                          value is changed to 1, anything else to 0
      */
     public function dispatch($eventName, Event $event = null)
     {
@@ -66,51 +73,78 @@ class EventDispatcher
             $event = new Event($eventName);
         }
 
-        $this->doDispatch($event);
+        return $this->doDispatch($event);
     }
 
     /**
      * Dispatch a script event.
      *
-     * @param string       $eventName The constant in ScriptEvents
-     * @param Script\Event $event
+     * @param  string $eventName      The constant in ScriptEvents
+     * @param  bool   $devMode
+     * @param  array  $additionalArgs Arguments passed by the user
+     * @param  array  $flags          Optional flags to pass data not as argument
+     * @return int    return code of the executed script if any, for php scripts a false return
+     *                               value is changed to 1, anything else to 0
      */
-    public function dispatchScript($eventName, Script\Event $event = null)
+    public function dispatchScript($eventName, $devMode = false, $additionalArgs = array(), $flags = array())
     {
-        if (null == $event) {
-            $event = new Script\Event($eventName, $this->composer, $this->io);
-        }
-
-        $this->doDispatch($event);
+        return $this->doDispatch(new Script\Event($eventName, $this->composer, $this->io, $devMode, $additionalArgs, $flags));
     }
 
     /**
      * Dispatch a package event.
      *
-     * @param string             $eventName The constant in ScriptEvents
-     * @param boolean            $devMode   Whether or not we are in dev mode
-     * @param OperationInterface $operation The package being installed/updated/removed
+     * @param  string             $eventName The constant in ScriptEvents
+     * @param  boolean            $devMode   Whether or not we are in dev mode
+     * @param  OperationInterface $operation The package being installed/updated/removed
+     * @return int                return code of the executed script if any, for php scripts a false return
+     *                                      value is changed to 1, anything else to 0
      */
     public function dispatchPackageEvent($eventName, $devMode, OperationInterface $operation)
     {
-        $this->doDispatch(new PackageEvent($eventName, $this->composer, $this->io, $devMode, $operation));
+        return $this->doDispatch(new PackageEvent($eventName, $this->composer, $this->io, $devMode, $operation));
     }
 
     /**
      * Dispatch a command event.
      *
-     * @param string  $eventName The constant in ScriptEvents
-     * @param boolean $devMode   Whether or not we are in dev mode
+     * @param  string  $eventName      The constant in ScriptEvents
+     * @param  boolean $devMode        Whether or not we are in dev mode
+     * @param  array   $additionalArgs Arguments passed by the user
+     * @param  array   $flags          Optional flags to pass data not as argument
+     * @return int     return code of the executed script if any, for php scripts a false return
+     *                                value is changed to 1, anything else to 0
+     */
+    public function dispatchCommandEvent($eventName, $devMode, $additionalArgs = array(), $flags = array())
+    {
+        return $this->doDispatch(new CommandEvent($eventName, $this->composer, $this->io, $devMode, $additionalArgs, $flags));
+    }
+
+    /**
+     * Dispatch a installer event.
+     *
+     * @param string              $eventName     The constant in InstallerEvents
+     * @param PolicyInterface     $policy        The policy
+     * @param Pool                $pool          The pool
+     * @param CompositeRepository $installedRepo The installed repository
+     * @param Request             $request       The request
+     * @param array               $operations    The list of operations
+     *
+     * @return int return code of the executed script if any, for php scripts a false return
+     *             value is changed to 1, anything else to 0
      */
-    public function dispatchCommandEvent($eventName, $devMode)
+    public function dispatchInstallerEvent($eventName, PolicyInterface $policy, Pool $pool, CompositeRepository $installedRepo, Request $request, array $operations = array())
     {
-        $this->doDispatch(new CommandEvent($eventName, $this->composer, $this->io, $devMode));
+        return $this->doDispatch(new InstallerEvent($eventName, $this->composer, $this->io, $policy, $pool, $installedRepo, $request, $operations));
     }
 
     /**
      * Triggers the listeners of an event.
      *
-     * @param  Event             $event The event object to pass to the event handlers/listeners.
+     * @param  Event             $event          The event object to pass to the event handlers/listeners.
+     * @param  string            $additionalArgs
+     * @return int               return code of the executed script if any, for php scripts a false return
+     *                                          value is changed to 1, anything else to 0
      * @throws \RuntimeException
      * @throws \Exception
      */
@@ -118,9 +152,10 @@ class EventDispatcher
     {
         $listeners = $this->getListeners($event);
 
+        $return = 0;
         foreach ($listeners as $callable) {
             if (!is_string($callable) && is_callable($callable)) {
-                call_user_func($callable, $event);
+                $return = false === call_user_func($callable, $event) ? 1 : 0;
             } elseif ($this->isPhpScript($callable)) {
                 $className = substr($callable, 0, strpos($callable, '::'));
                 $methodName = substr($callable, strpos($callable, '::') + 2);
@@ -135,15 +170,16 @@ class EventDispatcher
                 }
 
                 try {
-                    $this->executeEventPhpScript($className, $methodName, $event);
+                    $return = false === $this->executeEventPhpScript($className, $methodName, $event) ? 1 : 0;
                 } catch (\Exception $e) {
                     $message = "Script %s handling the %s event terminated with an exception";
                     $this->io->write('<error>'.sprintf($message, $callable, $event->getName()).'</error>');
                     throw $e;
                 }
             } else {
-                if (0 !== ($exitCode = $this->process->execute($callable))) {
-                    $event->getIO()->write(sprintf('<error>Script %s handling the %s event returned with an error</error>', $callable, $event->getName()));
+                $args = implode(' ', array_map(array('Composer\Util\ProcessExecutor','escape'), $event->getArguments()));
+                if (0 !== ($exitCode = $this->process->execute($callable . ($args === '' ? '' : ' '.$args)))) {
+                    $this->io->write(sprintf('<error>Script %s handling the %s event returned with an error</error>', $callable, $event->getName()));
 
                     throw new \RuntimeException('Error Output: '.$this->process->getErrorOutput(), $exitCode);
                 }
@@ -153,6 +189,8 @@ class EventDispatcher
                 break;
             }
         }
+
+        return $return;
     }
 
     /**
@@ -162,7 +200,7 @@ class EventDispatcher
      */
     protected function executeEventPhpScript($className, $methodName, Event $event)
     {
-        $className::$methodName($event);
+        return $className::$methodName($event);
     }
 
     /**
@@ -221,6 +259,19 @@ class EventDispatcher
     }
 
     /**
+     * Checks if an event has listeners registered
+     *
+     * @param  Event   $event
+     * @return boolean
+     */
+    public function hasEventListeners(Event $event)
+    {
+        $listeners = $this->getListeners($event);
+
+        return count($listeners) > 0;
+    }
+
+    /**
      * Finds all listeners defined as scripts in the package
      *
      * @param  Event $event Event object
diff --git a/vendor/composer/composer/src/Composer/Factory.php b/vendor/composer/composer/src/Composer/Factory.php
index f829cb4..4f7bfef 100644
--- a/vendor/composer/composer/src/Composer/Factory.php
+++ b/vendor/composer/composer/src/Composer/Factory.php
@@ -20,6 +20,7 @@ use Composer\Repository\RepositoryManager;
 use Composer\Repository\RepositoryInterface;
 use Composer\Util\ProcessExecutor;
 use Composer\Util\RemoteFilesystem;
+use Composer\Util\Filesystem;
 use Symfony\Component\Console\Formatter\OutputFormatterStyle;
 use Composer\EventDispatcher\EventDispatcher;
 use Composer\Autoload\AutoloadGenerator;
@@ -36,14 +37,12 @@ use Composer\Package\Version\VersionParser;
 class Factory
 {
     /**
+     * @return string
      * @throws \RuntimeException
-     * @return Config
      */
-    public static function createConfig()
+    protected static function getHomeDir()
     {
-        // determine home and cache dirs
         $home = getenv('COMPOSER_HOME');
-        $cacheDir = getenv('COMPOSER_CACHE_DIR');
         if (!$home) {
             if (defined('PHP_WINDOWS_VERSION_MAJOR')) {
                 if (!getenv('APPDATA')) {
@@ -57,6 +56,18 @@ class Factory
                 $home = rtrim(getenv('HOME'), '/') . '/.composer';
             }
         }
+
+        return $home;
+    }
+
+    /**
+     * @param string $home
+     *
+     * @return string
+     */
+    protected static function getCacheDir($home)
+    {
+        $cacheDir = getenv('COMPOSER_CACHE_DIR');
         if (!$cacheDir) {
             if (defined('PHP_WINDOWS_VERSION_MAJOR')) {
                 if ($cacheDir = getenv('LOCALAPPDATA')) {
@@ -70,6 +81,19 @@ class Factory
             }
         }
 
+        return $cacheDir;
+    }
+
+    /**
+     * @param  IOInterface|null $io
+     * @return Config
+     */
+    public static function createConfig(IOInterface $io = null)
+    {
+        // determine home and cache dirs
+        $home     = self::getHomeDir();
+        $cacheDir = self::getCacheDir($home);
+
         // Protect directory against web access. Since HOME could be
         // the www-data's user home and be web-accessible it is a
         // potential security risk
@@ -87,43 +111,25 @@ class Factory
         // add dirs to the config
         $config->merge(array('config' => array('home' => $home, 'cache-dir' => $cacheDir)));
 
+        // load global config
         $file = new JsonFile($home.'/config.json');
         if ($file->exists()) {
+            if ($io && $io->isDebug()) {
+                $io->write('Loading config file ' . $file->getPath());
+            }
             $config->merge($file->read());
         }
         $config->setConfigSource(new JsonConfigSource($file));
 
-        // move old cache dirs to the new locations
-        $legacyPaths = array(
-            'cache-repo-dir' => array('/cache' => '/http*', '/cache.svn' => '/*', '/cache.github' => '/*'),
-            'cache-vcs-dir' => array('/cache.git' => '/*', '/cache.hg' => '/*'),
-            'cache-files-dir' => array('/cache.files' => '/*'),
-        );
-        foreach ($legacyPaths as $key => $oldPaths) {
-            foreach ($oldPaths as $oldPath => $match) {
-                $dir = $config->get($key);
-                if ('/cache.github' === $oldPath) {
-                    $dir .= '/github.com';
-                }
-                $oldPath = $config->get('home').$oldPath;
-                $oldPathMatch = $oldPath . $match;
-                if (is_dir($oldPath) && $dir !== $oldPath) {
-                    if (!is_dir($dir)) {
-                        if (!@mkdir($dir, 0777, true)) {
-                            continue;
-                        }
-                    }
-                    if (is_array($children = glob($oldPathMatch))) {
-                        foreach ($children as $child) {
-                            @rename($child, $dir.'/'.basename($child));
-                        }
-                    }
-                    if ($config->get('cache-dir') != $oldPath) {
-                        @rmdir($oldPath);
-                    }
-                }
+        // load global auth file
+        $file = new JsonFile($config->get('home').'/auth.json');
+        if ($file->exists()) {
+            if ($io && $io->isDebug()) {
+                $io->write('Loading config file ' . $file->getPath());
             }
+            $config->merge(array('config' => $file->read()));
         }
+        $config->setAuthConfigSource(new JsonConfigSource($file, true));
 
         return $config;
     }
@@ -146,7 +152,7 @@ class Factory
         $repos = array();
 
         if (!$config) {
-            $config = static::createConfig();
+            $config = static::createConfig($io);
         }
         if (!$rm) {
             if (!$io) {
@@ -176,9 +182,9 @@ class Factory
     /**
      * Creates a Composer instance
      *
-     * @param IOInterface       $io          IO instance
-     * @param array|string|null $localConfig either a configuration array or a filename to read from, if null it will
-     *                                       read from the default filename
+     * @param  IOInterface               $io             IO instance
+     * @param  array|string|null         $localConfig    either a configuration array or a filename to read from, if null it will
+     *                                                   read from the default filename
      * @param  bool                      $disablePlugins Whether plugins should not be loaded
      * @throws \InvalidArgumentException
      * @throws \UnexpectedValueException
@@ -209,9 +215,24 @@ class Factory
             $localConfig = $file->read();
         }
 
-        // Configuration defaults
-        $config = static::createConfig();
+        // Load config and override with local config/auth config
+        $config = static::createConfig($io);
         $config->merge($localConfig);
+        if (isset($composerFile)) {
+            if ($io && $io->isDebug()) {
+                $io->write('Loading config file ' . $composerFile);
+            }
+            $localAuthFile = new JsonFile(dirname(realpath($composerFile)) . '/auth.json');
+            if ($localAuthFile->exists()) {
+                if ($io && $io->isDebug()) {
+                    $io->write('Loading config file ' . $localAuthFile->getPath());
+                }
+                $config->merge(array('config' => $localAuthFile->read()));
+                $config->setAuthConfigSource(new JsonConfigSource($localAuthFile, true));
+            }
+        }
+
+        // load auth configs into the IO instance
         $io->loadConfiguration($config);
 
         $vendorDir = $config->get('vendor-dir');
@@ -253,7 +274,7 @@ class Factory
         $composer->setEventDispatcher($dispatcher);
 
         // initialize autoload generator
-        $generator = new AutoloadGenerator($dispatcher);
+        $generator = new AutoloadGenerator($dispatcher, $io);
         $composer->setAutoloadGenerator($generator);
 
         // add installers to the manager
@@ -275,7 +296,7 @@ class Factory
             $lockFile = "json" === pathinfo($composerFile, PATHINFO_EXTENSION)
                 ? substr($composerFile, 0, -4).'lock'
                 : $composerFile . '.lock';
-            $locker = new Package\Locker($io, new JsonFile($lockFile, new RemoteFilesystem($io)), $rm, $im, md5_file($composerFile));
+            $locker = new Package\Locker($io, new JsonFile($lockFile, new RemoteFilesystem($io, $config)), $rm, $im, md5_file($composerFile));
             $composer->setLocker($locker);
         }
 
@@ -314,8 +335,9 @@ class Factory
     }
 
      /**
-     * @param Config $config
-     * @param string $vendorDir
+     * @param  Config                                        $config
+     * @param  string                                        $vendorDir
+     * @return Repository\InstalledFilesystemRepository|null
      */
     protected function createGlobalRepository(Config $config, $vendorDir)
     {
@@ -344,7 +366,7 @@ class Factory
             $cache = new Cache($io, $config->get('cache-files-dir'), 'a-z0-9_./');
         }
 
-        $dm = new Downloader\DownloadManager();
+        $dm = new Downloader\DownloadManager($io);
         switch ($config->get('preferred-install')) {
             case 'dist':
                 $dm->setPreferDist(true);
@@ -365,6 +387,7 @@ class Factory
         $dm->setDownloader('zip', new Downloader\ZipDownloader($io, $config, $eventDispatcher, $cache));
         $dm->setDownloader('rar', new Downloader\RarDownloader($io, $config, $eventDispatcher, $cache));
         $dm->setDownloader('tar', new Downloader\TarDownloader($io, $config, $eventDispatcher, $cache));
+        $dm->setDownloader('gzip', new Downloader\GzipDownloader($io, $config, $eventDispatcher, $cache));
         $dm->setDownloader('phar', new Downloader\PharDownloader($io, $config, $eventDispatcher, $cache));
         $dm->setDownloader('file', new Downloader\FileDownloader($io, $config, $eventDispatcher, $cache));
 
@@ -392,6 +415,9 @@ class Factory
     }
 
     /**
+     * @param  Composer             $composer
+     * @param  IOInterface          $io
+     * @param  RepositoryInterface  $globalRepository
      * @return Plugin\PluginManager
      */
     protected function createPluginManager(Composer $composer, IOInterface $io, RepositoryInterface $globalRepository = null)
@@ -435,10 +461,10 @@ class Factory
     }
 
     /**
-     * @param IOInterface $io     IO instance
-     * @param mixed       $config either a configuration array or a filename to read from, if null it will read from
-     *                             the default filename
-     * @param  bool     $disablePlugins Whether plugins should not be loaded
+     * @param  IOInterface $io             IO instance
+     * @param  mixed       $config         either a configuration array or a filename to read from, if null it will read from
+     *                                     the default filename
+     * @param  bool        $disablePlugins Whether plugins should not be loaded
      * @return Composer
      */
     public static function create(IOInterface $io, $config = null, $disablePlugins = false)
diff --git a/vendor/composer/composer/src/Composer/IO/BaseIO.php b/vendor/composer/composer/src/Composer/IO/BaseIO.php
index 29cae4f..8d68483 100644
--- a/vendor/composer/composer/src/Composer/IO/BaseIO.php
+++ b/vendor/composer/composer/src/Composer/IO/BaseIO.php
@@ -68,5 +68,12 @@ abstract class BaseIO implements IOInterface
                 $this->setAuthentication($domain, $token, 'x-oauth-basic');
             }
         }
+
+        // reload http basic credentials from config if available
+        if ($creds = $config->get('http-basic')) {
+            foreach ($creds as $domain => $cred) {
+                $this->setAuthentication($domain, $cred['username'], $cred['password']);
+            }
+        }
     }
 }
diff --git a/vendor/composer/composer/src/Composer/IO/ConsoleIO.php b/vendor/composer/composer/src/Composer/IO/ConsoleIO.php
index 39c070d..07e5296 100644
--- a/vendor/composer/composer/src/Composer/IO/ConsoleIO.php
+++ b/vendor/composer/composer/src/Composer/IO/ConsoleIO.php
@@ -15,6 +15,7 @@ namespace Composer\IO;
 use Symfony\Component\Console\Input\InputInterface;
 use Symfony\Component\Console\Output\OutputInterface;
 use Symfony\Component\Console\Helper\HelperSet;
+use Symfony\Component\Process\ExecutableFinder;
 
 /**
  * The Input/Output helper.
@@ -171,6 +172,18 @@ class ConsoleIO extends BaseIO
     {
         // handle windows
         if (defined('PHP_WINDOWS_VERSION_BUILD')) {
+            $finder = new ExecutableFinder();
+
+            // use bash if it's present
+            if ($finder->find('bash') && $finder->find('stty')) {
+                $this->write($question, false);
+                $value = rtrim(shell_exec('bash -c "stty -echo; read -n0 discard; read -r mypassword; stty echo; echo $mypassword"'));
+                $this->write('');
+
+                return $value;
+            }
+
+            // fallback to hiddeninput executable
             $exe = __DIR__.'\\hiddeninput.exe';
 
             // handle code running from a phar
diff --git a/vendor/composer/composer/src/Composer/Installer.php b/vendor/composer/composer/src/Composer/Installer.php
index 900c14b..9e2c070 100644
--- a/vendor/composer/composer/src/Composer/Installer.php
+++ b/vendor/composer/composer/src/Composer/Installer.php
@@ -26,11 +26,12 @@ use Composer\DependencyResolver\SolverProblemsException;
 use Composer\Downloader\DownloadManager;
 use Composer\EventDispatcher\EventDispatcher;
 use Composer\Installer\InstallationManager;
-use Composer\Config;
+use Composer\Installer\InstallerEvents;
 use Composer\Installer\NoopInstaller;
 use Composer\IO\IOInterface;
 use Composer\Json\JsonFile;
 use Composer\Package\AliasPackage;
+use Composer\Package\CompletePackage;
 use Composer\Package\Link;
 use Composer\Package\LinkConstraint\VersionConstraint;
 use Composer\Package\Locker;
@@ -105,6 +106,12 @@ class Installer
     protected $verbose = false;
     protected $update = false;
     protected $runScripts = true;
+    protected $ignorePlatformReqs = false;
+    /**
+     * Array of package names/globs flagged for update
+     *
+     * @var array|null
+     */
     protected $updateWhitelist = null;
     protected $whitelistDependencies = false;
 
@@ -148,9 +155,14 @@ class Installer
      * Run installation (or update)
      *
      * @return int 0 on success or a positive error code on failure
+     *
+     * @throws \Exception
      */
     public function run()
     {
+        gc_collect_cycles();
+        gc_disable();
+
         if ($this->dryRun) {
             $this->verbose = true;
             $this->runScripts = false;
@@ -218,16 +230,37 @@ class Installer
         }
         $this->installationManager->notifyInstalls();
 
-        // output suggestions
-        foreach ($this->suggestedPackages as $suggestion) {
-            $target = $suggestion['target'];
-            foreach ($installedRepo->getPackages() as $package) {
-                if (in_array($target, $package->getNames())) {
-                    continue 2;
+        // output suggestions if we're in dev mode
+        if ($this->devMode) {
+            foreach ($this->suggestedPackages as $suggestion) {
+                $target = $suggestion['target'];
+                foreach ($installedRepo->getPackages() as $package) {
+                    if (in_array($target, $package->getNames())) {
+                        continue 2;
+                    }
                 }
+
+                $this->io->write($suggestion['source'].' suggests installing '.$suggestion['target'].' ('.$suggestion['reason'].')');
+            }
+        }
+
+        # Find abandoned packages and warn user
+        foreach ($localRepo->getPackages() as $package) {
+            if (!$package instanceof CompletePackage || !$package->isAbandoned()) {
+                continue;
             }
 
-            $this->io->write($suggestion['source'].' suggests installing '.$suggestion['target'].' ('.$suggestion['reason'].')');
+            $replacement = (is_string($package->getReplacementPackage()))
+                ? 'Use ' . $package->getReplacementPackage() . ' instead'
+                : 'No replacement was suggested';
+
+            $this->io->write(
+                sprintf(
+                    "<error>Package %s is abandoned, you should avoid using it. %s.</error>",
+                    $package->getPrettyName(),
+                    $replacement
+                )
+            );
         }
 
         if (!$this->dryRun) {
@@ -252,8 +285,10 @@ class Installer
                         $request->install($link->getTarget(), $link->getConstraint());
                     }
 
+                    $this->eventDispatcher->dispatchInstallerEvent(InstallerEvents::PRE_DEPENDENCIES_SOLVING, $policy, $pool, $installedRepo, $request);
                     $solver = new Solver($policy, $pool, $installedRepo);
-                    $ops = $solver->solve($request);
+                    $ops = $solver->solve($request, $this->ignorePlatformReqs);
+                    $this->eventDispatcher->dispatchInstallerEvent(InstallerEvents::POST_DEPENDENCIES_SOLVING, $policy, $pool, $installedRepo, $request, $ops);
                     foreach ($ops as $op) {
                         if ($op->getJobType() === 'uninstall') {
                             $devPackages[] = $op->getPackage();
@@ -271,7 +306,8 @@ class Installer
                     $platformDevReqs,
                     $aliases,
                     $this->package->getMinimumStability(),
-                    $this->package->getStabilityFlags()
+                    $this->package->getStabilityFlags(),
+                    $this->package->getPreferStable()
                 );
                 if ($updatedLock) {
                     $this->io->write('<info>Writing lock file</info>');
@@ -279,7 +315,13 @@ class Installer
             }
 
             // write autoloader
-            $this->io->write('<info>Generating autoload files</info>');
+            if ($this->optimizeAutoloader) {
+                $this->io->write('<info>Generating optimized autoload files</info>');
+            } else {
+                $this->io->write('<info>Generating autoload files</info>');
+            }
+
+            $this->autoloadGenerator->setDevMode($this->devMode);
             $this->autoloadGenerator->dump($this->config, $localRepo, $this->package, $this->installationManager, 'composer', $this->optimizeAutoloader);
 
             if ($this->runScripts) {
@@ -287,6 +329,11 @@ class Installer
                 $eventName = $this->update ? ScriptEvents::POST_UPDATE_CMD : ScriptEvents::POST_INSTALL_CMD;
                 $this->eventDispatcher->dispatchCommandEvent($eventName, $this->devMode);
             }
+
+            $vendorDir = $this->config->get('vendor-dir');
+            if (is_dir($vendorDir)) {
+                touch($vendorDir);
+            }
         }
 
         return 0;
@@ -356,7 +403,7 @@ class Installer
         }
 
         if ($this->update) {
-            $this->io->write('<info>Updating dependencies'.($withDevReqs?' (including require-dev)':'').'</info>');
+            $this->io->write('<info>Updating dependencies'.($withDevReqs ? ' (including require-dev)' : '').'</info>');
 
             $request->updateAll();
 
@@ -407,7 +454,7 @@ class Installer
                 }
             }
         } elseif ($installFromLock) {
-            $this->io->write('<info>Installing dependencies'.($withDevReqs?' (including require-dev)':'').' from lock file</info>');
+            $this->io->write('<info>Installing dependencies'.($withDevReqs ? ' (including require-dev)' : '').' from lock file</info>');
 
             if (!$this->locker->isFresh()) {
                 $this->io->write('<warning>Warning: The lock file is not up to date with the latest changes in composer.json. You may be getting outdated dependencies. Run update to update them.</warning>');
@@ -427,7 +474,7 @@ class Installer
                 $request->install($link->getTarget(), $link->getConstraint());
             }
         } else {
-            $this->io->write('<info>Installing dependencies'.($withDevReqs?' (including require-dev)':'').'</info>');
+            $this->io->write('<info>Installing dependencies'.($withDevReqs ? ' (including require-dev)' : '').'</info>');
 
             if ($withDevReqs) {
                 $links = array_merge($this->package->getRequires(), $this->package->getDevRequires());
@@ -444,9 +491,11 @@ class Installer
         $this->processDevPackages($localRepo, $pool, $policy, $repositories, $lockedRepository, $installFromLock, 'force-links');
 
         // solve dependencies
+        $this->eventDispatcher->dispatchInstallerEvent(InstallerEvents::PRE_DEPENDENCIES_SOLVING, $policy, $pool, $installedRepo, $request);
         $solver = new Solver($policy, $pool, $installedRepo);
         try {
-            $operations = $solver->solve($request);
+            $operations = $solver->solve($request, $this->ignorePlatformReqs);
+            $this->eventDispatcher->dispatchInstallerEvent(InstallerEvents::POST_DEPENDENCIES_SOLVING, $policy, $pool, $installedRepo, $request, $operations);
         } catch (SolverProblemsException $e) {
             $this->io->write('<error>Your requirements could not be resolved to an installable set of packages.</error>');
             $this->io->write($e->getMessage());
@@ -463,6 +512,7 @@ class Installer
         }
 
         $operations = $this->movePluginsToFront($operations);
+        $operations = $this->moveUninstallsToFront($operations);
 
         foreach ($operations as $operation) {
             // collect suggestions
@@ -476,11 +526,6 @@ class Installer
                 }
             }
 
-            $event = 'Composer\Script\ScriptEvents::PRE_PACKAGE_'.strtoupper($operation->getJobType());
-            if (defined($event) && $this->runScripts) {
-                $this->eventDispatcher->dispatchPackageEvent(constant($event), $this->devMode, $operation);
-            }
-
             // not installing from lock, force dev packages' references if they're in root package refs
             if (!$installFromLock) {
                 $package = null;
@@ -496,6 +541,23 @@ class Installer
                         $package->setDistReference($references[$package->getName()]);
                     }
                 }
+                if ('update' === $operation->getJobType()
+                    && $operation->getTargetPackage()->isDev()
+                    && $operation->getTargetPackage()->getVersion() === $operation->getInitialPackage()->getVersion()
+                    && $operation->getTargetPackage()->getSourceReference() === $operation->getInitialPackage()->getSourceReference()
+                ) {
+                    if ($this->io->isDebug()) {
+                        $this->io->write('  - Skipping update of '. $operation->getTargetPackage()->getPrettyName().' to the same reference-locked version');
+                        $this->io->write('');
+                    }
+
+                    continue;
+                }
+            }
+
+            $event = 'Composer\Script\ScriptEvents::PRE_PACKAGE_'.strtoupper($operation->getJobType());
+            if (defined($event) && $this->runScripts) {
+                $this->eventDispatcher->dispatchPackageEvent(constant($event), $this->devMode, $operation);
             }
 
             // output non-alias ops in dry run, output alias ops in debug verbosity
@@ -515,11 +577,11 @@ class Installer
                 if ($reason instanceof Rule) {
                     switch ($reason->getReason()) {
                         case Rule::RULE_JOB_INSTALL:
-                            $this->io->write('    REASON: Required by root: '.$reason->getRequiredPackage());
+                            $this->io->write('    REASON: Required by root: '.$reason->getPrettyString($pool));
                             $this->io->write('');
                             break;
                         case Rule::RULE_PACKAGE_REQUIRES:
-                            $this->io->write('    REASON: '.$reason->getPrettyString());
+                            $this->io->write('    REASON: '.$reason->getPrettyString($pool));
                             $this->io->write('');
                             break;
                     }
@@ -564,15 +626,45 @@ class Installer
                 continue;
             }
 
-            if ($package->getRequires() === array() && ($package->getType() === 'composer-plugin' || $package->getType() === 'composer-installer')) {
-                $installerOps[] = $op;
-                unset($operations[$idx]);
+            if ($package->getType() === 'composer-plugin' || $package->getType() === 'composer-installer') {
+                // ignore requirements to platform or composer-plugin-api
+                $requires = array_keys($package->getRequires());
+                foreach ($requires as $index => $req) {
+                    if ($req === 'composer-plugin-api' || preg_match(PlatformRepository::PLATFORM_PACKAGE_REGEX, $req)) {
+                        unset($requires[$index]);
+                    }
+                }
+                // if there are no other requirements, move the plugin to the top of the op list
+                if (!count($requires)) {
+                    $installerOps[] = $op;
+                    unset($operations[$idx]);
+                }
             }
         }
 
         return array_merge($installerOps, $operations);
     }
 
+    /**
+     * Removals of packages should be executed before installations in
+     * case two packages resolve to the same path (due to custom installers)
+     *
+     * @param  OperationInterface[] $operations
+     * @return OperationInterface[] reordered operation list
+     */
+    private function moveUninstallsToFront(array $operations)
+    {
+        $uninstOps = array();
+        foreach ($operations as $idx => $op) {
+            if ($op instanceof UninstallOperation) {
+                $uninstOps[] = $op;
+                unset($operations[$idx]);
+            }
+        }
+
+        return array_merge($uninstOps, $operations);
+    }
+
     private function createPool($withDevReqs)
     {
         $minimumStability = $this->package->getMinimumStability();
@@ -589,6 +681,10 @@ class Installer
         }
         $rootConstraints = array();
         foreach ($requires as $req => $constraint) {
+            // skip platform requirements from the root package to avoid filtering out existing platform packages
+            if ($this->ignorePlatformReqs && preg_match(PlatformRepository::PLATFORM_PACKAGE_REGEX, $req)) {
+                continue;
+            }
             $rootConstraints[$req] = $constraint->getConstraint();
         }
 
@@ -597,7 +693,17 @@ class Installer
 
     private function createPolicy()
     {
-        return new DefaultPolicy($this->package->getPreferStable());
+        $preferStable = null;
+        if (!$this->update && $this->locker->isLocked()) {
+            $preferStable = $this->locker->getPreferStable();
+        }
+        // old lock file without prefer stable will return null
+        // so in this case we use the composer.json info
+        if (null === $preferStable) {
+            $preferStable = $this->package->getPreferStable();
+        }
+
+        return new DefaultPolicy($preferStable);
     }
 
     private function createRequest(Pool $pool, RootPackageInterface $rootPackage, PlatformRepository $platformRepo)
@@ -626,7 +732,7 @@ class Installer
                 || !isset($provided[$package->getName()])
                 || !$provided[$package->getName()]->getConstraint()->matches($constraint)
             ) {
-                $request->install($package->getName(), $constraint);
+                $request->fix($package->getName(), $constraint);
             }
         }
 
@@ -780,9 +886,8 @@ class Installer
         }
 
         foreach ($this->updateWhitelist as $whiteListedPattern => $void) {
-            $cleanedWhiteListedPattern = str_replace('\\*', '.*', preg_quote($whiteListedPattern));
-
-            if (preg_match("{^".$cleanedWhiteListedPattern."$}i", $package->getName())) {
+            $patternRegexp = $this->packageNameToRegexp($whiteListedPattern);
+            if (preg_match($patternRegexp, $package->getName())) {
                 return true;
             }
         }
@@ -790,6 +895,19 @@ class Installer
         return false;
     }
 
+    /**
+     * Build a regexp from a package name, expanding * globs as required
+     *
+     * @param  string $whiteListedPattern
+     * @return string
+     */
+    private function packageNameToRegexp($whiteListedPattern)
+    {
+        $cleanedWhiteListedPattern = str_replace('\\*', '.*', preg_quote($whiteListedPattern));
+
+        return "{^" . $cleanedWhiteListedPattern . "$}i";
+    }
+
     private function extractPlatformRequirements($links)
     {
         $platformReqs = array();
@@ -839,11 +957,27 @@ class Installer
 
         $seen = array();
 
+        $rootRequiredPackageNames = array_keys($rootRequires);
+
         foreach ($this->updateWhitelist as $packageName => $void) {
             $packageQueue = new \SplQueue;
 
             $depPackages = $pool->whatProvides($packageName);
-            if (count($depPackages) == 0 && !in_array($packageName, $requiredPackageNames) && !in_array($packageName, array('nothing', 'lock'))) {
+
+            $nameMatchesRequiredPackage = in_array($packageName, $requiredPackageNames, true);
+
+            // check if the name is a glob pattern that did not match directly
+            if (!$nameMatchesRequiredPackage) {
+                $whitelistPatternRegexp = $this->packageNameToRegexp($packageName);
+                foreach ($rootRequiredPackageNames as $rootRequiredPackageName) {
+                    if (preg_match($whitelistPatternRegexp, $rootRequiredPackageName)) {
+                        $nameMatchesRequiredPackage = true;
+                        break;
+                    }
+                }
+            }
+
+            if (count($depPackages) == 0 && !$nameMatchesRequiredPackage && !in_array($packageName, array('nothing', 'lock'))) {
                 $this->io->write('<warning>Package "' . $packageName . '" listed for update is not installed. Ignoring.</warning>');
             }
 
@@ -947,6 +1081,16 @@ class Installer
     }
 
     /**
+     * Checks, if this is a dry run (simulation mode).
+     *
+     * @return bool
+     */
+    public function isDryRun()
+    {
+        return $this->dryRun;
+    }
+
+    /**
      * prefer source installation
      *
      * @param  boolean   $preferSource
@@ -1051,6 +1195,29 @@ class Installer
     }
 
     /**
+     * Checks, if running in verbose mode.
+     *
+     * @return bool
+     */
+    public function isVerbose()
+    {
+        return $this->verbose;
+    }
+
+    /**
+     * set ignore Platform Package requirements
+     *
+     * @param  boolean   $ignorePlatformReqs
+     * @return Installer
+     */
+    public function setIgnorePlatformRequirements($ignorePlatformReqs = false)
+    {
+        $this->ignorePlatformReqs = (boolean) $ignorePlatformReqs;
+
+        return $this;
+    }
+
+    /**
      * restrict the update operation to a few packages, all other packages
      * that are already installed will be kept at their current version
      *
@@ -1067,7 +1234,7 @@ class Installer
     /**
      * Should dependencies of whitelisted packages be updated recursively?
      *
-     * @param  boolean $updateDependencies
+     * @param  boolean   $updateDependencies
      * @return Installer
      */
     public function setWhitelistDependencies($updateDependencies = true)
diff --git a/vendor/composer/composer/src/Composer/Installer/InstallationManager.php b/vendor/composer/composer/src/Composer/Installer/InstallationManager.php
index 21b16e2..a43acbb 100644
--- a/vendor/composer/composer/src/Composer/Installer/InstallationManager.php
+++ b/vendor/composer/composer/src/Composer/Installer/InstallationManager.php
@@ -14,7 +14,6 @@ namespace Composer\Installer;
 
 use Composer\Package\PackageInterface;
 use Composer\Package\AliasPackage;
-use Composer\Plugin\PluginInstaller;
 use Composer\Repository\RepositoryInterface;
 use Composer\Repository\InstalledRepositoryInterface;
 use Composer\DependencyResolver\Operation\OperationInterface;
diff --git a/vendor/composer/composer/src/Composer/Installer/InstallerEvent.php b/vendor/composer/composer/src/Composer/Installer/InstallerEvent.php
new file mode 100644
index 0000000..a9f5a72
--- /dev/null
+++ b/vendor/composer/composer/src/Composer/Installer/InstallerEvent.php
@@ -0,0 +1,146 @@
+<?php
+
+/*
+ * This file is part of Composer.
+ *
+ * (c) Nils Adermann <naderman@naderman.de>
+ *     Jordi Boggiano <j.boggiano@seld.be>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Composer\Installer;
+
+use Composer\Composer;
+use Composer\DependencyResolver\PolicyInterface;
+use Composer\DependencyResolver\Operation\OperationInterface;
+use Composer\DependencyResolver\Pool;
+use Composer\DependencyResolver\Request;
+use Composer\EventDispatcher\Event;
+use Composer\IO\IOInterface;
+use Composer\Repository\CompositeRepository;
+
+/**
+ * An event for all installer.
+ *
+ * @author François Pluchino <francois.pluchino@gmail.com>
+ */
+class InstallerEvent extends Event
+{
+    /**
+     * @var Composer
+     */
+    private $composer;
+
+    /**
+     * @var IOInterface
+     */
+    private $io;
+
+    /**
+     * @var PolicyInterface
+     */
+    private $policy;
+
+    /**
+     * @var Pool
+     */
+    private $pool;
+
+    /**
+     * @var CompositeRepository
+     */
+    private $installedRepo;
+
+    /**
+     * @var Request
+     */
+    private $request;
+
+    /**
+     * @var OperationInterface[]
+     */
+    private $operations;
+
+    /**
+     * Constructor.
+     *
+     * @param string               $eventName
+     * @param Composer             $composer
+     * @param IOInterface          $io
+     * @param PolicyInterface      $policy
+     * @param Pool                 $pool
+     * @param CompositeRepository  $installedRepo
+     * @param Request              $request
+     * @param OperationInterface[] $operations
+     */
+    public function __construct($eventName, Composer $composer, IOInterface $io, PolicyInterface $policy, Pool $pool, CompositeRepository $installedRepo, Request $request, array $operations = array())
+    {
+        parent::__construct($eventName);
+
+        $this->composer = $composer;
+        $this->io = $io;
+        $this->policy = $policy;
+        $this->pool = $pool;
+        $this->installedRepo = $installedRepo;
+        $this->request = $request;
+        $this->operations = $operations;
+    }
+
+    /**
+     * @return Composer
+     */
+    public function getComposer()
+    {
+        return $this->composer;
+    }
+
+    /**
+     * @return IOInterface
+     */
+    public function getIO()
+    {
+        return $this->io;
+    }
+
+    /**
+     * @return PolicyInterface
+     */
+    public function getPolicy()
+    {
+        return $this->policy;
+    }
+
+    /**
+     * @return Pool
+     */
+    public function getPool()
+    {
+        return $this->pool;
+    }
+
+    /**
+     * @return CompositeRepository
+     */
+    public function getInstalledRepo()
+    {
+        return $this->installedRepo;
+    }
+
+    /**
+     * @return Request
+     */
+    public function getRequest()
+    {
+        return $this->request;
+    }
+
+    /**
+     * @return OperationInterface[]
+     */
+    public function getOperations()
+    {
+        return $this->operations;
+    }
+}
diff --git a/vendor/composer/composer/src/Composer/Installer/InstallerEvents.php b/vendor/composer/composer/src/Composer/Installer/InstallerEvents.php
new file mode 100644
index 0000000..e05c925
--- /dev/null
+++ b/vendor/composer/composer/src/Composer/Installer/InstallerEvents.php
@@ -0,0 +1,43 @@
+<?php
+
+/*
+ * This file is part of Composer.
+ *
+ * (c) Nils Adermann <naderman@naderman.de>
+ *     Jordi Boggiano <j.boggiano@seld.be>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Composer\Installer;
+
+/**
+ * The Installer Events.
+ *
+ * @author François Pluchino <francois.pluchino@gmail.com>
+ */
+class InstallerEvents
+{
+    /**
+     * The PRE_DEPENDENCIES_SOLVING event occurs as a installer begins
+     * resolve operations.
+     *
+     * The event listener method receives a
+     * Composer\Installer\InstallerEvent instance.
+     *
+     * @var string
+     */
+    const PRE_DEPENDENCIES_SOLVING = 'pre-dependencies-solving';
+
+    /**
+     * The POST_DEPENDENCIES_SOLVING event occurs as a installer after
+     * resolve operations.
+     *
+     * The event listener method receives a
+     * Composer\Installer\InstallerEvent instance.
+     *
+     * @var string
+     */
+    const POST_DEPENDENCIES_SOLVING = 'post-dependencies-solving';
+}
diff --git a/vendor/composer/composer/src/Composer/Installer/LibraryInstaller.php b/vendor/composer/composer/src/Composer/Installer/LibraryInstaller.php
index b1677ce..05cd420 100644
--- a/vendor/composer/composer/src/Composer/Installer/LibraryInstaller.php
+++ b/vendor/composer/composer/src/Composer/Installer/LibraryInstaller.php
@@ -17,6 +17,7 @@ use Composer\IO\IOInterface;
 use Composer\Repository\InstalledRepositoryInterface;
 use Composer\Package\PackageInterface;
 use Composer\Util\Filesystem;
+use Composer\Util\ProcessExecutor;
 
 /**
  * Package installation manager.
@@ -126,7 +127,7 @@ class LibraryInstaller implements InstallerInterface
         $downloadPath = $this->getPackageBasePath($package);
         if (strpos($package->getName(), '/')) {
             $packageVendorDir = dirname($downloadPath);
-            if (is_dir($packageVendorDir) && !glob($packageVendorDir.'/*')) {
+            if (is_dir($packageVendorDir) && $this->filesystem->isDirEmpty($packageVendorDir)) {
                 @rmdir($packageVendorDir);
             }
         }
@@ -196,7 +197,7 @@ class LibraryInstaller implements InstallerInterface
         foreach ($binaries as $bin) {
             $binPath = $this->getInstallPath($package).'/'.$bin;
             if (!file_exists($binPath)) {
-                $this->io->write('    <warning>Skipped installation of '.$bin.' for package '.$package->getName().': file not found in package</warning>');
+                $this->io->write('    <warning>Skipped installation of bin '.$bin.' for package '.$package->getName().': file not found in package</warning>');
                 continue;
             }
 
@@ -215,7 +216,7 @@ class LibraryInstaller implements InstallerInterface
                     // is a fresh install of the vendor.
                     @chmod($link, 0777 & ~umask());
                 }
-                $this->io->write('    Skipped installation of '.$bin.' for package '.$package->getName().': name conflicts with an existing file');
+                $this->io->write('    Skipped installation of bin '.$bin.' for package '.$package->getName().': name conflicts with an existing file');
                 continue;
             }
             if (defined('PHP_WINDOWS_VERSION_BUILD')) {
@@ -225,7 +226,7 @@ class LibraryInstaller implements InstallerInterface
                     @chmod($link, 0777 & ~umask());
                     $link .= '.bat';
                     if (file_exists($link)) {
-                        $this->io->write('    Skipped installation of '.$bin.'.bat proxy for package '.$package->getName().': a .bat proxy was already installed');
+                        $this->io->write('    Skipped installation of bin '.$bin.'.bat proxy for package '.$package->getName().': a .bat proxy was already installed');
                     }
                 }
                 if (!file_exists($link)) {
@@ -259,10 +260,10 @@ class LibraryInstaller implements InstallerInterface
         foreach ($binaries as $bin) {
             $link = $this->binDir.'/'.basename($bin);
             if (is_link($link) || file_exists($link)) {
-                unlink($link);
+                $this->filesystem->unlink($link);
             }
             if (file_exists($link.'.bat')) {
-                unlink($link.'.bat');
+                $this->filesystem->unlink($link.'.bat');
             }
         }
     }
@@ -296,7 +297,7 @@ class LibraryInstaller implements InstallerInterface
         }
 
         return "@ECHO OFF\r\n".
-            "SET BIN_TARGET=%~dp0/".trim(escapeshellarg($binPath), '"')."\r\n".
+            "SET BIN_TARGET=%~dp0/".trim(ProcessExecutor::escape($binPath), '"')."\r\n".
             "{$caller} \"%BIN_TARGET%\" %*\r\n";
     }
 
@@ -307,7 +308,7 @@ class LibraryInstaller implements InstallerInterface
         return "#!/usr/bin/env sh\n".
             'SRC_DIR="`pwd`"'."\n".
             'cd "`dirname "$0"`"'."\n".
-            'cd '.escapeshellarg(dirname($binPath))."\n".
+            'cd '.ProcessExecutor::escape(dirname($binPath))."\n".
             'BIN_TARGET="`pwd`/'.basename($binPath)."\"\n".
             'cd "$SRC_DIR"'."\n".
             '"$BIN_TARGET" "$@"'."\n";
diff --git a/vendor/composer/composer/src/Composer/Installer/PearInstaller.php b/vendor/composer/composer/src/Composer/Installer/PearInstaller.php
index b44f61f..fd3bbd9 100644
--- a/vendor/composer/composer/src/Composer/Installer/PearInstaller.php
+++ b/vendor/composer/composer/src/Composer/Installer/PearInstaller.php
@@ -17,6 +17,7 @@ use Composer\Composer;
 use Composer\Downloader\PearPackageExtractor;
 use Composer\Repository\InstalledRepositoryInterface;
 use Composer\Package\PackageInterface;
+use Composer\Util\ProcessExecutor;
 
 /**
  * Package installation manager.
@@ -77,7 +78,7 @@ class PearInstaller extends LibraryInstaller
         if ($this->io->isVerbose()) {
             $this->io->write('    Cleaning up');
         }
-        unlink($packageArchive);
+        $this->filesystem->unlink($packageArchive);
     }
 
     protected function getBinaries(PackageInterface $package)
@@ -124,7 +125,7 @@ class PearInstaller extends LibraryInstaller
                     "pushd .\r\n".
                     "cd %~dp0\r\n".
                     "set PHP_PROXY=%CD%\\composer-php.bat\r\n".
-                    "cd ".escapeshellarg(dirname($binPath))."\r\n".
+                    "cd ".ProcessExecutor::escape(dirname($binPath))."\r\n".
                     "set BIN_TARGET=%CD%\\".basename($binPath)."\r\n".
                     "popd\r\n".
                     "%PHP_PROXY% \"%BIN_TARGET%\" %*\r\n";
@@ -134,7 +135,7 @@ class PearInstaller extends LibraryInstaller
         return "@echo off\r\n".
             "pushd .\r\n".
             "cd %~dp0\r\n".
-            "cd ".escapeshellarg(dirname($binPath))."\r\n".
+            "cd ".ProcessExecutor::escape(dirname($binPath))."\r\n".
             "set BIN_TARGET=%CD%\\".basename($binPath)."\r\n".
             "popd\r\n".
             $caller." \"%BIN_TARGET%\" %*\r\n";
diff --git a/vendor/composer/composer/src/Composer/Installer/PluginInstaller.php b/vendor/composer/composer/src/Composer/Installer/PluginInstaller.php
index 61c5a28..b5469cc 100644
--- a/vendor/composer/composer/src/Composer/Installer/PluginInstaller.php
+++ b/vendor/composer/composer/src/Composer/Installer/PluginInstaller.php
@@ -40,7 +40,6 @@ class PluginInstaller extends LibraryInstaller
     {
         parent::__construct($io, $composer, 'composer-plugin');
         $this->installationManager = $composer->getInstallationManager();
-
     }
 
     /**
diff --git a/vendor/composer/composer/src/Composer/Json/JsonFile.php b/vendor/composer/composer/src/Composer/Json/JsonFile.php
index 70b97b1..ceaffaa 100644
--- a/vendor/composer/composer/src/Composer/Json/JsonFile.php
+++ b/vendor/composer/composer/src/Composer/Json/JsonFile.php
@@ -177,11 +177,6 @@ class JsonFile
     /**
      * Encodes an array into (optionally pretty-printed) JSON
      *
-     * This code is based on the function found at:
-     *  http://recursive-design.com/blog/2008/03/11/format-json-with-php/
-     *
-     * Originally licensed under MIT by Dave Perrett <mail@recursive-design.com>
-     *
      * @param  mixed  $data    Data to encode into a formatted JSON string
      * @param  int    $options json_encode options (defaults to JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE)
      * @return string Encoded json
@@ -189,7 +184,15 @@ class JsonFile
     public static function encode($data, $options = 448)
     {
         if (version_compare(PHP_VERSION, '5.4', '>=')) {
-            return json_encode($data, $options);
+            $json = json_encode($data, $options);
+
+            //  compact brackets to follow recent php versions
+            if (PHP_VERSION_ID < 50428 || (PHP_VERSION_ID >= 50500 && PHP_VERSION_ID < 50512) || (defined('JSON_C_VERSION') && version_compare(phpversion('json'), '1.3.6', '<'))) {
+                $json = preg_replace('/\[\s+\]/', '[]', $json);
+                $json = preg_replace('/\{\s+\}/', '{}', $json);
+            }
+
+            return $json;
         }
 
         $json = json_encode($data);
@@ -202,81 +205,7 @@ class JsonFile
             return $json;
         }
 
-        $result = '';
-        $pos = 0;
-        $strLen = strlen($json);
-        $indentStr = '    ';
-        $newLine = "\n";
-        $outOfQuotes = true;
-        $buffer = '';
-        $noescape = true;
-
-        for ($i = 0; $i < $strLen; $i++) {
-            // Grab the next character in the string
-            $char = substr($json, $i, 1);
-
-            // Are we inside a quoted string?
-            if ('"' === $char && $noescape) {
-                $outOfQuotes = !$outOfQuotes;
-            }
-
-            if (!$outOfQuotes) {
-                $buffer .= $char;
-                $noescape = '\\' === $char ? !$noescape : true;
-                continue;
-            } elseif ('' !== $buffer) {
-                if ($unescapeSlashes) {
-                    $buffer = str_replace('\\/', '/', $buffer);
-                }
-
-                if ($unescapeUnicode && function_exists('mb_convert_encoding')) {
-                    // http://stackoverflow.com/questions/2934563/how-to-decode-unicode-escape-sequences-like-u00ed-to-proper-utf-8-encoded-cha
-                    $buffer = preg_replace_callback('/\\\\u([0-9a-f]{4})/i', function($match) {
-                        return mb_convert_encoding(pack('H*', $match[1]), 'UTF-8', 'UCS-2BE');
-                    }, $buffer);
-                }
-
-                $result .= $buffer.$char;
-                $buffer = '';
-                continue;
-            }
-
-            if (':' === $char) {
-                // Add a space after the : character
-                $char .= ' ';
-            } elseif (('}' === $char || ']' === $char)) {
-                $pos--;
-                $prevChar = substr($json, $i - 1, 1);
-
-                if ('{' !== $prevChar && '[' !== $prevChar) {
-                    // If this character is the end of an element,
-                    // output a new line and indent the next line
-                    $result .= $newLine;
-                    for ($j = 0; $j < $pos; $j++) {
-                        $result .= $indentStr;
-                    }
-                } else {
-                    // Collapse empty {} and []
-                    $result = rtrim($result)."\n\n".$indentStr;
-                }
-            }
-
-            $result .= $char;
-
-            // If the last character was the beginning of an element,
-            // output a new line and indent the next line
-            if (',' === $char || '{' === $char || '[' === $char) {
-                $result .= $newLine;
-
-                if ('{' === $char || '[' === $char) {
-                    $pos++;
-                }
-
-                for ($j = 0; $j < $pos; $j++) {
-                    $result .= $indentStr;
-                }
-            }
-        }
+        $result = JsonFormatter::format($json, $unescapeUnicode, $unescapeSlashes);
 
         return $result;
     }
diff --git a/vendor/composer/composer/src/Composer/Json/JsonFormatter.php b/vendor/composer/composer/src/Composer/Json/JsonFormatter.php
new file mode 100644
index 0000000..025a539
--- /dev/null
+++ b/vendor/composer/composer/src/Composer/Json/JsonFormatter.php
@@ -0,0 +1,128 @@
+<?php
+
+/*
+ * This file is part of Composer.
+ *
+ * (c) Nils Adermann <naderman@naderman.de>
+ *     Jordi Boggiano <j.boggiano@seld.be>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Composer\Json;
+
+/**
+ * Formats json strings used for php < 5.4 because the json_encode doesn't
+ * supports the flags JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE
+ * in these versions
+ *
+ * @author Konstantin Kudryashiv <ever.zet@gmail.com>
+ * @author Jordi Boggiano <j.boggiano@seld.be>
+ */
+class JsonFormatter
+{
+    /**
+     *
+     * This code is based on the function found at:
+     *  http://recursive-design.com/blog/2008/03/11/format-json-with-php/
+     *
+     * Originally licensed under MIT by Dave Perrett <mail@recursive-design.com>
+     *
+     *
+     * @param  string $json
+     * @param  bool   $unescapeUnicode Un escape unicode
+     * @param  bool   $unescapeSlashes Un escape slashes
+     * @return string
+     */
+    public static function format($json, $unescapeUnicode, $unescapeSlashes)
+    {
+        $result = '';
+        $pos = 0;
+        $strLen = strlen($json);
+        $indentStr = '    ';
+        $newLine = "\n";
+        $outOfQuotes = true;
+        $buffer = '';
+        $noescape = true;
+
+        for ($i = 0; $i < $strLen; $i++) {
+            // Grab the next character in the string
+            $char = substr($json, $i, 1);
+
+            // Are we inside a quoted string?
+            if ('"' === $char && $noescape) {
+                $outOfQuotes = !$outOfQuotes;
+            }
+
+            if (!$outOfQuotes) {
+                $buffer .= $char;
+                $noescape = '\\' === $char ? !$noescape : true;
+                continue;
+            } elseif ('' !== $buffer) {
+                if ($unescapeSlashes) {
+                    $buffer = str_replace('\\/', '/', $buffer);
+                }
+
+                if ($unescapeUnicode && function_exists('mb_convert_encoding')) {
+                    // http://stackoverflow.com/questions/2934563/how-to-decode-unicode-escape-sequences-like-u00ed-to-proper-utf-8-encoded-cha
+                    $buffer = preg_replace_callback('/(\\\\+)u([0-9a-f]{4})/i', function ($match) {
+                        $l = strlen($match[1]);
+
+                        if ($l % 2) {
+                            return str_repeat('\\', $l - 1) . mb_convert_encoding(
+                                pack('H*', $match[2]),
+                                'UTF-8',
+                                'UCS-2BE'
+                            );
+                        }
+
+                        return $match[0];
+                    }, $buffer);
+                }
+
+                $result .= $buffer.$char;
+                $buffer = '';
+                continue;
+            }
+
+            if (':' === $char) {
+                // Add a space after the : character
+                $char .= ' ';
+            } elseif (('}' === $char || ']' === $char)) {
+                $pos--;
+                $prevChar = substr($json, $i - 1, 1);
+
+                if ('{' !== $prevChar && '[' !== $prevChar) {
+                    // If this character is the end of an element,
+                    // output a new line and indent the next line
+                    $result .= $newLine;
+                    for ($j = 0; $j < $pos; $j++) {
+                        $result .= $indentStr;
+                    }
+                } else {
+                    // Collapse empty {} and []
+                    $result = rtrim($result);
+                }
+            }
+
+            $result .= $char;
+
+            // If the last character was the beginning of an element,
+            // output a new line and indent the next line
+            if (',' === $char || '{' === $char || '[' === $char) {
+                $result .= $newLine;
+
+                if ('{' === $char || '[' === $char) {
+                    $pos++;
+                }
+
+                for ($j = 0; $j < $pos; $j++) {
+                    $result .= $indentStr;
+                }
+            }
+        }
+
+        return $result;
+    }
+}
diff --git a/vendor/composer/composer/src/Composer/Json/JsonManipulator.php b/vendor/composer/composer/src/Composer/Json/JsonManipulator.php
index 7e6b7d6..dd8c49e 100644
--- a/vendor/composer/composer/src/Composer/Json/JsonManipulator.php
+++ b/vendor/composer/composer/src/Composer/Json/JsonManipulator.php
@@ -18,6 +18,7 @@ namespace Composer\Json;
 class JsonManipulator
 {
     private static $RECURSE_BLOCKS;
+    private static $RECURSE_ARRAYS;
     private static $JSON_VALUE;
     private static $JSON_STRING;
 
@@ -29,15 +30,19 @@ class JsonManipulator
     {
         if (!self::$RECURSE_BLOCKS) {
             self::$RECURSE_BLOCKS = '(?:[^{}]*|\{(?:[^{}]*|\{(?:[^{}]*|\{(?:[^{}]*|\{[^{}]*\})*\})*\})*\})*';
-            self::$JSON_STRING = '"(?:\\\\["bfnrt/\\\\]|\\\\u[a-fA-F0-9]{4}|[^\0-\x09\x0a-\x1f\\\\"])*"';
-            self::$JSON_VALUE = '(?:[0-9.]+|null|true|false|'.self::$JSON_STRING.'|\[[^\]]*\]|\{'.self::$RECURSE_BLOCKS.'\})';
+            self::$RECURSE_ARRAYS = '(?:[^\]]*|\[(?:[^\]]*|\[(?:[^\]]*|\[(?:[^\]]*|\[[^\]]*\])*\])*\])*\]|'.self::$RECURSE_BLOCKS.')*';
+            self::$JSON_STRING = '"(?:\\\\["bfnrt/\\\\]|\\\\u[a-fA-F0-9]{4}|[^\0-\x09\x0a-\x1f\\\\"])+"';
+            self::$JSON_VALUE = '(?:[0-9.]+|null|true|false|'.self::$JSON_STRING.'|\['.self::$RECURSE_ARRAYS.'\]|\{'.self::$RECURSE_BLOCKS.'\})';
         }
 
         $contents = trim($contents);
-        if (!preg_match('#^\{(.*)\}$#s', $contents)) {
+        if ($contents === '') {
+            $contents = '{}';
+        }
+        if (!$this->pregMatch('#^\{(.*)\}$#s', $contents)) {
             throw new \InvalidArgumentException('The json file must be an object ({})');
         }
-        $this->newline = false !== strpos($contents, "\r\n") ? "\r\n": "\n";
+        $this->newline = false !== strpos($contents, "\r\n") ? "\r\n" : "\n";
         $this->contents = $contents === '{}' ? '{' . $this->newline . '}' : $contents;
         $this->detectIndenting();
     }
@@ -49,33 +54,28 @@ class JsonManipulator
 
     public function addLink($type, $package, $constraint)
     {
-        $data = @json_decode($this->contents, true);
-
-        // abort if the file is not parseable
-        if (null === $data) {
-            return false;
-        }
+        $decoded = JsonFile::parseJson($this->contents);
 
         // no link of that type yet
-        if (!isset($data[$type])) {
+        if (!isset($decoded[$type])) {
             return $this->addMainKey($type, array($package => $constraint));
         }
 
         $regex = '{^(\s*\{\s*(?:'.self::$JSON_STRING.'\s*:\s*'.self::$JSON_VALUE.'\s*,\s*)*?)'.
             '('.preg_quote(JsonFile::encode($type)).'\s*:\s*)('.self::$JSON_VALUE.')(.*)}s';
-        if (!preg_match($regex, $this->contents, $matches)) {
+        if (!$this->pregMatch($regex, $this->contents, $matches)) {
             return false;
         }
 
         $links = $matches[3];
 
-        if (isset($data[$type][$package])) {
+        if (isset($decoded[$type][$package])) {
             // update existing link
             $packageRegex = str_replace('/', '\\\\?/', preg_quote($package));
             // addcslashes is used to double up backslashes since preg_replace resolves them as back references otherwise, see #1588
             $links = preg_replace('{"'.$packageRegex.'"(\s*:\s*)'.self::$JSON_STRING.'}i', addcslashes(JsonFile::encode($package).'${1}"'.$constraint.'"', '\\'), $links);
         } else {
-            if (preg_match('#^\s*\{\s*\S+.*?(\s*\}\s*)$#s', $links, $match)) {
+            if ($this->pregMatch('#^\s*\{\s*\S+.*?(\s*\}\s*)$#s', $links, $match)) {
                 // link missing but non empty links
                 $links = preg_replace(
                     '{'.preg_quote($match[1]).'$}',
@@ -117,21 +117,23 @@ class JsonManipulator
 
     public function addSubNode($mainNode, $name, $value)
     {
+        $decoded = JsonFile::parseJson($this->contents);
+
         // no main node yet
-        if (!preg_match('#"'.$mainNode.'":\s*\{#', $this->contents)) {
-            $this->addMainKey(''.$mainNode.'', array($name => $value));
+        if (!isset($decoded[$mainNode])) {
+            $this->addMainKey($mainNode, array($name => $value));
 
             return true;
         }
 
         $subName = null;
-        if (false !== strpos($name, '.')) {
+        if (in_array($mainNode, array('config', 'repositories')) && false !== strpos($name, '.')) {
             list($name, $subName) = explode('.', $name, 2);
         }
 
         // main node content not match-able
         $nodeRegex = '#("'.$mainNode.'":\s*\{)('.self::$RECURSE_BLOCKS.')(\})#s';
-        if (!preg_match($nodeRegex, $this->contents, $match)) {
+        if (!$this->pregMatch($nodeRegex, $this->contents, $match)) {
             return false;
         }
 
@@ -145,7 +147,7 @@ class JsonManipulator
         $that = $this;
 
         // child exists
-        if (preg_match('{("'.preg_quote($name).'"\s*:\s*)('.self::$JSON_VALUE.')(,?)}', $children, $matches)) {
+        if ($this->pregMatch('{("'.preg_quote($name).'"\s*:\s*)('.self::$JSON_VALUE.')(,?)}', $children, $matches)) {
             $children = preg_replace_callback('{("'.preg_quote($name).'"\s*:\s*)('.self::$JSON_VALUE.')(,?)}', function ($matches) use ($name, $subName, $value, $that) {
                 if ($subName !== null) {
                     $curVal = json_decode($matches[2], true);
@@ -155,7 +157,7 @@ class JsonManipulator
 
                 return $matches[1] . $that->format($value, 1) . $matches[3];
             }, $children);
-        } elseif (preg_match('#[^\s](\s*)$#', $children, $match)) {
+        } elseif ($this->pregMatch('#[^\s](\s*)$#', $children, $match)) {
             if ($subName !== null) {
                 $value = array($subName => $value);
             }
@@ -182,19 +184,16 @@ class JsonManipulator
 
     public function removeSubNode($mainNode, $name)
     {
-        // no node
-        if (!preg_match('#"'.$mainNode.'":\s*\{#', $this->contents)) {
-            return true;
-        }
+        $decoded = JsonFile::parseJson($this->contents);
 
-        // empty node
-        if (preg_match('#"'.$mainNode.'":\s*\{\s*\}#s', $this->contents)) {
+        // no node or empty node
+        if (empty($decoded[$mainNode])) {
             return true;
         }
 
         // no node content match-able
         $nodeRegex = '#("'.$mainNode.'":\s*\{)('.self::$RECURSE_BLOCKS.')(\})#s';
-        if (!preg_match($nodeRegex, $this->contents, $match)) {
+        if (!$this->pregMatch($nodeRegex, $this->contents, $match)) {
             return false;
         }
 
@@ -206,12 +205,17 @@ class JsonManipulator
         }
 
         $subName = null;
-        if (false !== strpos($name, '.')) {
+        if (in_array($mainNode, array('config', 'repositories')) && false !== strpos($name, '.')) {
             list($name, $subName) = explode('.', $name, 2);
         }
 
+        // no node to remove
+        if (!isset($decoded[$mainNode][$name]) || ($subName && !isset($decoded[$mainNode][$name][$subName]))) {
+            return true;
+        }
+
         // try and find a match for the subkey
-        if (preg_match('{"'.preg_quote($name).'"\s*:}i', $children)) {
+        if ($this->pregMatch('{"'.preg_quote($name).'"\s*:}i', $children)) {
             // find best match for the value of "name"
             if (preg_match_all('{"'.preg_quote($name).'"\s*:\s*(?:'.self::$JSON_VALUE.')}', $children, $matches)) {
                 $bestMatch = '';
@@ -228,6 +232,8 @@ class JsonManipulator
                     }
                 }
             }
+        } else {
+            $childrenClean = $children;
         }
 
         // no child data left, $name was the only key in
@@ -260,12 +266,13 @@ class JsonManipulator
 
     public function addMainKey($key, $content)
     {
+        $decoded = JsonFile::parseJson($this->contents);
         $content = $this->format($content);
 
         // key exists already
         $regex = '{^(\s*\{\s*(?:'.self::$JSON_STRING.'\s*:\s*'.self::$JSON_VALUE.'\s*,\s*)*?)'.
             '('.preg_quote(JsonFile::encode($key)).'\s*:\s*'.self::$JSON_VALUE.')(.*)}s';
-        if (preg_match($regex, $this->contents, $matches)) {
+        if (isset($decoded[$key]) && $this->pregMatch($regex, $this->contents, $matches)) {
             // invalid match due to un-regexable content, abort
             if (!@json_decode('{'.$matches[2].'}')) {
                 return false;
@@ -277,7 +284,7 @@ class JsonManipulator
         }
 
         // append at the end of the file and keep whitespace
-        if (preg_match('#[^{\s](\s*)\}$#', $this->contents, $match)) {
+        if ($this->pregMatch('#[^{\s](\s*)\}$#', $this->contents, $match)) {
             $this->contents = preg_replace(
                 '#'.$match[1].'\}$#',
                 addcslashes(',' . $this->newline . $this->indent . JsonFile::encode($key). ': '. $content . $this->newline . '}', '\\'),
@@ -324,10 +331,36 @@ class JsonManipulator
 
     protected function detectIndenting()
     {
-        if (preg_match('{^(\s+)"}m', $this->contents, $match)) {
+        if ($this->pregMatch('{^(\s+)"}m', $this->contents, $match)) {
             $this->indent = $match[1];
         } else {
             $this->indent = '    ';
         }
     }
+
+    protected function pregMatch($re, $str, &$matches = array())
+    {
+        $count = preg_match($re, $str, $matches);
+
+        if ($count === false) {
+            switch (preg_last_error()) {
+                case PREG_NO_ERROR:
+                    throw new \RuntimeException('Failed to execute regex: PREG_NO_ERROR');
+                case PREG_INTERNAL_ERROR:
+                    throw new \RuntimeException('Failed to execute regex: PREG_INTERNAL_ERROR');
+                case PREG_BACKTRACK_LIMIT_ERROR:
+                    throw new \RuntimeException('Failed to execute regex: PREG_BACKTRACK_LIMIT_ERROR');
+                case PREG_RECURSION_LIMIT_ERROR:
+                    throw new \RuntimeException('Failed to execute regex: PREG_RECURSION_LIMIT_ERROR');
+                case PREG_BAD_UTF8_ERROR:
+                    throw new \RuntimeException('Failed to execute regex: PREG_BAD_UTF8_ERROR');
+                case PREG_BAD_UTF8_OFFSET_ERROR:
+                    throw new \RuntimeException('Failed to execute regex: PREG_BAD_UTF8_OFFSET_ERROR');
+                default:
+                    throw new \RuntimeException('Failed to execute regex: Unknown error');
+            }
+        }
+
+        return $count;
+    }
 }
diff --git a/vendor/composer/composer/src/Composer/Package/AliasPackage.php b/vendor/composer/composer/src/Composer/Package/AliasPackage.php
index 6f1fb50..3ab9c94 100644
--- a/vendor/composer/composer/src/Composer/Package/AliasPackage.php
+++ b/vendor/composer/composer/src/Composer/Package/AliasPackage.php
@@ -209,6 +209,10 @@ class AliasPackage extends BasePackage implements CompletePackageInterface
     {
         return $this->aliasOf->getSourceUrl();
     }
+    public function getSourceUrls()
+    {
+        return $this->aliasOf->getSourceUrls();
+    }
     public function getSourceReference()
     {
         return $this->aliasOf->getSourceReference();
@@ -217,6 +221,14 @@ class AliasPackage extends BasePackage implements CompletePackageInterface
     {
         return $this->aliasOf->setSourceReference($reference);
     }
+    public function setSourceMirrors($mirrors)
+    {
+        return $this->aliasOf->setSourceMirrors($mirrors);
+    }
+    public function getSourceMirrors()
+    {
+        return $this->aliasOf->getSourceMirrors();
+    }
     public function getDistType()
     {
         return $this->aliasOf->getDistType();
@@ -225,14 +237,38 @@ class AliasPackage extends BasePackage implements CompletePackageInterface
     {
         return $this->aliasOf->getDistUrl();
     }
+    public function getDistUrls()
+    {
+        return $this->aliasOf->getDistUrls();
+    }
     public function getDistReference()
     {
         return $this->aliasOf->getDistReference();
     }
+    public function setDistReference($reference)
+    {
+        return $this->aliasOf->setDistReference($reference);
+    }
     public function getDistSha1Checksum()
     {
         return $this->aliasOf->getDistSha1Checksum();
     }
+    public function setTransportOptions(array $options)
+    {
+        return $this->aliasOf->setTransportOptions($options);
+    }
+    public function getTransportOptions()
+    {
+        return $this->aliasOf->getTransportOptions();
+    }
+    public function setDistMirrors($mirrors)
+    {
+        return $this->aliasOf->setDistMirrors($mirrors);
+    }
+    public function getDistMirrors()
+    {
+        return $this->aliasOf->getDistMirrors();
+    }
     public function getScripts()
     {
         return $this->aliasOf->getScripts();
@@ -245,6 +281,10 @@ class AliasPackage extends BasePackage implements CompletePackageInterface
     {
         return $this->aliasOf->getAutoload();
     }
+    public function getDevAutoload()
+    {
+        return $this->aliasOf->getDevAutoload();
+    }
     public function getIncludePaths()
     {
         return $this->aliasOf->getIncludePaths();
@@ -293,6 +333,14 @@ class AliasPackage extends BasePackage implements CompletePackageInterface
     {
         return $this->aliasOf->getArchiveExcludes();
     }
+    public function isAbandoned()
+    {
+        return $this->aliasOf->isAbandoned();
+    }
+    public function getReplacementPackage()
+    {
+        return $this->aliasOf->getReplacementPackage();
+    }
     public function __toString()
     {
         return parent::__toString().' (alias of '.$this->aliasOf->getVersion().')';
diff --git a/vendor/composer/composer/src/Composer/Package/Archiver/ArchivableFilesFinder.php b/vendor/composer/composer/src/Composer/Package/Archiver/ArchivableFilesFinder.php
index f6cadbe..44c6826 100644
--- a/vendor/composer/composer/src/Composer/Package/Archiver/ArchivableFilesFinder.php
+++ b/vendor/composer/composer/src/Composer/Package/Archiver/ArchivableFilesFinder.php
@@ -52,6 +52,10 @@ class ArchivableFilesFinder extends \FilterIterator
         $this->finder = new Finder\Finder();
 
         $filter = function (\SplFileInfo $file) use ($sources, $filters, $fs) {
+            if ($file->isLink() && strpos($file->getLinkTarget(), $sources) !== 0) {
+                return false;
+            }
+
             $relativePath = preg_replace(
                 '#^'.preg_quote($sources, '#').'#',
                 '',
diff --git a/vendor/composer/composer/src/Composer/Package/Archiver/ArchiveManager.php b/vendor/composer/composer/src/Composer/Package/Archiver/ArchiveManager.php
index 8086524..55d87c1 100644
--- a/vendor/composer/composer/src/Composer/Package/Archiver/ArchiveManager.php
+++ b/vendor/composer/composer/src/Composer/Package/Archiver/ArchiveManager.php
@@ -14,7 +14,7 @@ namespace Composer\Package\Archiver;
 
 use Composer\Downloader\DownloadManager;
 use Composer\Package\PackageInterface;
-use Composer\Package\RootPackage;
+use Composer\Package\RootPackageInterface;
 use Composer\Util\Filesystem;
 use Composer\Json\JsonFile;
 
@@ -72,7 +72,7 @@ class ArchiveManager
      */
     public function getPackageFilename(PackageInterface $package)
     {
-        $nameParts = array(preg_replace('#[^a-z0-9-_.]#i', '-', $package->getName()));
+        $nameParts = array(preg_replace('#[^a-z0-9-_]#i', '-', $package->getName()));
 
         if (preg_match('{^[a-f0-9]{40}$}', $package->getDistReference())) {
             $nameParts = array_merge($nameParts, array($package->getDistReference(), $package->getDistType()));
@@ -133,11 +133,11 @@ class ArchiveManager
             return $target;
         }
 
-        if ($package instanceof RootPackage) {
+        if ($package instanceof RootPackageInterface) {
             $sourcePath = realpath('.');
         } else {
             // Directory used to download the sources
-            $sourcePath = sys_get_temp_dir().'/composer_archiver/'.$packageName;
+            $sourcePath = sys_get_temp_dir().'/composer_archiver/arch'.uniqid();
             $filesystem->ensureDirectoryExists($sourcePath);
 
             // Download sources
@@ -154,13 +154,17 @@ class ArchiveManager
         }
 
         // Create the archive
-        $archivePath = $usableArchiver->archive($sourcePath, $target, $format, $package->getArchiveExcludes());
+        $tempTarget = sys_get_temp_dir().'/composer_archiver/arch'.uniqid().'.'.$format;
+        $filesystem->ensureDirectoryExists(dirname($tempTarget));
+
+        $archivePath = $usableArchiver->archive($sourcePath, $tempTarget, $format, $package->getArchiveExcludes());
+        rename($archivePath, $target);
 
         // cleanup temporary download
-        if (!$package instanceof RootPackage) {
+        if (!$package instanceof RootPackageInterface) {
             $filesystem->removeDirectory($sourcePath);
         }
 
-        return $archivePath;
+        return $target;
     }
 }
diff --git a/vendor/composer/composer/src/Composer/Package/Archiver/BaseExcludeFilter.php b/vendor/composer/composer/src/Composer/Package/Archiver/BaseExcludeFilter.php
index bba2003..d724f31 100644
--- a/vendor/composer/composer/src/Composer/Package/Archiver/BaseExcludeFilter.php
+++ b/vendor/composer/composer/src/Composer/Package/Archiver/BaseExcludeFilter.php
@@ -82,17 +82,14 @@ abstract class BaseExcludeFilter
                 function ($line) use ($lineParser) {
                     $line = trim($line);
 
-                    $commentHash = strpos($line, '#');
-                    if ($commentHash !== false) {
-                        $line = substr($line, 0, $commentHash);
+                    if (!$line || 0 === strpos($line, '#')) {
+                        return;
                     }
 
-                    if ($line) {
-                        return call_user_func($lineParser, $line);
-                    }
-
-                    return null;
-                }, $lines),
+                    return call_user_func($lineParser, $line);
+                },
+                $lines
+            ),
             function ($pattern) {
                 return $pattern !== null;
             }
@@ -136,11 +133,15 @@ abstract class BaseExcludeFilter
         if (strlen($rule) && $rule[0] === '/') {
             $pattern .= '^/';
             $rule = substr($rule, 1);
-        } elseif (false === strpos($rule, '/') || strlen($rule) - 1 === strpos($rule, '/')) {
+        } elseif (strlen($rule) - 1 === strpos($rule, '/')) {
+            $pattern .= '/';
+            $rule = substr($rule, 0, -1);
+        } elseif (false === strpos($rule, '/')) {
             $pattern .= '/';
         }
 
-        $pattern .= substr(Finder\Glob::toRegex($rule), 2, -2);
+        // remove delimiters as well as caret (^) and dollar sign ($) from the regex
+        $pattern .= substr(Finder\Glob::toRegex($rule), 2, -2) . '(?=$|/)';
 
         return array($pattern . '#', $negate, false);
     }
diff --git a/vendor/composer/composer/src/Composer/Package/BasePackage.php b/vendor/composer/composer/src/Composer/Package/BasePackage.php
index a783ca7..965e5dd 100644
--- a/vendor/composer/composer/src/Composer/Package/BasePackage.php
+++ b/vendor/composer/composer/src/Composer/Package/BasePackage.php
@@ -44,11 +44,17 @@ abstract class BasePackage implements PackageInterface
         'dev'    => self::STABILITY_DEV,
     );
 
+    /**
+     * READ-ONLY: The package id, public for fast access in dependency solver
+     * @var int
+     */
+    public $id;
+
     protected $name;
     protected $prettyName;
 
     protected $repository;
-    protected $id;
+    protected $transportOptions;
 
     /**
      * All descendants' constructors should call this parent constructor
@@ -60,6 +66,7 @@ abstract class BasePackage implements PackageInterface
         $this->prettyName = $name;
         $this->name = strtolower($name);
         $this->id = -1;
+        $this->transportOptions = array();
     }
 
     /**
@@ -134,6 +141,24 @@ abstract class BasePackage implements PackageInterface
     }
 
     /**
+     * {@inheritDoc}
+     */
+    public function getTransportOptions()
+    {
+        return $this->transportOptions;
+    }
+
+    /**
+     * Configures the list of options to download package dist files
+     *
+     * @param array $options
+     */
+    public function setTransportOptions(array $options)
+    {
+        $this->transportOptions = $options;
+    }
+
+    /**
      * checks if this package is a platform package
      *
      * @return boolean
diff --git a/vendor/composer/composer/src/Composer/Package/CompletePackage.php b/vendor/composer/composer/src/Composer/Package/CompletePackage.php
index 418c87d..0de1609 100644
--- a/vendor/composer/composer/src/Composer/Package/CompletePackage.php
+++ b/vendor/composer/composer/src/Composer/Package/CompletePackage.php
@@ -27,6 +27,7 @@ class CompletePackage extends Package implements CompletePackageInterface
     protected $homepage;
     protected $scripts = array();
     protected $support = array();
+    protected $abandoned = false;
 
     /**
      * @param array $scripts
@@ -47,7 +48,7 @@ class CompletePackage extends Package implements CompletePackageInterface
     /**
      * Set the repositories
      *
-     * @param string $repositories
+     * @param array $repositories
      */
     public function setRepositories($repositories)
     {
@@ -169,4 +170,30 @@ class CompletePackage extends Package implements CompletePackageInterface
     {
         return $this->support;
     }
+
+    /**
+     * @return boolean
+     */
+    public function isAbandoned()
+    {
+        return (boolean) $this->abandoned;
+    }
+
+    /**
+     * @param boolean|string $abandoned
+     */
+    public function setAbandoned($abandoned)
+    {
+        $this->abandoned = $abandoned;
+    }
+
+    /**
+     * If the package is abandoned and has a suggested replacement, this method returns it
+     *
+     * @return string|null
+     */
+    public function getReplacementPackage()
+    {
+        return is_string($this->abandoned) ? $this->abandoned : null;
+    }
 }
diff --git a/vendor/composer/composer/src/Composer/Package/CompletePackageInterface.php b/vendor/composer/composer/src/Composer/Package/CompletePackageInterface.php
index a341766..8263a65 100644
--- a/vendor/composer/composer/src/Composer/Package/CompletePackageInterface.php
+++ b/vendor/composer/composer/src/Composer/Package/CompletePackageInterface.php
@@ -78,4 +78,18 @@ interface CompletePackageInterface extends PackageInterface
      * @return array
      */
     public function getSupport();
+
+    /**
+     * Returns if the package is abandoned or not
+     *
+     * @return boolean
+     */
+    public function isAbandoned();
+
+    /**
+     * If the package is abandoned and has a suggested replacement, this method returns it
+     *
+     * @return string
+     */
+    public function getReplacementPackage();
 }
diff --git a/vendor/composer/composer/src/Composer/Package/Dumper/ArrayDumper.php b/vendor/composer/composer/src/Composer/Package/Dumper/ArrayDumper.php
index be94ade..714c518 100644
--- a/vendor/composer/composer/src/Composer/Package/Dumper/ArrayDumper.php
+++ b/vendor/composer/composer/src/Composer/Package/Dumper/ArrayDumper.php
@@ -31,6 +31,7 @@ class ArrayDumper
             'extra',
             'installationSource' => 'installation-source',
             'autoload',
+            'devAutoload' => 'autoload-dev',
             'notificationUrl' => 'notification-url',
             'includePaths' => 'include-path',
         );
@@ -48,6 +49,9 @@ class ArrayDumper
             $data['source']['type'] = $package->getSourceType();
             $data['source']['url'] = $package->getSourceUrl();
             $data['source']['reference'] = $package->getSourceReference();
+            if ($mirrors = $package->getSourceMirrors()) {
+                $data['source']['mirrors'] = $mirrors;
+            }
         }
 
         if ($package->getDistType()) {
@@ -55,6 +59,9 @@ class ArrayDumper
             $data['dist']['url'] = $package->getDistUrl();
             $data['dist']['reference'] = $package->getDistReference();
             $data['dist']['shasum'] = $package->getDistSha1Checksum();
+            if ($mirrors = $package->getDistMirrors()) {
+                $data['dist']['mirrors'] = $mirrors;
+            }
         }
 
         if ($package->getArchiveExcludes()) {
@@ -98,6 +105,10 @@ class ArrayDumper
             if (isset($data['keywords']) && is_array($data['keywords'])) {
                 sort($data['keywords']);
             }
+
+            if ($package->isAbandoned()) {
+                $data['abandoned'] = $package->getReplacementPackage() ?: true;
+            }
         }
 
         if ($package instanceof RootPackageInterface) {
@@ -107,6 +118,10 @@ class ArrayDumper
             }
         }
 
+        if (count($package->getTransportOptions()) > 0) {
+            $data['transport-options'] = $package->getTransportOptions();
+        }
+
         return $data;
     }
 
diff --git a/vendor/composer/composer/src/Composer/Package/Link.php b/vendor/composer/composer/src/Composer/Package/Link.php
index 159fa3a..5aba8b1 100644
--- a/vendor/composer/composer/src/Composer/Package/Link.php
+++ b/vendor/composer/composer/src/Composer/Package/Link.php
@@ -13,7 +13,6 @@
 namespace Composer\Package;
 
 use Composer\Package\LinkConstraint\LinkConstraintInterface;
-use Composer\Package\PackageInterface;
 
 /**
  * Represents a link between two packages, represented by their names
diff --git a/vendor/composer/composer/src/Composer/Package/LinkConstraint/SpecificConstraint.php b/vendor/composer/composer/src/Composer/Package/LinkConstraint/SpecificConstraint.php
index eda09c6..e0904db 100644
--- a/vendor/composer/composer/src/Composer/Package/LinkConstraint/SpecificConstraint.php
+++ b/vendor/composer/composer/src/Composer/Package/LinkConstraint/SpecificConstraint.php
@@ -50,5 +50,4 @@ abstract class SpecificConstraint implements LinkConstraintInterface
     // implementations must implement a method of this format:
     // not declared abstract here because type hinting violates parameter coherence (TODO right word?)
     // public function matchSpecific(<SpecificConstraintType> $provider);
-
 }
diff --git a/vendor/composer/composer/src/Composer/Package/Loader/ArrayLoader.php b/vendor/composer/composer/src/Composer/Package/Loader/ArrayLoader.php
index 3940bde..243b7b5 100644
--- a/vendor/composer/composer/src/Composer/Package/Loader/ArrayLoader.php
+++ b/vendor/composer/composer/src/Composer/Package/Loader/ArrayLoader.php
@@ -25,13 +25,15 @@ use Composer\Package\Version\VersionParser;
 class ArrayLoader implements LoaderInterface
 {
     protected $versionParser;
+    protected $loadOptions;
 
-    public function __construct(VersionParser $parser = null)
+    public function __construct(VersionParser $parser = null, $loadOptions = false)
     {
         if (!$parser) {
             $parser = new VersionParser;
         }
         $this->versionParser = $parser;
+        $this->loadOptions = $loadOptions;
     }
 
     public function load(array $config, $class = 'Composer\Package\CompletePackage')
@@ -65,7 +67,7 @@ class ArrayLoader implements LoaderInterface
                 throw new \UnexpectedValueException('Package '.$config['name'].'\'s bin key should be an array, '.gettype($config['bin']).' given.');
             }
             foreach ($config['bin'] as $key => $bin) {
-                $config['bin'][$key]= ltrim($bin, '/');
+                $config['bin'][$key] = ltrim($bin, '/');
             }
             $package->setBinaries($config['bin']);
         }
@@ -85,6 +87,9 @@ class ArrayLoader implements LoaderInterface
             $package->setSourceType($config['source']['type']);
             $package->setSourceUrl($config['source']['url']);
             $package->setSourceReference($config['source']['reference']);
+            if (isset($config['source']['mirrors'])) {
+                $package->setSourceMirrors($config['source']['mirrors']);
+            }
         }
 
         if (isset($config['dist'])) {
@@ -101,6 +106,9 @@ class ArrayLoader implements LoaderInterface
             $package->setDistUrl($config['dist']['url']);
             $package->setDistReference(isset($config['dist']['reference']) ? $config['dist']['reference'] : null);
             $package->setDistSha1Checksum(isset($config['dist']['shasum']) ? $config['dist']['shasum'] : null);
+            if (isset($config['dist']['mirrors'])) {
+                $package->setDistMirrors($config['dist']['mirrors']);
+            }
         }
 
         foreach (Package\BasePackage::$supportedLinkTypes as $type => $opts) {
@@ -130,6 +138,10 @@ class ArrayLoader implements LoaderInterface
             $package->setAutoload($config['autoload']);
         }
 
+        if (isset($config['autoload-dev'])) {
+            $package->setDevAutoload($config['autoload-dev']);
+        }
+
         if (isset($config['include-path'])) {
             $package->setIncludePaths($config['include-path']);
         }
@@ -183,6 +195,10 @@ class ArrayLoader implements LoaderInterface
             if (isset($config['support'])) {
                 $package->setSupport($config['support']);
             }
+
+            if (isset($config['abandoned'])) {
+                $package->setAbandoned($config['abandoned']);
+            }
         }
 
         if ($aliasNormalized = $this->getBranchAlias($config)) {
@@ -193,6 +209,10 @@ class ArrayLoader implements LoaderInterface
             }
         }
 
+        if ($this->loadOptions && isset($config['transport-options'])) {
+            $package->setTransportOptions($config['transport-options']);
+        }
+
         return $package;
     }
 
diff --git a/vendor/composer/composer/src/Composer/Package/Loader/RootPackageLoader.php b/vendor/composer/composer/src/Composer/Package/Loader/RootPackageLoader.php
index a067fa6..64880d7 100644
--- a/vendor/composer/composer/src/Composer/Package/Loader/RootPackageLoader.php
+++ b/vendor/composer/composer/src/Composer/Package/Loader/RootPackageLoader.php
@@ -22,6 +22,7 @@ use Composer\Repository\Vcs\HgDriver;
 use Composer\IO\NullIO;
 use Composer\Util\ProcessExecutor;
 use Composer\Util\Git as GitUtil;
+use Composer\Util\Svn as SvnUtil;
 
 /**
  * ArrayLoader built for the sole purpose of loading the root package
@@ -179,14 +180,18 @@ class RootPackageLoader extends ArrayLoader
                 return $version;
             }
 
-            return $this->guessHgVersion($config);
+            $version = $this->guessHgVersion($config);
+            if (null !== $version) {
+                return $version;
+            }
+
+            return $this->guessSvnVersion($config);
         }
     }
 
     private function guessGitVersion(array $config)
     {
-        $util = new GitUtil;
-        $util->cleanEnv();
+        GitUtil::cleanEnv();
 
         // try to fetch current version from git tags
         if (0 === $this->process->execute('git describe --exact-match --tags', $output)) {
@@ -204,7 +209,7 @@ class RootPackageLoader extends ArrayLoader
 
             // find current branch and collect all branch names
             foreach ($this->process->splitLines($output) as $branch) {
-                if ($branch && preg_match('{^(?:\* ) *(\(no branch\)|\(detached from [a-f0-9]+\)|\S+) *([a-f0-9]+) .*$}', $branch, $match)) {
+                if ($branch && preg_match('{^(?:\* ) *(\(no branch\)|\(detached from \S+\)|\S+) *([a-f0-9]+) .*$}', $branch, $match)) {
                     if ($match[1] === '(no branch)' || substr($match[1], 0, 10) === '(detached ') {
                         $version = 'dev-'.$match[2];
                         $isFeatureBranch = true;
@@ -295,4 +300,32 @@ class RootPackageLoader extends ArrayLoader
 
         return $version;
     }
+
+    private function guessSvnVersion(array $config)
+    {
+        SvnUtil::cleanEnv();
+
+        // try to fetch current version from svn
+        if (0 === $this->process->execute('svn info --xml', $output)) {
+            $trunkPath = isset($config['trunk-path']) ? preg_quote($config['trunk-path'], '#') : 'trunk';
+            $branchesPath = isset($config['branches-path']) ? preg_quote($config['branches-path'], '#') : 'branches';
+            $tagsPath = isset($config['tags-path']) ? preg_quote($config['tags-path'], '#') : 'tags';
+
+            $urlPattern = '#<url>.*/('.$trunkPath.'|('.$branchesPath.'|'. $tagsPath .')/(.*))</url>#';
+
+            if (preg_match($urlPattern, $output, $matches)) {
+                if (isset($matches[2]) && ($branchesPath === $matches[2] || $tagsPath === $matches[2])) {
+                    // we are in a branches path
+                    $version = $this->versionParser->normalizeBranch($matches[3]);
+                    if ('9999999-dev' === $version) {
+                        $version = 'dev-'.$matches[3];
+                    }
+
+                    return $version;
+                }
+
+                return $this->versionParser->normalize(trim($matches[1]));
+            }
+        }
+    }
 }
diff --git a/vendor/composer/composer/src/Composer/Package/Loader/ValidatingArrayLoader.php b/vendor/composer/composer/src/Composer/Package/Loader/ValidatingArrayLoader.php
index a877739..3493d3d 100644
--- a/vendor/composer/composer/src/Composer/Package/Loader/ValidatingArrayLoader.php
+++ b/vendor/composer/composer/src/Composer/Package/Loader/ValidatingArrayLoader.php
@@ -14,25 +14,32 @@ namespace Composer\Package\Loader;
 
 use Composer\Package;
 use Composer\Package\BasePackage;
+use Composer\Package\LinkConstraint\VersionConstraint;
 use Composer\Package\Version\VersionParser;
+use Composer\Repository\PlatformRepository;
 
 /**
  * @author Jordi Boggiano <j.boggiano@seld.be>
  */
 class ValidatingArrayLoader implements LoaderInterface
 {
+    const CHECK_ALL = 1;
+    const CHECK_UNBOUND_CONSTRAINTS = 1;
+
     private $loader;
     private $versionParser;
     private $errors;
     private $warnings;
     private $config;
     private $strictName;
+    private $flags;
 
-    public function __construct(LoaderInterface $loader, $strictName = true, VersionParser $parser = null)
+    public function __construct(LoaderInterface $loader, $strictName = true, VersionParser $parser = null, $flags = 0)
     {
         $this->loader = $loader;
         $this->versionParser = $parser ?: new VersionParser();
         $this->strictName = $strictName;
+        $this->flags = $flags;
     }
 
     public function load(array $config, $class = 'Composer\Package\CompletePackage')
@@ -51,8 +58,8 @@ class ValidatingArrayLoader implements LoaderInterface
             try {
                 $this->versionParser->normalize($this->config['version']);
             } catch (\Exception $e) {
-                unset($this->config['version']);
                 $this->errors[] = 'version : invalid value ('.$this->config['version'].'): '.$e->getMessage();
+                unset($this->config['version']);
             }
         }
 
@@ -142,6 +149,8 @@ class ValidatingArrayLoader implements LoaderInterface
             }
         }
 
+        $unboundConstraint = new VersionConstraint('=', $this->versionParser->normalize('dev-master'));
+
         foreach (array_keys(BasePackage::$supportedLinkTypes) as $linkType) {
             if ($this->validateArray($linkType) && isset($this->config[$linkType])) {
                 foreach ($this->config[$linkType] as $package => $constraint) {
@@ -153,10 +162,21 @@ class ValidatingArrayLoader implements LoaderInterface
                         unset($this->config[$linkType][$package]);
                     } elseif ('self.version' !== $constraint) {
                         try {
-                            $this->versionParser->parseConstraints($constraint);
+                            $linkConstraint = $this->versionParser->parseConstraints($constraint);
                         } catch (\Exception $e) {
                             $this->errors[] = $linkType.'.'.$package.' : invalid version constraint ('.$e->getMessage().')';
                             unset($this->config[$linkType][$package]);
+                            continue;
+                        }
+
+                        // check requires for unbound constraints on non-platform packages
+                        if (
+                            ($this->flags & self::CHECK_UNBOUND_CONSTRAINTS)
+                            && 'require' === $linkType
+                            && $linkConstraint->matches($unboundConstraint)
+                            && !preg_match(PlatformRepository::PLATFORM_PACKAGE_REGEX, $package)
+                        ) {
+                            $this->warnings[] = $linkType.'.'.$package.' : unbound version constraints ('.$constraint.') should be avoided';
                         }
                     }
                 }
@@ -210,6 +230,7 @@ class ValidatingArrayLoader implements LoaderInterface
         // TODO validate package repositories' packages using this recursively
 
         $this->validateFlatArray('include-path');
+        $this->validateArray('transport-options');
 
         // branch alias validation
         if (isset($this->config['extra']['branch-alias'])) {
diff --git a/vendor/composer/composer/src/Composer/Package/Locker.php b/vendor/composer/composer/src/Composer/Package/Locker.php
index a928584..9d49f6e 100644
--- a/vendor/composer/composer/src/Composer/Package/Locker.php
+++ b/vendor/composer/composer/src/Composer/Package/Locker.php
@@ -16,7 +16,6 @@ use Composer\Json\JsonFile;
 use Composer\Installer\InstallationManager;
 use Composer\Repository\RepositoryManager;
 use Composer\Util\ProcessExecutor;
-use Composer\Package\AliasPackage;
 use Composer\Repository\ArrayRepository;
 use Composer\Package\Dumper\ArrayDumper;
 use Composer\Package\Loader\ArrayLoader;
@@ -56,7 +55,7 @@ class Locker
         $this->repositoryManager = $repositoryManager;
         $this->installationManager = $installationManager;
         $this->hash = $hash;
-        $this->loader = new ArrayLoader();
+        $this->loader = new ArrayLoader(null, true);
         $this->dumper = new ArrayDumper();
         $this->process = new ProcessExecutor($io);
     }
@@ -174,6 +173,15 @@ class Locker
         return isset($lockData['stability-flags']) ? $lockData['stability-flags'] : array();
     }
 
+    public function getPreferStable()
+    {
+        $lockData = $this->getLockData();
+
+        // return null if not set to allow caller logic to choose the
+        // right behavior since old lock files have no prefer-stable
+        return isset($lockData['prefer-stable']) ? $lockData['prefer-stable'] : null;
+    }
+
     public function getAliases()
     {
         $lockData = $this->getLockData();
@@ -204,19 +212,23 @@ class Locker
      * @param array  $aliases          array of aliases
      * @param string $minimumStability
      * @param array  $stabilityFlags
+     * @param bool   $preferStable
      *
      * @return bool
      */
-    public function setLockData(array $packages, $devPackages, array $platformReqs, $platformDevReqs, array $aliases, $minimumStability, array $stabilityFlags)
+    public function setLockData(array $packages, $devPackages, array $platformReqs, $platformDevReqs, array $aliases, $minimumStability, array $stabilityFlags, $preferStable)
     {
         $lock = array(
-            '_readme' => array('This file locks the dependencies of your project to a known state', 'Read more about it at http://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file'),
+            '_readme' => array('This file locks the dependencies of your project to a known state',
+                               'Read more about it at http://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file',
+                               'This file is @gener'.'ated automatically'),
             'hash' => $this->hash,
             'packages' => null,
             'packages-dev' => null,
             'aliases' => array(),
             'minimum-stability' => $minimumStability,
             'stability-flags' => $stabilityFlags,
+            'prefer-stable' => $preferStable,
         );
 
         foreach ($aliases as $package => $versions) {
@@ -285,7 +297,7 @@ class Locker
                 $time = $this->getPackageTime($package) ?: $time;
             }
             if (null !== $time) {
-               $spec['time'] = $time;
+                $spec['time'] = $time;
             }
 
             unset($spec['installation-source']);
@@ -327,16 +339,15 @@ class Locker
             $sourceRef = $package->getSourceReference() ?: $package->getDistReference();
             switch ($sourceType) {
                 case 'git':
-                    $util = new GitUtil;
-                    $util->cleanEnv();
+                    GitUtil::cleanEnv();
 
-                    if (0 === $this->process->execute('git log -n1 --pretty=%ct '.escapeshellarg($sourceRef), $output, $path) && preg_match('{^\s*\d+\s*$}', $output)) {
+                    if (0 === $this->process->execute('git log -n1 --pretty=%ct '.ProcessExecutor::escape($sourceRef), $output, $path) && preg_match('{^\s*\d+\s*$}', $output)) {
                         $datetime = new \DateTime('@'.trim($output), new \DateTimeZone('UTC'));
                     }
                     break;
 
                 case 'hg':
-                    if (0 === $this->process->execute('hg log --template "{date|hgdate}" -r '.escapeshellarg($sourceRef), $output, $path) && preg_match('{^\s*(\d+)\s*}', $output, $match)) {
+                    if (0 === $this->process->execute('hg log --template "{date|hgdate}" -r '.ProcessExecutor::escape($sourceRef), $output, $path) && preg_match('{^\s*(\d+)\s*}', $output, $match)) {
                         $datetime = new \DateTime('@'.$match[1], new \DateTimeZone('UTC'));
                     }
                     break;
diff --git a/vendor/composer/composer/src/Composer/Package/Package.php b/vendor/composer/composer/src/Composer/Package/Package.php
index b8a8252..0c98a0e 100644
--- a/vendor/composer/composer/src/Composer/Package/Package.php
+++ b/vendor/composer/composer/src/Composer/Package/Package.php
@@ -13,6 +13,7 @@
 namespace Composer\Package;
 
 use Composer\Package\Version\VersionParser;
+use Composer\Util\ComposerMirror;
 
 /**
  * Core package definitions that are needed to resolve dependencies and install packages
@@ -27,10 +28,12 @@ class Package extends BasePackage
     protected $sourceType;
     protected $sourceUrl;
     protected $sourceReference;
+    protected $sourceMirrors;
     protected $distType;
     protected $distUrl;
     protected $distReference;
     protected $distSha1Checksum;
+    protected $distMirrors;
     protected $version;
     protected $prettyVersion;
     protected $releaseDate;
@@ -47,6 +50,7 @@ class Package extends BasePackage
     protected $devRequires = array();
     protected $suggests = array();
     protected $autoload = array();
+    protected $devAutoload = array();
     protected $includePaths = array();
     protected $archiveExcludes = array();
 
@@ -217,6 +221,30 @@ class Package extends BasePackage
     }
 
     /**
+     * @param array|null $mirrors
+     */
+    public function setSourceMirrors($mirrors)
+    {
+        $this->sourceMirrors = $mirrors;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public function getSourceMirrors()
+    {
+        return $this->sourceMirrors;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public function getSourceUrls()
+    {
+        return $this->getUrls($this->sourceUrl, $this->sourceMirrors, $this->sourceReference, $this->sourceType, 'source');
+    }
+
+    /**
      * @param string $type
      */
     public function setDistType($type)
@@ -281,6 +309,30 @@ class Package extends BasePackage
     }
 
     /**
+     * @param array|null $mirrors
+     */
+    public function setDistMirrors($mirrors)
+    {
+        $this->distMirrors = $mirrors;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public function getDistMirrors()
+    {
+        return $this->distMirrors;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public function getDistUrls()
+    {
+        return $this->getUrls($this->distUrl, $this->distMirrors, $this->distReference, $this->distType, 'dist');
+    }
+
+    /**
      * {@inheritDoc}
      */
     public function getVersion()
@@ -441,6 +493,24 @@ class Package extends BasePackage
     }
 
     /**
+     * Set the dev autoload mapping
+     *
+     * @param array $devAutoload Mapping of dev autoloading rules
+     */
+    public function setDevAutoload(array $devAutoload)
+    {
+        $this->devAutoload = $devAutoload;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public function getDevAutoload()
+    {
+        return $this->devAutoload;
+    }
+
+    /**
      * Sets the list of paths added to PHP's include path.
      *
      * @param array $includePaths List of directories.
@@ -493,4 +563,45 @@ class Package extends BasePackage
     {
         return $this->archiveExcludes;
     }
+
+    /**
+     * Replaces current version and pretty version with passed values.
+     * It also sets stability.
+     *
+     * @param string $version       The package's normalized version
+     * @param string $prettyVersion The package's non-normalized version
+     */
+    public function replaceVersion($version, $prettyVersion)
+    {
+        $this->version = $version;
+        $this->prettyVersion = $prettyVersion;
+
+        $this->stability = VersionParser::parseStability($version);
+        $this->dev = $this->stability === 'dev';
+    }
+
+    protected function getUrls($url, $mirrors, $ref, $type, $urlType)
+    {
+        if (!$url) {
+            return array();
+        }
+        $urls = array($url);
+        if ($mirrors) {
+            foreach ($mirrors as $mirror) {
+                if ($urlType === 'dist') {
+                    $mirrorUrl = ComposerMirror::processUrl($mirror['url'], $this->name, $this->version, $ref, $type);
+                } elseif ($urlType === 'source' && $type === 'git') {
+                    $mirrorUrl = ComposerMirror::processGitUrl($mirror['url'], $this->name, $url, $type);
+                } elseif ($urlType === 'source' && $type === 'hg') {
+                    $mirrorUrl = ComposerMirror::processHgUrl($mirror['url'], $this->name, $url, $type);
+                }
+                if (!in_array($mirrorUrl, $urls)) {
+                    $func = $mirror['preferred'] ? 'array_unshift' : 'array_push';
+                    $func($urls, $mirrorUrl);
+                }
+            }
+        }
+
+        return $urls;
+    }
 }
diff --git a/vendor/composer/composer/src/Composer/Package/PackageInterface.php b/vendor/composer/composer/src/Composer/Package/PackageInterface.php
index a3c8a27..a51274d 100644
--- a/vendor/composer/composer/src/Composer/Package/PackageInterface.php
+++ b/vendor/composer/composer/src/Composer/Package/PackageInterface.php
@@ -116,6 +116,13 @@ interface PackageInterface
     public function getSourceUrl();
 
     /**
+     * Returns the repository urls of this package including mirrors, e.g. git://github.com/naderman/composer.git
+     *
+     * @return array
+     */
+    public function getSourceUrls();
+
+    /**
      * Returns the repository reference of this package, e.g. master, 1.0.0 or a commit hash for git
      *
      * @return string The repository reference
@@ -123,6 +130,13 @@ interface PackageInterface
     public function getSourceReference();
 
     /**
+     * Returns the source mirrors of this package
+     *
+     * @return array|null
+     */
+    public function getSourceMirrors();
+
+    /**
      * Returns the type of the distribution archive of this version, e.g. zip, tarball
      *
      * @return string The repository type
@@ -137,6 +151,13 @@ interface PackageInterface
     public function getDistUrl();
 
     /**
+     * Returns the urls of the distribution archive of this version, including mirrors
+     *
+     * @return array
+     */
+    public function getDistUrls();
+
+    /**
      * Returns the reference of the distribution archive of this version, e.g. master, 1.0.0 or a commit hash for git
      *
      * @return string
@@ -151,6 +172,13 @@ interface PackageInterface
     public function getDistSha1Checksum();
 
     /**
+     * Returns the dist mirrors of this package
+     *
+     * @return array|null
+     */
+    public function getDistMirrors();
+
+    /**
      * Returns the version of this package
      *
      * @return string version
@@ -231,14 +259,26 @@ interface PackageInterface
      *
      * {"<type>": {"<namespace": "<directory>"}}
      *
-     * Type is either "psr-0" or "pear". Namespaces are mapped to directories
-     * for autoloading using the type specified.
+     * Type is either "psr-4", "psr-0", "classmap" or "files". Namespaces are mapped to
+     * directories for autoloading using the type specified.
      *
      * @return array Mapping of autoloading rules
      */
     public function getAutoload();
 
     /**
+     * Returns an associative array of dev autoloading rules
+     *
+     * {"<type>": {"<namespace": "<directory>"}}
+     *
+     * Type is either "psr-4", "psr-0", "classmap" or "files". Namespaces are mapped to
+     * directories for autoloading using the type specified.
+     *
+     * @return array Mapping of dev autoloading rules
+     */
+    public function getDevAutoload();
+
+    /**
      * Returns a list of directories which should get added to PHP's
      * include path.
      *
@@ -301,4 +341,11 @@ interface PackageInterface
      * @return array
      */
     public function getArchiveExcludes();
+
+    /**
+     * Returns a list of options to download package dist files
+     *
+     * @return array
+     */
+    public function getTransportOptions();
 }
diff --git a/vendor/composer/composer/src/Composer/Package/Version/VersionParser.php b/vendor/composer/composer/src/Composer/Package/Version/VersionParser.php
index ee13b77..f14f096 100644
--- a/vendor/composer/composer/src/Composer/Package/Version/VersionParser.php
+++ b/vendor/composer/composer/src/Composer/Package/Version/VersionParser.php
@@ -89,7 +89,7 @@ class VersionParser
      * @param  string                    $version
      * @param  string                    $fullVersion optional complete version string to give more context
      * @throws \UnexpectedValueException
-     * @return array
+     * @return string
      */
     public function normalize($version, $fullVersion = null)
     {
@@ -122,6 +122,12 @@ class VersionParser
         } elseif (preg_match('{^v?(\d{4}(?:[.:-]?\d{2}){1,6}(?:[.:-]?\d{1,3})?)'.self::$modifierRegex.'$}i', $version, $matches)) { // match date-based versioning
             $version = preg_replace('{\D}', '-', $matches[1]);
             $index = 2;
+        } elseif (preg_match('{^v?(\d{4,})(\.\d+)?(\.\d+)?(\.\d+)?'.self::$modifierRegex.'$}i', $version, $matches)) {
+            $version = $matches[1]
+                .(!empty($matches[2]) ? $matches[2] : '.0')
+                .(!empty($matches[3]) ? $matches[3] : '.0')
+                .(!empty($matches[4]) ? $matches[4] : '.0');
+            $index = 5;
         }
 
         // add version modifiers if a version was matched
@@ -144,7 +150,8 @@ class VersionParser
         if (preg_match('{(.*?)[.-]?dev$}i', $version, $match)) {
             try {
                 return $this->normalizeBranch($match[1]);
-            } catch (\Exception $e) {}
+            } catch (\Exception $e) {
+            }
         }
 
         $extraMessage = '';
@@ -161,7 +168,7 @@ class VersionParser
      * Normalizes a branch name to be able to perform comparisons on it
      *
      * @param  string $name
-     * @return array
+     * @return string
      */
     public function normalizeBranch($name)
     {
@@ -359,7 +366,8 @@ class VersionParser
                 }
 
                 return array(new VersionConstraint($matches[1] ?: '=', $version));
-            } catch (\Exception $e) { }
+            } catch (\Exception $e) {
+            }
         }
 
         $message = 'Could not parse version constraint '.$constraint;
diff --git a/vendor/composer/composer/src/Composer/Package/Version/VersionSelector.php b/vendor/composer/composer/src/Composer/Package/Version/VersionSelector.php
new file mode 100644
index 0000000..202b118
--- /dev/null
+++ b/vendor/composer/composer/src/Composer/Package/Version/VersionSelector.php
@@ -0,0 +1,132 @@
+<?php
+
+/*
+ * This file is part of Composer.
+ *
+ * (c) Nils Adermann <naderman@naderman.de>
+ *     Jordi Boggiano <j.boggiano@seld.be>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Composer\Package\Version;
+
+use Composer\DependencyResolver\Pool;
+use Composer\Package\PackageInterface;
+use Composer\Package\Loader\ArrayLoader;
+use Composer\Package\Dumper\ArrayDumper;
+
+/**
+ * Selects the best possible version for a package
+ *
+ * @author Ryan Weaver <ryan@knpuniversity.com>
+ */
+class VersionSelector
+{
+    private $pool;
+
+    private $parser;
+
+    public function __construct(Pool $pool)
+    {
+        $this->pool = $pool;
+    }
+
+    /**
+     * Given a package name and optional version, returns the latest PackageInterface
+     * that matches.
+     *
+     * @param  string                $packageName
+     * @param  string                $targetPackageVersion
+     * @return PackageInterface|bool
+     */
+    public function findBestCandidate($packageName, $targetPackageVersion = null)
+    {
+        $constraint = $targetPackageVersion ? $this->getParser()->parseConstraints($targetPackageVersion) : null;
+        $candidates = $this->pool->whatProvides($packageName, $constraint, true);
+
+        if (!$candidates) {
+            return false;
+        }
+
+        // select highest version if we have many
+        $package = reset($candidates);
+        foreach ($candidates as $candidate) {
+            if (version_compare($package->getVersion(), $candidate->getVersion(), '<')) {
+                $package = $candidate;
+            }
+        }
+
+        return $package;
+    }
+
+    /**
+     * Given a concrete version, this returns a ~ constraint (when possible)
+     * that should be used, for example, in composer.json.
+     *
+     * For example:
+     *  * 1.2.1         -> ~1.2
+     *  * 1.2           -> ~1.2
+     *  * v3.2.1        -> ~3.2
+     *  * 2.0-beta.1    -> ~2.0@beta
+     *  * dev-master    -> ~2.1@dev      (dev version with alias)
+     *  * dev-master    -> dev-master    (dev versions are untouched)
+     *
+     * @param  PackageInterface $package
+     * @return string
+     */
+    public function findRecommendedRequireVersion(PackageInterface $package)
+    {
+        $version = $package->getVersion();
+        if (!$package->isDev()) {
+            return $this->transformVersion($version, $package->getPrettyVersion(), $package->getStability());
+        }
+
+        $loader = new ArrayLoader($this->getParser());
+        $dumper = new ArrayDumper();
+        $extra = $loader->getBranchAlias($dumper->dump($package));
+        if ($extra) {
+            $extra = preg_replace('{^(\d+\.\d+\.\d+)(\.9999999)-dev$}', '$1.0', $extra, -1, $count);
+            if ($count) {
+                $extra = str_replace('.9999999', '.0', $extra);
+
+                return $this->transformVersion($extra, $extra, 'dev');
+            }
+        }
+
+        return $package->getPrettyVersion();
+    }
+
+    private function transformVersion($version, $prettyVersion, $stability)
+    {
+        // attempt to transform 2.1.1 to 2.1
+        // this allows you to upgrade through minor versions
+        $semanticVersionParts = explode('.', $version);
+        // check to see if we have a semver-looking version
+        if (count($semanticVersionParts) == 4 && preg_match('{^0\D?}', $semanticVersionParts[3])) {
+            // remove the last parts (i.e. the patch version number and any extra)
+            unset($semanticVersionParts[2], $semanticVersionParts[3]);
+            $version = implode('.', $semanticVersionParts);
+        } else {
+            return $prettyVersion;
+        }
+
+        // append stability flag if not default
+        if ($stability != 'stable') {
+            $version .= '@'.$stability;
+        }
+
+        // 2.1 -> ~2.1
+        return '~'.$version;
+    }
+
+    private function getParser()
+    {
+        if ($this->parser === null) {
+            $this->parser = new VersionParser();
+        }
+
+        return $this->parser;
+    }
+}
diff --git a/vendor/composer/composer/src/Composer/Plugin/CommandEvent.php b/vendor/composer/composer/src/Composer/Plugin/CommandEvent.php
index 0f75bed..0697df9 100644
--- a/vendor/composer/composer/src/Composer/Plugin/CommandEvent.php
+++ b/vendor/composer/composer/src/Composer/Plugin/CommandEvent.php
@@ -45,10 +45,12 @@ class CommandEvent extends Event
      * @param string          $commandName The command name
      * @param InputInterface  $input
      * @param OutputInterface $output
+     * @param array           $args        Arguments passed by the user
+     * @param array           $flags       Optional flags to pass data not as argument
      */
-    public function __construct($name, $commandName, $input, $output)
+    public function __construct($name, $commandName, $input, $output, array $args = array(), array $flags = array())
     {
-        parent::__construct($name);
+        parent::__construct($name, $args, $flags);
         $this->commandName = $commandName;
         $this->input = $input;
         $this->output = $output;
diff --git a/vendor/composer/composer/src/Composer/Plugin/PluginManager.php b/vendor/composer/composer/src/Composer/Plugin/PluginManager.php
index d7c3ae0..fdd952a 100644
--- a/vendor/composer/composer/src/Composer/Plugin/PluginManager.php
+++ b/vendor/composer/composer/src/Composer/Plugin/PluginManager.php
@@ -37,6 +37,7 @@ class PluginManager
     protected $versionParser;
 
     protected $plugins = array();
+    protected $registeredPlugins = array();
 
     private static $classCounter = 0;
 
@@ -103,6 +104,8 @@ class PluginManager
      * call this method as early as possible.
      *
      * @param RepositoryInterface $repo Repository to scan for plugins to install
+     *
+     * @throws \RuntimeException
      */
     public function loadRepository(RepositoryInterface $repo)
     {
@@ -186,11 +189,17 @@ class PluginManager
      * instead for BC
      *
      * @param PackageInterface $package
+     *
+     * @throws \UnexpectedValueException
      */
     public function registerPackage(PackageInterface $package)
     {
         $oldInstallerPlugin = ($package->getType() === 'composer-installer');
 
+        if (in_array($package->getName(), $this->registeredPlugins)) {
+            return;
+        }
+
         $extra = $package->getExtra();
         if (empty($extra['class'])) {
             throw new \UnexpectedValueException('Error while installing '.$package->getPrettyName().', composer-plugin packages should have a class defined in their extra key to be usable.');
@@ -233,6 +242,7 @@ class PluginManager
             } else {
                 $plugin = new $class();
                 $this->addPlugin($plugin);
+                $this->registeredPlugins[] = $package->getName();
             }
         }
     }
diff --git a/vendor/composer/composer/src/Composer/Repository/ArrayRepository.php b/vendor/composer/composer/src/Composer/Repository/ArrayRepository.php
index 9b60b8d..f08f9cd 100644
--- a/vendor/composer/composer/src/Composer/Repository/ArrayRepository.php
+++ b/vendor/composer/composer/src/Composer/Repository/ArrayRepository.php
@@ -98,7 +98,7 @@ class ArrayRepository implements RepositoryInterface
             }
         }
 
-        return $matches;
+        return array_values($matches);
     }
 
     /**
diff --git a/vendor/composer/composer/src/Composer/Repository/ArtifactRepository.php b/vendor/composer/composer/src/Composer/Repository/ArtifactRepository.php
index 869e475..38936e4 100644
--- a/vendor/composer/composer/src/Composer/Repository/ArtifactRepository.php
+++ b/vendor/composer/composer/src/Composer/Repository/ArtifactRepository.php
@@ -74,6 +74,49 @@ class ArtifactRepository extends ArrayRepository
         }
     }
 
+    /**
+     * Find a file by name, returning the one that has the shortest path.
+     *
+     * @param  \ZipArchive $zip
+     * @param $filename
+     * @return bool|int
+     */
+    private function locateFile(\ZipArchive $zip, $filename)
+    {
+        $indexOfShortestMatch = false;
+        $lengthOfShortestMatch = -1;
+
+        for ($i = 0; $i < $zip->numFiles; $i++) {
+            $stat = $zip->statIndex($i);
+            if (strcmp(basename($stat['name']), $filename) === 0) {
+                $directoryName = dirname($stat['name']);
+                if ($directoryName == '.') {
+                    //if composer.json is in root directory
+                    //it has to be the one to use.
+                    return $i;
+                }
+
+                if (strpos($directoryName, '\\') !== false ||
+                   strpos($directoryName, '/') !== false) {
+                    //composer.json files below first directory are rejected
+                    continue;
+                }
+
+                $length = strlen($stat['name']);
+                if ($indexOfShortestMatch == false || $length < $lengthOfShortestMatch) {
+                    //Check it's not a directory.
+                    $contents = $zip->getFromIndex($i);
+                    if ($contents !== false) {
+                        $indexOfShortestMatch = $i;
+                        $lengthOfShortestMatch = $length;
+                    }
+                }
+            }
+        }
+
+        return $indexOfShortestMatch;
+    }
+
     private function getComposerInformation(\SplFileInfo $file)
     {
         $zip = new \ZipArchive();
@@ -83,7 +126,7 @@ class ArtifactRepository extends ArrayRepository
             return false;
         }
 
-        $foundFileIndex = $zip->locateName('composer.json', \ZipArchive::FL_NODIR);
+        $foundFileIndex = $this->locateFile($zip, 'composer.json');
         if (false === $foundFileIndex) {
             return false;
         }
@@ -96,8 +139,7 @@ class ArtifactRepository extends ArrayRepository
         $package = JsonFile::parseJson($json, $composerFile);
         $package['dist'] = array(
             'type' => 'zip',
-            'url' => $file->getRealPath(),
-            'reference' => $file->getBasename(),
+            'url' => $file->getPathname(),
             'shasum' => sha1_file($file->getRealPath())
         );
 
diff --git a/vendor/composer/composer/src/Composer/Repository/ComposerRepository.php b/vendor/composer/composer/src/Composer/Repository/ComposerRepository.php
index 1d686ca..459fa55 100644
--- a/vendor/composer/composer/src/Composer/Repository/ComposerRepository.php
+++ b/vendor/composer/composer/src/Composer/Repository/ComposerRepository.php
@@ -13,6 +13,7 @@
 namespace Composer\Repository;
 
 use Composer\Package\Loader\ArrayLoader;
+use Composer\Package\Package;
 use Composer\Package\PackageInterface;
 use Composer\Package\AliasPackage;
 use Composer\Package\Version\VersionParser;
@@ -29,7 +30,7 @@ use Composer\EventDispatcher\EventDispatcher;
 /**
  * @author Jordi Boggiano <j.boggiano@seld.be>
  */
-class ComposerRepository extends ArrayRepository implements StreamableRepositoryInterface
+class ComposerRepository extends ArrayRepository
 {
     protected $config;
     protected $options;
@@ -42,6 +43,7 @@ class ComposerRepository extends ArrayRepository implements StreamableRepository
     protected $searchUrl;
     protected $hasProviders = false;
     protected $providersUrl;
+    protected $lazyProvidersUrl;
     protected $providerListing;
     protected $providers = array();
     protected $providersByUid = array();
@@ -49,6 +51,8 @@ class ComposerRepository extends ArrayRepository implements StreamableRepository
     protected $rootAliases;
     protected $allowSslDowngrade = false;
     protected $eventDispatcher;
+    protected $sourceMirrors;
+    protected $distMirrors;
     private $rawData;
     private $minimalPackages;
     private $degradedMode = false;
@@ -85,7 +89,7 @@ class ComposerRepository extends ArrayRepository implements StreamableRepository
         $this->io = $io;
         $this->cache = new Cache($io, $config->get('cache-repo-dir').'/'.preg_replace('{[^a-z0-9.]}i', '-', $this->url), 'a-z0-9.$');
         $this->loader = new ArrayLoader();
-        $this->rfs = new RemoteFilesystem($this->io, $this->options);
+        $this->rfs = new RemoteFilesystem($this->io, $this->config, $this->options);
         $this->eventDispatcher = $eventDispatcher;
     }
 
@@ -94,56 +98,71 @@ class ComposerRepository extends ArrayRepository implements StreamableRepository
         $this->rootAliases = $rootAliases;
     }
 
-    public function getPackages()
+    /**
+     * {@inheritDoc}
+     */
+    public function findPackage($name, $version)
     {
-        if ($this->hasProviders()) {
-            throw new \LogicException('Composer repositories that have providers can not load the complete list of packages, use getProviderNames instead.');
+        if (!$this->hasProviders()) {
+            return parent::findPackage($name, $version);
+        }
+        // normalize version & name
+        $versionParser = new VersionParser();
+        $version = $versionParser->normalize($version);
+        $name = strtolower($name);
+
+        foreach ($this->getProviderNames() as $providerName) {
+            if ($name === $providerName) {
+                $packages = $this->whatProvides(new Pool('dev'), $providerName);
+                foreach ($packages as $package) {
+                    if ($name == $package->getName() && $version === $package->getVersion()) {
+                        return $package;
+                    }
+                }
+            }
         }
-
-        return parent::getPackages();
     }
 
     /**
      * {@inheritDoc}
      */
-    public function getMinimalPackages()
+    public function findPackages($name, $version = null)
     {
-        if (isset($this->minimalPackages)) {
-            return $this->minimalPackages;
+        if (!$this->hasProviders()) {
+            return parent::findPackages($name, $version);
         }
+        // normalize name
+        $name = strtolower($name);
 
-        if (null === $this->rawData) {
-            $this->rawData = $this->loadDataFromServer();
+        // normalize version
+        if (null !== $version) {
+            $versionParser = new VersionParser();
+            $version = $versionParser->normalize($version);
         }
 
-        $this->minimalPackages = array();
-        $versionParser = new VersionParser;
+        $packages = array();
 
-        foreach ($this->rawData as $package) {
-            $version = !empty($package['version_normalized']) ? $package['version_normalized'] : $versionParser->normalize($package['version']);
-            $data = array(
-                'name' => strtolower($package['name']),
-                'repo' => $this,
-                'version' => $version,
-                'raw' => $package,
-            );
-            if (!empty($package['replace'])) {
-                $data['replace'] = $package['replace'];
-            }
-            if (!empty($package['provide'])) {
-                $data['provide'] = $package['provide'];
+        foreach ($this->getProviderNames() as $providerName) {
+            if ($name === $providerName) {
+                $packages = $this->whatProvides(new Pool('dev'), $providerName);
+                foreach ($packages as $package) {
+                    if ($name == $package->getName() && (null === $version || $version === $package->getVersion())) {
+                        $packages[] = $package;
+                    }
+                }
             }
+        }
 
-            // add branch aliases
-            if ($aliasNormalized = $this->loader->getBranchAlias($package)) {
-                $data['alias'] = preg_replace('{(\.9{7})+}', '.x', $aliasNormalized);
-                $data['alias_normalized'] = $aliasNormalized;
-            }
+        return $packages;
+    }
 
-            $this->minimalPackages[] = $data;
+    public function getPackages()
+    {
+        if ($this->hasProviders()) {
+            throw new \LogicException('Composer repositories that have providers can not load the complete list of packages, use getProviderNames instead.');
         }
 
-        return $this->minimalPackages;
+        return parent::getPackages();
     }
 
     /**
@@ -156,7 +175,8 @@ class ComposerRepository extends ArrayRepository implements StreamableRepository
         if ($this->searchUrl && $mode === self::SEARCH_FULLTEXT) {
             $url = str_replace('%query%', $query, $this->searchUrl);
 
-            $json = $this->rfs->getContents($url, $url, false);
+            $hostname = parse_url($url, PHP_URL_HOST) ?: $url;
+            $json = $this->rfs->getContents($hostname, $url, false);
             $results = JsonFile::parseJson($json, $url);
 
             return $results['results'];
@@ -199,29 +219,15 @@ class ComposerRepository extends ArrayRepository implements StreamableRepository
         return $providers;
     }
 
-    /**
-     * {@inheritDoc}
-     */
-    public function loadPackage(array $data)
-    {
-        $package = $this->createPackage($data['raw'], 'Composer\Package\Package');
-        if ($package instanceof AliasPackage) {
-            $package = $package->getAliasOf();
-        }
-        $package->setRepository($this);
-
-        return $package;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public function loadAliasPackage(array $data, PackageInterface $aliasOf)
+    protected function configurePackageTransportOptions(PackageInterface $package)
     {
-        $aliasPackage = $this->createAliasPackage($aliasOf, $data['version'], $data['alias']);
-        $aliasPackage->setRepository($this);
+        foreach ($package->getDistUrls() as $url) {
+            if (strpos($url, $this->baseUrl) === 0) {
+                $package->setTransportOptions($this->options);
 
-        return $aliasPackage;
+                return;
+            }
+        }
     }
 
     public function hasProviders()
@@ -256,7 +262,11 @@ class ComposerRepository extends ArrayRepository implements StreamableRepository
             $this->loadProviderListings($this->loadRootServerFile());
         }
 
-        if ($this->providersUrl) {
+        if ($this->lazyProvidersUrl && !isset($this->providerListing[$name])) {
+            $hash = null;
+            $url = str_replace('%package%', $name, $this->lazyProvidersUrl);
+            $cacheKey = false;
+        } elseif ($this->providersUrl) {
             // package does not exist in this repo
             if (!isset($this->providerListing[$name])) {
                 return array();
@@ -277,7 +287,7 @@ class ComposerRepository extends ArrayRepository implements StreamableRepository
             $cacheKey = null;
         }
 
-        if ($this->cache->sha256($cacheKey) === $hash) {
+        if ($cacheKey && $this->cache->sha256($cacheKey) === $hash) {
             $packages = json_decode($this->cache->read($cacheKey), true);
         } else {
             $packages = $this->fetchFile($url, $cacheKey, $hash);
@@ -303,25 +313,6 @@ class ComposerRepository extends ArrayRepository implements StreamableRepository
                         }
                     }
                 } else {
-                    if (isset($version['provide']) || isset($version['replace'])) {
-                        // collect names
-                        $names = array(
-                            strtolower($version['name']) => true,
-                        );
-                        if (isset($version['provide'])) {
-                            foreach ($version['provide'] as $target => $constraint) {
-                                $names[strtolower($target)] = true;
-                            }
-                        }
-                        if (isset($version['replace'])) {
-                            foreach ($version['replace'] as $target => $constraint) {
-                                $names[strtolower($target)] = true;
-                            }
-                        }
-                        $names = array_keys($names);
-                    } else {
-                        $names = array(strtolower($version['name']));
-                    }
                     if (!$pool->isPackageAcceptable(strtolower($version['name']), VersionParser::parseStability($version['version']))) {
                         continue;
                     }
@@ -347,10 +338,10 @@ class ComposerRepository extends ArrayRepository implements StreamableRepository
                     // handle root package aliases
                     unset($rootAliasData);
 
-                    if (isset($this->rootAliases[$name][$package->getVersion()])) {
-                        $rootAliasData = $this->rootAliases[$name][$package->getVersion()];
-                    } elseif ($package instanceof AliasPackage && isset($this->rootAliases[$name][$package->getAliasOf()->getVersion()])) {
-                        $rootAliasData = $this->rootAliases[$name][$package->getAliasOf()->getVersion()];
+                    if (isset($this->rootAliases[$package->getName()][$package->getVersion()])) {
+                        $rootAliasData = $this->rootAliases[$package->getName()][$package->getVersion()];
+                    } elseif ($package instanceof AliasPackage && isset($this->rootAliases[$package->getName()][$package->getAliasOf()->getVersion()])) {
+                        $rootAliasData = $this->rootAliases[$package->getName()][$package->getAliasOf()->getVersion()];
                     }
 
                     if (isset($rootAliasData)) {
@@ -381,6 +372,17 @@ class ComposerRepository extends ArrayRepository implements StreamableRepository
         }
     }
 
+    /**
+     * Adds a new package to the repository
+     *
+     * @param PackageInterface $package
+     */
+    public function addPackage(PackageInterface $package)
+    {
+        parent::addPackage($package);
+        $this->configurePackageTransportOptions($package);
+    }
+
     protected function loadRootServerFile()
     {
         if (null !== $this->rootData) {
@@ -414,6 +416,29 @@ class ComposerRepository extends ArrayRepository implements StreamableRepository
             $this->searchUrl = $this->canonicalizeUrl($data['search']);
         }
 
+        if (!empty($data['mirrors'])) {
+            foreach ($data['mirrors'] as $mirror) {
+                if (!empty($mirror['git-url'])) {
+                    $this->sourceMirrors['git'][] = array('url' => $mirror['git-url'], 'preferred' => !empty($mirror['preferred']));
+                }
+                if (!empty($mirror['hg-url'])) {
+                    $this->sourceMirrors['hg'][] = array('url' => $mirror['hg-url'], 'preferred' => !empty($mirror['preferred']));
+                }
+                if (!empty($mirror['dist-url'])) {
+                    $this->distMirrors[] = array('url' => $mirror['dist-url'], 'preferred' => !empty($mirror['preferred']));
+                }
+            }
+        }
+
+        if (!empty($data['warning'])) {
+            $this->io->write('<warning>Warning from '.$this->url.': '.$data['warning'].'</warning>');
+        }
+
+        if (!empty($data['providers-lazy-url'])) {
+            $this->lazyProvidersUrl = $this->canonicalizeUrl($data['providers-lazy-url']);
+            $this->hasProviders = true;
+        }
+
         if ($this->allowSslDowngrade) {
             $this->url = str_replace('https://', 'http://', $this->url);
         }
@@ -527,7 +552,14 @@ class ComposerRepository extends ArrayRepository implements StreamableRepository
                 $data['notification-url'] = $this->notifyUrl;
             }
 
-            return $this->loader->load($data, 'Composer\Package\CompletePackage');
+            $package = $this->loader->load($data, 'Composer\Package\CompletePackage');
+            if (isset($this->sourceMirrors[$package->getSourceType()])) {
+                $package->setSourceMirrors($this->sourceMirrors[$package->getSourceType()]);
+            }
+            $package->setDistMirrors($this->distMirrors);
+            $this->configurePackageTransportOptions($package);
+
+            return $package;
         } catch (\Exception $e) {
             throw new \RuntimeException('Could not load package '.(isset($data['name']) ? $data['name'] : json_encode($data)).' in '.$this->url.': ['.get_class($e).'] '.$e->getMessage(), 0, $e);
         }
@@ -535,7 +567,7 @@ class ComposerRepository extends ArrayRepository implements StreamableRepository
 
     protected function fetchFile($filename, $cacheKey = null, $sha256 = null)
     {
-        if (!$cacheKey) {
+        if (null === $cacheKey) {
             $cacheKey = $filename;
             $filename = $this->baseUrl.'/'.$filename;
         }
@@ -547,7 +579,9 @@ class ComposerRepository extends ArrayRepository implements StreamableRepository
                 if ($this->eventDispatcher) {
                     $this->eventDispatcher->dispatch($preFileDownloadEvent->getName(), $preFileDownloadEvent);
                 }
-                $json = $preFileDownloadEvent->getRemoteFilesystem()->getContents($filename, $filename, false);
+
+                $hostname = parse_url($filename, PHP_URL_HOST) ?: $filename;
+                $json = $preFileDownloadEvent->getRemoteFilesystem()->getContents($hostname, $filename, false);
                 if ($sha256 && $sha256 !== hash('sha256', $json)) {
                     if ($retries) {
                         usleep(100000);
@@ -559,7 +593,9 @@ class ComposerRepository extends ArrayRepository implements StreamableRepository
                     throw new RepositorySecurityException('The contents of '.$filename.' do not match its signature. This should indicate a man-in-the-middle attack. Try running composer again and report this if you think it is a mistake.');
                 }
                 $data = JsonFile::parseJson($json, $filename);
-                $this->cache->write($cacheKey, $json);
+                if ($cacheKey) {
+                    $this->cache->write($cacheKey, $json);
+                }
 
                 break;
             } catch (\Exception $e) {
@@ -572,7 +608,7 @@ class ComposerRepository extends ArrayRepository implements StreamableRepository
                     throw $e;
                 }
 
-                if ($contents = $this->cache->read($cacheKey)) {
+                if ($cacheKey && ($contents = $this->cache->read($cacheKey))) {
                     if (!$this->degradedMode) {
                         $this->io->write('<warning>'.$e->getMessage().'</warning>');
                         $this->io->write('<warning>'.$this->url.' could not be fully loaded, package information was loaded from the local cache and may be out of date</warning>');
diff --git a/vendor/composer/composer/src/Composer/Repository/FilesystemRepository.php b/vendor/composer/composer/src/Composer/Repository/FilesystemRepository.php
index f6ea19a..0ffac9f 100644
--- a/vendor/composer/composer/src/Composer/Repository/FilesystemRepository.php
+++ b/vendor/composer/composer/src/Composer/Repository/FilesystemRepository.php
@@ -57,7 +57,7 @@ class FilesystemRepository extends WritableArrayRepository
             throw new InvalidRepositoryException('Invalid repository data in '.$this->file->getPath().', packages could not be loaded: ['.get_class($e).'] '.$e->getMessage());
         }
 
-        $loader = new ArrayLoader();
+        $loader = new ArrayLoader(null, true);
         foreach ($packages as $packageData) {
             $package = $loader->load($packageData);
             $this->addPackage($package);
diff --git a/vendor/composer/composer/src/Composer/Repository/Pear/PackageDependencyParser.php b/vendor/composer/composer/src/Composer/Repository/Pear/PackageDependencyParser.php
index 515993d..a124cd0 100644
--- a/vendor/composer/composer/src/Composer/Repository/Pear/PackageDependencyParser.php
+++ b/vendor/composer/composer/src/Composer/Repository/Pear/PackageDependencyParser.php
@@ -51,7 +51,7 @@ class PackageDependencyParser
      */
     private function buildDependency10Info($depArray)
     {
-        static $dep10toOperatorMap = array('has'=>'==', 'eq' => '==', 'ge' => '>=', 'gt' => '>', 'le' => '<=', 'lt' => '<', 'not' => '!=');
+        static $dep10toOperatorMap = array('has' => '==', 'eq' => '==', 'ge' => '>=', 'gt' => '>', 'le' => '<=', 'lt' => '<', 'not' => '!=');
 
         $result = array();
 
@@ -255,7 +255,7 @@ class PackageDependencyParser
      */
     private function parse20VersionConstraint(array $data)
     {
-        static $dep20toOperatorMap = array('has'=>'==', 'min' => '>=', 'max' => '<=', 'exclude' => '!=');
+        static $dep20toOperatorMap = array('has' => '==', 'min' => '>=', 'max' => '<=', 'exclude' => '!=');
 
         $versions = array();
         $values = array_intersect_key($data, $dep20toOperatorMap);
diff --git a/vendor/composer/composer/src/Composer/Repository/PearRepository.php b/vendor/composer/composer/src/Composer/Repository/PearRepository.php
index a106385..5006c49 100644
--- a/vendor/composer/composer/src/Composer/Repository/PearRepository.php
+++ b/vendor/composer/composer/src/Composer/Repository/PearRepository.php
@@ -57,7 +57,7 @@ class PearRepository extends ArrayRepository
 
         $this->url = rtrim($repoConfig['url'], '/');
         $this->io = $io;
-        $this->rfs = $rfs ?: new RemoteFilesystem($this->io);
+        $this->rfs = $rfs ?: new RemoteFilesystem($this->io, $config);
         $this->vendorAlias = isset($repoConfig['vendor-alias']) ? $repoConfig['vendor-alias'] : null;
         $this->versionParser = new VersionParser();
     }
diff --git a/vendor/composer/composer/src/Composer/Repository/PlatformRepository.php b/vendor/composer/composer/src/Composer/Repository/PlatformRepository.php
index 2b462fc..636cba1 100644
--- a/vendor/composer/composer/src/Composer/Repository/PlatformRepository.php
+++ b/vendor/composer/composer/src/Composer/Repository/PlatformRepository.php
@@ -21,7 +21,7 @@ use Composer\Plugin\PluginInterface;
  */
 class PlatformRepository extends ArrayRepository
 {
-    const PLATFORM_PACKAGE_REGEX = '{^(?:php(?:-64bit)?|(?:ext|lib)-[^/]+)$}i';
+    const PLATFORM_PACKAGE_REGEX = '{^(?:php(?:-64bit)?|hhvm|(?:ext|lib)-[^/]+)$}i';
 
     protected function initialize()
     {
@@ -146,12 +146,12 @@ class PlatformRepository extends ArrayRepository
             parent::addPackage($lib);
         }
 
-        if (defined('HPHP_VERSION')) {
+        if (defined('HHVM_VERSION')) {
             try {
-                $prettyVersion = HPHP_VERSION;
+                $prettyVersion = HHVM_VERSION;
                 $version = $versionParser->normalize($prettyVersion);
             } catch (\UnexpectedValueException $e) {
-                $prettyVersion = preg_replace('#^([^~+-]+).*$#', '$1', HPHP_VERSION);
+                $prettyVersion = preg_replace('#^([^~+-]+).*$#', '$1', HHVM_VERSION);
                 $version = $versionParser->normalize($prettyVersion);
             }
 
@@ -161,7 +161,6 @@ class PlatformRepository extends ArrayRepository
         }
     }
 
-
     private function buildPackageName($name)
     {
         return 'ext-' . str_replace(' ', '-', $name);
diff --git a/vendor/composer/composer/src/Composer/Repository/RepositoryManager.php b/vendor/composer/composer/src/Composer/Repository/RepositoryManager.php
index 1a9054f..83352cf 100644
--- a/vendor/composer/composer/src/Composer/Repository/RepositoryManager.php
+++ b/vendor/composer/composer/src/Composer/Repository/RepositoryManager.php
@@ -89,7 +89,7 @@ class RepositoryManager
      * Returns a new repository for a specific installation type.
      *
      * @param  string                    $type   repository type
-     * @param  string                    $config repository configuration
+     * @param  array                     $config repository configuration
      * @return RepositoryInterface
      * @throws \InvalidArgumentException if repository for provided type is not registered
      */
diff --git a/vendor/composer/composer/src/Composer/Repository/StreamableRepositoryInterface.php b/vendor/composer/composer/src/Composer/Repository/StreamableRepositoryInterface.php
deleted file mode 100644
index f5c6946..0000000
--- a/vendor/composer/composer/src/Composer/Repository/StreamableRepositoryInterface.php
+++ /dev/null
@@ -1,61 +0,0 @@
-<?php
-
-/*
- * This file is part of Composer.
- *
- * (c) Nils Adermann <naderman@naderman.de>
- *     Jordi Boggiano <j.boggiano@seld.be>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Composer\Repository;
-
-use Composer\Package\AliasPackage;
-use Composer\Package\PackageInterface;
-
-/**
- * @author Jordi Boggiano <j.boggiano@seld.be>
- */
-interface StreamableRepositoryInterface extends RepositoryInterface
-{
-    /**
-     * Return partial package data without loading them all to save on memory
-     *
-     * The function must return an array of package arrays.
-     *
-     * The package array must contain the following fields:
-     *  - name: package name (normalized/lowercased)
-     *  - repo: reference to the repository instance
-     *  - version: normalized version
-     *  - replace: array of package name => version constraint, optional
-     *  - provide: array of package name => version constraint, optional
-     *  - alias: pretty alias that this package should be aliased to, optional
-     *  - alias_normalized: normalized alias that this package should be aliased to, optional
-     *
-     * Any additional information can be returned and will be sent back
-     * into loadPackage/loadAliasPackage for completing the package loading
-     * when it's needed.
-     *
-     * @return array
-     */
-    public function getMinimalPackages();
-
-    /**
-     * Loads a package from minimal info of the package
-     *
-     * @param  array            $data the minimal info as was returned by getMinimalPackage
-     * @return PackageInterface
-     */
-    public function loadPackage(array $data);
-
-    /**
-     * Loads an alias package from minimal info of the package
-     *
-     * @param  array            $data    the minimal info as was returned by getMinimalPackage
-     * @param  PackageInterface $aliasOf the package which this alias is an alias of
-     * @return AliasPackage
-     */
-    public function loadAliasPackage(array $data, PackageInterface $aliasOf);
-}
diff --git a/vendor/composer/composer/src/Composer/Repository/Vcs/GitBitbucketDriver.php b/vendor/composer/composer/src/Composer/Repository/Vcs/GitBitbucketDriver.php
index 12eba6d..88a6d54 100644
--- a/vendor/composer/composer/src/Composer/Repository/Vcs/GitBitbucketDriver.php
+++ b/vendor/composer/composer/src/Composer/Repository/Vcs/GitBitbucketDriver.php
@@ -93,7 +93,7 @@ class GitBitbucketDriver extends VcsDriver implements VcsDriverInterface
 
             $composer = JsonFile::parseJson($composer, $resource);
 
-            if (!isset($composer['time'])) {
+            if (empty($composer['time'])) {
                 $resource = $this->getScheme() . '://api.bitbucket.org/1.0/repositories/'.$this->owner.'/'.$this->repository.'/changesets/'.$identifier;
                 $changeset = JsonFile::parseJson($this->getContents($resource), $resource);
                 $composer['time'] = $changeset['timestamp'];
diff --git a/vendor/composer/composer/src/Composer/Repository/Vcs/GitDriver.php b/vendor/composer/composer/src/Composer/Repository/Vcs/GitDriver.php
index ecfad77..50e191c 100644
--- a/vendor/composer/composer/src/Composer/Repository/Vcs/GitDriver.php
+++ b/vendor/composer/composer/src/Composer/Repository/Vcs/GitDriver.php
@@ -37,13 +37,13 @@ class GitDriver extends VcsDriver
      */
     public function initialize()
     {
-        if (static::isLocalUrl($this->url)) {
-            $this->repoDir = str_replace('file://', '', $this->url);
+        if (Filesystem::isLocalPath($this->url)) {
+            $this->repoDir = $this->url;
+            $cacheUrl = realpath($this->url);
         } else {
             $this->repoDir = $this->config->get('cache-vcs-dir') . '/' . preg_replace('{[^a-z0-9.]}i', '-', $this->url) . '/';
 
-            $util = new GitUtil;
-            $util->cleanEnv();
+            GitUtil::cleanEnv();
 
             $fs = new Filesystem();
             $fs->ensureDirectoryExists(dirname($this->repoDir));
@@ -56,32 +56,37 @@ class GitDriver extends VcsDriver
                 throw new \InvalidArgumentException('The source URL '.$this->url.' is invalid, ssh URLs should have a port number after ":".'."\n".'Use ssh://git@example.com:22/path or just git@example.com:path if you do not want to provide a password or custom port.');
             }
 
+            $gitUtil = new GitUtil($this->io, $this->config, $this->process, $fs);
+
             // update the repo if it is a valid git repository
-            if (is_dir($this->repoDir) && 0 === $this->process->execute('git remote', $output, $this->repoDir)) {
-                if (0 !== $this->process->execute('git remote update --prune origin', $output, $this->repoDir)) {
-                    $this->io->write('<error>Failed to update '.$this->url.', package information from this repository may be outdated ('.$this->process->getErrorOutput().')</error>');
+            if (is_dir($this->repoDir) && 0 === $this->process->execute('git rev-parse --git-dir', $output, $this->repoDir) && trim($output) === '.') {
+                try {
+                    $commandCallable = function ($url) {
+                        return sprintf('git remote set-url origin %s && git remote update --prune origin', ProcessExecutor::escape($url));
+                    };
+                    $gitUtil->runCommand($commandCallable, $this->url, $this->repoDir);
+                } catch (\Exception $e) {
+                    $this->io->write('<error>Failed to update '.$this->url.', package information from this repository may be outdated ('.$e->getMessage().')</error>');
                 }
             } else {
                 // clean up directory and do a fresh clone into it
                 $fs->removeDirectory($this->repoDir);
 
-                $command = sprintf('git clone --mirror %s %s', escapeshellarg($this->url), escapeshellarg($this->repoDir));
-                if (0 !== $this->process->execute($command, $output)) {
-                    $output = $this->process->getErrorOutput();
-
-                    if (0 !== $this->process->execute('git --version', $ignoredOutput)) {
-                        throw new \RuntimeException('Failed to clone '.$this->url.', git was not found, check that it is installed and in your PATH env.' . "\n\n" . $this->process->getErrorOutput());
-                    }
+                $repoDir = $this->repoDir;
+                $commandCallable = function ($url) use ($repoDir) {
+                    return sprintf('git clone --mirror %s %s', ProcessExecutor::escape($url), ProcessExecutor::escape($repoDir));
+                };
 
-                    throw new \RuntimeException('Failed to clone '.$this->url.', could not read packages from it' . "\n\n" .$output);
-                }
+                $gitUtil->runCommand($commandCallable, $this->url, $this->repoDir, true);
             }
+
+            $cacheUrl = $this->url;
         }
 
         $this->getTags();
         $this->getBranches();
 
-        $this->cache = new Cache($this->io, $this->config->get('cache-repo-dir').'/'.preg_replace('{[^a-z0-9.]}i', '-', $this->url));
+        $this->cache = new Cache($this->io, $this->config->get('cache-repo-dir').'/'.preg_replace('{[^a-z0-9.]}i', '-', $cacheUrl));
     }
 
     /**
@@ -142,7 +147,7 @@ class GitDriver extends VcsDriver
         }
 
         if (!isset($this->infoCache[$identifier])) {
-            $resource = sprintf('%s:composer.json', escapeshellarg($identifier));
+            $resource = sprintf('%s:composer.json', ProcessExecutor::escape($identifier));
             $this->process->execute(sprintf('git show %s', $resource), $composer, $this->repoDir);
 
             if (!trim($composer)) {
@@ -151,8 +156,8 @@ class GitDriver extends VcsDriver
 
             $composer = JsonFile::parseJson($composer, $resource);
 
-            if (!isset($composer['time'])) {
-                $this->process->execute(sprintf('git log -1 --format=%%at %s', escapeshellarg($identifier)), $output, $this->repoDir);
+            if (empty($composer['time'])) {
+                $this->process->execute(sprintf('git log -1 --format=%%at %s', ProcessExecutor::escape($identifier)), $output, $this->repoDir);
                 $date = new \DateTime('@'.trim($output), new \DateTimeZone('UTC'));
                 $composer['time'] = $date->format('Y-m-d H:i:s');
             }
@@ -198,7 +203,7 @@ class GitDriver extends VcsDriver
             foreach ($this->process->splitLines($output) as $branch) {
                 if ($branch && !preg_match('{^ *[^/]+/HEAD }', $branch)) {
                     if (preg_match('{^(?:\* )? *(\S+) *([a-f0-9]+) .*$}', $branch, $match)) {
-                       $branches[$match[1]] = $match[2];
+                        $branches[$match[1]] = $match[2];
                     }
                 }
             }
@@ -219,13 +224,13 @@ class GitDriver extends VcsDriver
         }
 
         // local filesystem
-        if (static::isLocalUrl($url)) {
+        if (Filesystem::isLocalPath($url)) {
+            $url = Filesystem::getPlatformPath($url);
             if (!is_dir($url)) {
                 throw new \RuntimeException('Directory does not exist: '.$url);
             }
 
-            $process = new ProcessExecutor();
-            $url = str_replace('file://', '', $url);
+            $process = new ProcessExecutor($io);
             // check whether there is a git repo in that path
             if ($process->execute('git tag', $output, $url) === 0) {
                 return true;
diff --git a/vendor/composer/composer/src/Composer/Repository/Vcs/GitHubDriver.php b/vendor/composer/composer/src/Composer/Repository/Vcs/GitHubDriver.php
index 3cf2bef..9dbd210 100644
--- a/vendor/composer/composer/src/Composer/Repository/Vcs/GitHubDriver.php
+++ b/vendor/composer/composer/src/Composer/Repository/Vcs/GitHubDriver.php
@@ -46,15 +46,26 @@ class GitHubDriver extends VcsDriver
      */
     public function initialize()
     {
-        preg_match('#^(?:(?:https?|git)://([^/]+)/|git@([^:]+):)([^/]+)/(.+?)(?:\.git)?$#', $this->url, $match);
+        preg_match('#^(?:(?:https?|git)://([^/]+)/|git@([^:]+):)([^/]+)/(.+?)(?:\.git|/)?$#', $this->url, $match);
         $this->owner = $match[3];
         $this->repository = $match[4];
         $this->originUrl = !empty($match[1]) ? $match[1] : $match[2];
         $this->cache = new Cache($this->io, $this->config->get('cache-repo-dir').'/'.$this->originUrl.'/'.$this->owner.'/'.$this->repository);
 
+        if (isset($this->repoConfig['no-api']) && $this->repoConfig['no-api']) {
+            $this->setupGitDriver($this->url);
+
+            return;
+        }
+
         $this->fetchRootIdentifier();
     }
 
+    public function getRepositoryUrl()
+    {
+        return 'https://'.$this->originUrl.'/'.$this->owner.'/'.$this->repository;
+    }
+
     /**
      * {@inheritDoc}
      */
@@ -117,10 +128,6 @@ class GitHubDriver extends VcsDriver
      */
     public function getDist($identifier)
     {
-        if ($this->gitDriver) {
-            return $this->gitDriver->getDist($identifier);
-        }
-
         $url = $this->getApiUrl() . '/repos/'.$this->owner.'/'.$this->repository.'/zipball/'.$identifier;
 
         return array('type' => 'zip', 'url' => $url, 'reference' => $identifier, 'shasum' => '');
@@ -164,7 +171,7 @@ class GitHubDriver extends VcsDriver
             if ($composer) {
                 $composer = JsonFile::parseJson($composer, $resource);
 
-                if (!isset($composer['time'])) {
+                if (empty($composer['time'])) {
                     $resource = $this->getApiUrl() . '/repos/'.$this->owner.'/'.$this->repository.'/commits/'.urlencode($identifier);
                     $commit = JsonFile::parseJson($this->getContents($resource), $resource);
                     $composer['time'] = $commit['commit']['committer']['date'];
@@ -197,12 +204,17 @@ class GitHubDriver extends VcsDriver
             return $this->gitDriver->getTags();
         }
         if (null === $this->tags) {
-            $resource = $this->getApiUrl() . '/repos/'.$this->owner.'/'.$this->repository.'/tags';
-            $tagsData = JsonFile::parseJson($this->getContents($resource), $resource);
             $this->tags = array();
-            foreach ($tagsData as $tag) {
-                $this->tags[$tag['name']] = $tag['commit']['sha'];
-            }
+            $resource = $this->getApiUrl() . '/repos/'.$this->owner.'/'.$this->repository.'/tags?per_page=100';
+
+            do {
+                $tagsData = JsonFile::parseJson($this->getContents($resource), $resource);
+                foreach ($tagsData as $tag) {
+                    $this->tags[$tag['name']] = $tag['commit']['sha'];
+                }
+
+                $resource = $this->getNextPage();
+            } while ($resource);
         }
 
         return $this->tags;
@@ -217,13 +229,22 @@ class GitHubDriver extends VcsDriver
             return $this->gitDriver->getBranches();
         }
         if (null === $this->branches) {
-            $resource = $this->getApiUrl() . '/repos/'.$this->owner.'/'.$this->repository.'/git/refs/heads';
-            $branchData = JsonFile::parseJson($this->getContents($resource), $resource);
             $this->branches = array();
-            foreach ($branchData as $branch) {
-                $name = substr($branch['ref'], 11);
-                $this->branches[$name] = $branch['object']['sha'];
-            }
+            $resource = $this->getApiUrl() . '/repos/'.$this->owner.'/'.$this->repository.'/git/refs/heads?per_page=100';
+
+            $branchBlacklist = array('gh-pages');
+
+            do {
+                $branchData = JsonFile::parseJson($this->getContents($resource), $resource);
+                foreach ($branchData as $branch) {
+                    $name = substr($branch['ref'], 11);
+                    if (!in_array($name, $branchBlacklist)) {
+                        $this->branches[$name] = $branch['object']['sha'];
+                    }
+                }
+
+                $resource = $this->getNextPage();
+            } while ($resource);
         }
 
         return $this->branches;
@@ -234,7 +255,7 @@ class GitHubDriver extends VcsDriver
      */
     public static function supports(IOInterface $io, Config $config, $url, $deep = false)
     {
-        if (!preg_match('#^((?:https?|git)://([^/]+)/|git@([^:]+):)([^/]+)/(.+?)(?:\.git)?$#', $url, $matches)) {
+        if (!preg_match('#^((?:https?|git)://([^/]+)/|git@([^:]+):)([^/]+)/(.+?)(?:\.git|/)?$#', $url, $matches)) {
             return false;
         }
 
@@ -385,6 +406,9 @@ class GitHubDriver extends VcsDriver
             return;
         }
 
+        $this->owner = $repoData['owner']['login'];
+        $this->repository = $repoData['name'];
+
         $this->isPrivate = !empty($repoData['private']);
         if (isset($repoData['default_branch'])) {
             $this->rootIdentifier = $repoData['default_branch'];
@@ -405,14 +429,7 @@ class GitHubDriver extends VcsDriver
             // GitHub returns 404 for private repositories) and we
             // cannot ask for authentication credentials (because we
             // are not interactive) then we fallback to GitDriver.
-            $this->gitDriver = new GitDriver(
-                array('url' => $this->generateSshUrl()),
-                $this->io,
-                $this->config,
-                $this->process,
-                $this->remoteFilesystem
-            );
-            $this->gitDriver->initialize();
+            $this->setupGitDriver($this->generateSshUrl());
 
             return;
         } catch (\RuntimeException $e) {
@@ -422,4 +439,31 @@ class GitHubDriver extends VcsDriver
             throw $e;
         }
     }
+
+    protected function setupGitDriver($url)
+    {
+        $this->gitDriver = new GitDriver(
+            array('url' => $url),
+            $this->io,
+            $this->config,
+            $this->process,
+            $this->remoteFilesystem
+        );
+        $this->gitDriver->initialize();
+    }
+
+    protected function getNextPage()
+    {
+        $headers = $this->remoteFilesystem->getLastHeaders();
+        foreach ($headers as $header) {
+            if (substr($header, 0, 5) === 'Link:') {
+                $links = explode(',', substr($header, 5));
+                foreach ($links as $link) {
+                    if (preg_match('{<(.+?)>; *rel="next"}', $link, $match)) {
+                        return $match[1];
+                    }
+                }
+            }
+        }
+    }
 }
diff --git a/vendor/composer/composer/src/Composer/Repository/Vcs/HgBitbucketDriver.php b/vendor/composer/composer/src/Composer/Repository/Vcs/HgBitbucketDriver.php
index c6eac73..5e6f712 100644
--- a/vendor/composer/composer/src/Composer/Repository/Vcs/HgBitbucketDriver.php
+++ b/vendor/composer/composer/src/Composer/Repository/Vcs/HgBitbucketDriver.php
@@ -102,7 +102,7 @@ class HgBitbucketDriver extends VcsDriver
 
             $composer = JsonFile::parseJson($repoData['data'], $resource);
 
-            if (!isset($composer['time'])) {
+            if (empty($composer['time'])) {
                 $resource = $this->getScheme() . '://bitbucket.org/api/1.0/repositories/'.$this->owner.'/'.$this->repository.'/changesets/'.$identifier;
                 $changeset = JsonFile::parseJson($this->getContents($resource), $resource);
                 $composer['time'] = $changeset['timestamp'];
diff --git a/vendor/composer/composer/src/Composer/Repository/Vcs/HgDriver.php b/vendor/composer/composer/src/Composer/Repository/Vcs/HgDriver.php
index 060a77e..470651a 100644
--- a/vendor/composer/composer/src/Composer/Repository/Vcs/HgDriver.php
+++ b/vendor/composer/composer/src/Composer/Repository/Vcs/HgDriver.php
@@ -34,8 +34,8 @@ class HgDriver extends VcsDriver
      */
     public function initialize()
     {
-        if (static::isLocalUrl($this->url)) {
-            $this->repoDir = str_replace('file://', '', $this->url);
+        if (Filesystem::isLocalPath($this->url)) {
+            $this->repoDir = $this->url;
         } else {
             $cacheDir = $this->config->get('cache-vcs-dir');
             $this->repoDir = $cacheDir . '/' . preg_replace('{[^a-z0-9]}i', '-', $this->url) . '/';
@@ -56,7 +56,7 @@ class HgDriver extends VcsDriver
                 // clean up directory and do a fresh clone into it
                 $fs->removeDirectory($this->repoDir);
 
-                if (0 !== $this->process->execute(sprintf('hg clone --noupdate %s %s', escapeshellarg($this->url), escapeshellarg($this->repoDir)), $output, $cacheDir)) {
+                if (0 !== $this->process->execute(sprintf('hg clone --noupdate %s %s', ProcessExecutor::escape($this->url), ProcessExecutor::escape($this->repoDir)), $output, $cacheDir)) {
                     $output = $this->process->getErrorOutput();
 
                     if (0 !== $this->process->execute('hg --version', $ignoredOutput)) {
@@ -116,7 +116,7 @@ class HgDriver extends VcsDriver
     public function getComposerInformation($identifier)
     {
         if (!isset($this->infoCache[$identifier])) {
-            $this->process->execute(sprintf('hg cat -r %s composer.json', escapeshellarg($identifier)), $composer, $this->repoDir);
+            $this->process->execute(sprintf('hg cat -r %s composer.json', ProcessExecutor::escape($identifier)), $composer, $this->repoDir);
 
             if (!trim($composer)) {
                 return;
@@ -124,8 +124,8 @@ class HgDriver extends VcsDriver
 
             $composer = JsonFile::parseJson($composer, $identifier);
 
-            if (!isset($composer['time'])) {
-                $this->process->execute(sprintf('hg log --template "{date|rfc3339date}" -r %s', escapeshellarg($identifier)), $output, $this->repoDir);
+            if (empty($composer['time'])) {
+                $this->process->execute(sprintf('hg log --template "{date|rfc3339date}" -r %s', ProcessExecutor::escape($identifier)), $output, $this->repoDir);
                 $date = new \DateTime(trim($output), new \DateTimeZone('UTC'));
                 $composer['time'] = $date->format('Y-m-d H:i:s');
             }
@@ -197,13 +197,13 @@ class HgDriver extends VcsDriver
         }
 
         // local filesystem
-        if (static::isLocalUrl($url)) {
+        if (Filesystem::isLocalPath($url)) {
+            $url = Filesystem::getPlatformPath($url);
             if (!is_dir($url)) {
                 throw new \RuntimeException('Directory does not exist: '.$url);
             }
 
             $process = new ProcessExecutor();
-            $url = str_replace('file://', '', $url);
             // check whether there is a hg repo in that path
             if ($process->execute('hg summary', $output, $url) === 0) {
                 return true;
@@ -215,7 +215,7 @@ class HgDriver extends VcsDriver
         }
 
         $processExecutor = new ProcessExecutor();
-        $exit = $processExecutor->execute(sprintf('hg identify %s', escapeshellarg($url)), $ignored);
+        $exit = $processExecutor->execute(sprintf('hg identify %s', ProcessExecutor::escape($url)), $ignored);
 
         return $exit === 0;
     }
diff --git a/vendor/composer/composer/src/Composer/Repository/Vcs/PerforceDriver.php b/vendor/composer/composer/src/Composer/Repository/Vcs/PerforceDriver.php
index 79500f1..c7c225b 100644
--- a/vendor/composer/composer/src/Composer/Repository/Vcs/PerforceDriver.php
+++ b/vendor/composer/composer/src/Composer/Repository/Vcs/PerforceDriver.php
@@ -35,7 +35,7 @@ class PerforceDriver extends VcsDriver
     {
         $this->depot = $this->repoConfig['depot'];
         $this->branch = '';
-        if (isset($this->repoConfig['branch'])) {
+        if (!empty($this->repoConfig['branch'])) {
             $this->branch = $this->repoConfig['branch'];
         }
 
@@ -51,12 +51,12 @@ class PerforceDriver extends VcsDriver
 
     private function initPerforce($repoConfig)
     {
-        if (isset($this->perforce)) {
+        if (!empty($this->perforce)) {
             return;
         }
 
         $repoDir = $this->config->get('cache-vcs-dir') . '/' . $this->depot;
-        $this->perforce = Perforce::create($repoConfig, $this->getUrl(), $repoDir, $this->process);
+        $this->perforce = Perforce::create($repoConfig, $this->getUrl(), $repoDir, $this->process, $this->io);
     }
 
     /**
@@ -64,7 +64,7 @@ class PerforceDriver extends VcsDriver
      */
     public function getComposerInformation($identifier)
     {
-        if (isset($this->composerInfoIdentifier)) {
+        if (!empty($this->composerInfoIdentifier)) {
             if (strcmp($identifier, $this->composerInfoIdentifier) === 0) {
                 return $this->composerInfo;
             }
@@ -140,12 +140,8 @@ class PerforceDriver extends VcsDriver
     {
         $this->composerInfo = $this->perforce->getComposerInformation('//' . $this->depot . '/' . $identifier);
         $this->composerInfoIdentifier = $identifier;
-        $result = false;
-        if (isset($this->composerInfo)) {
-            $result = count($this->composerInfo) > 0;
-        }
 
-        return $result;
+        return !empty($this->composerInfo);
     }
 
     /**
@@ -186,9 +182,4 @@ class PerforceDriver extends VcsDriver
     {
         return $this->branch;
     }
-
-    public function setPerforce(Perforce $perforce)
-    {
-        $this->perforce = $perforce;
-    }
 }
diff --git a/vendor/composer/composer/src/Composer/Repository/Vcs/SvnDriver.php b/vendor/composer/composer/src/Composer/Repository/Vcs/SvnDriver.php
index d69230c..c602dda 100644
--- a/vendor/composer/composer/src/Composer/Repository/Vcs/SvnDriver.php
+++ b/vendor/composer/composer/src/Composer/Repository/Vcs/SvnDriver.php
@@ -27,6 +27,9 @@ use Composer\Downloader\TransportException;
  */
 class SvnDriver extends VcsDriver
 {
+    /**
+     * @var Cache
+     */
     protected $cache;
     protected $baseUrl;
     protected $tags;
@@ -38,6 +41,7 @@ class SvnDriver extends VcsDriver
     protected $branchesPath = 'branches';
     protected $tagsPath     = 'tags';
     protected $packagePath   = '';
+    protected $cacheCredentials = true;
 
     /**
      * @var \Composer\Util\Svn
@@ -51,6 +55,8 @@ class SvnDriver extends VcsDriver
     {
         $this->url = $this->baseUrl = rtrim(self::normalizeUrl($this->url), '/');
 
+        SvnUtil::cleanEnv();
+
         if (isset($this->repoConfig['trunk-path'])) {
             $this->trunkPath = $this->repoConfig['trunk-path'];
         }
@@ -60,6 +66,9 @@ class SvnDriver extends VcsDriver
         if (isset($this->repoConfig['tags-path'])) {
             $this->tagsPath = $this->repoConfig['tags-path'];
         }
+        if (array_key_exists('svn-cache-credentials', $this->repoConfig)) {
+            $this->cacheCredentials = (bool) $this->repoConfig['svn-cache-credentials'];
+        }
         if (isset($this->repoConfig['package-path'])) {
             $this->packagePath = '/' . trim($this->repoConfig['package-path'], '/');
         }
@@ -139,7 +148,7 @@ class SvnDriver extends VcsDriver
 
             $composer = JsonFile::parseJson($output, $this->baseUrl . $resource . $rev);
 
-            if (!isset($composer['time'])) {
+            if (empty($composer['time'])) {
                 $output = $this->execute('svn info', $this->baseUrl . $path . $rev);
                 foreach ($this->process->splitLines($output) as $line) {
                     if ($line && preg_match('{^Last Changed Date: ([^(]+)}', $line, $match)) {
@@ -194,10 +203,10 @@ class SvnDriver extends VcsDriver
         if (null === $this->branches) {
             $this->branches = array();
 
-            if (false === strpos($this->trunkPath, '/')) {
+            if (false === $this->trunkPath) {
                 $trunkParent = $this->baseUrl . '/';
             } else {
-                $trunkParent = $this->baseUrl . '/' . dirname($this->trunkPath) . '/';
+                $trunkParent = $this->baseUrl . '/' . $this->trunkPath;
             }
 
             $output = $this->execute('svn ls --verbose', $trunkParent);
@@ -205,12 +214,12 @@ class SvnDriver extends VcsDriver
                 foreach ($this->process->splitLines($output) as $line) {
                     $line = trim($line);
                     if ($line && preg_match('{^\s*(\S+).*?(\S+)\s*$}', $line, $match)) {
-                        if (isset($match[1]) && isset($match[2]) && $match[2] === $this->trunkPath . '/') {
-                            $this->branches[$this->trunkPath] = $this->buildIdentifier(
+                        if (isset($match[1]) && isset($match[2]) && $match[2] === './') {
+                            $this->branches['trunk'] = $this->buildIdentifier(
                                 '/' . $this->trunkPath,
                                 $match[1]
                             );
-                            $this->rootIdentifier = $this->branches[$this->trunkPath];
+                            $this->rootIdentifier = $this->branches['trunk'];
                             break;
                         }
                     }
@@ -250,7 +259,7 @@ class SvnDriver extends VcsDriver
         }
 
         // proceed with deep check for local urls since they are fast to process
-        if (!$deep && !static::isLocalUrl($url)) {
+        if (!$deep && !Filesystem::isLocalPath($url)) {
             return false;
         }
 
@@ -304,7 +313,8 @@ class SvnDriver extends VcsDriver
     protected function execute($command, $url)
     {
         if (null === $this->util) {
-            $this->util = new SvnUtil($this->baseUrl, $this->io, $this->process);
+            $this->util = new SvnUtil($this->baseUrl, $this->io, $this->config, $this->process);
+            $this->util->setCacheCredentials($this->cacheCredentials);
         }
 
         try {
diff --git a/vendor/composer/composer/src/Composer/Repository/Vcs/VcsDriver.php b/vendor/composer/composer/src/Composer/Repository/Vcs/VcsDriver.php
index f111207..b03f556 100644
--- a/vendor/composer/composer/src/Composer/Repository/Vcs/VcsDriver.php
+++ b/vendor/composer/composer/src/Composer/Repository/Vcs/VcsDriver.php
@@ -17,6 +17,7 @@ use Composer\Config;
 use Composer\IO\IOInterface;
 use Composer\Util\ProcessExecutor;
 use Composer\Util\RemoteFilesystem;
+use Composer\Util\Filesystem;
 
 /**
  * A driver implementation for driver with authentication interaction.
@@ -44,11 +45,8 @@ abstract class VcsDriver implements VcsDriverInterface
      */
     final public function __construct(array $repoConfig, IOInterface $io, Config $config, ProcessExecutor $process = null, RemoteFilesystem $remoteFilesystem = null)
     {
-
-        if (self::isLocalUrl($repoConfig['url'])) {
-            $repoConfig['url'] = realpath(
-                preg_replace('/^file:\/\//', '', $repoConfig['url'])
-            );
+        if (Filesystem::isLocalPath($repoConfig['url'])) {
+            $repoConfig['url'] = Filesystem::getPlatformPath($repoConfig['url']);
         }
 
         $this->url = $repoConfig['url'];
@@ -57,7 +55,7 @@ abstract class VcsDriver implements VcsDriverInterface
         $this->io = $io;
         $this->config = $config;
         $this->process = $process ?: new ProcessExecutor($io);
-        $this->remoteFilesystem = $remoteFilesystem ?: new RemoteFilesystem($io);
+        $this->remoteFilesystem = $remoteFilesystem ?: new RemoteFilesystem($io, $config);
     }
 
     /**
@@ -102,17 +100,6 @@ abstract class VcsDriver implements VcsDriverInterface
     }
 
     /**
-     * Return if current repository url is local
-     *
-     * @param  string  $url
-     * @return boolean Repository url is local
-     */
-    protected static function isLocalUrl($url)
-    {
-        return (bool) preg_match('{^(file://|/|[a-z]:[\\\\/])}i', $url);
-    }
-
-    /**
      * {@inheritDoc}
      */
     public function cleanup()
diff --git a/vendor/composer/composer/src/Composer/Repository/VcsRepository.php b/vendor/composer/composer/src/Composer/Repository/VcsRepository.php
index 62e7ace..6c9dc5d 100644
--- a/vendor/composer/composer/src/Composer/Repository/VcsRepository.php
+++ b/vendor/composer/composer/src/Composer/Repository/VcsRepository.php
@@ -265,7 +265,7 @@ class VcsRepository extends ArrayRepository
         }
     }
 
-    private function preProcess(VcsDriverInterface $driver, array $data, $identifier)
+    protected function preProcess(VcsDriverInterface $driver, array $data, $identifier)
     {
         // keep the name of the main identifier for all packages
         $data['name'] = $this->packageName ?: $data['name'];
diff --git a/vendor/composer/composer/src/Composer/Script/Event.php b/vendor/composer/composer/src/Composer/Script/Event.php
index 40b109b..bde7e3b 100644
--- a/vendor/composer/composer/src/Composer/Script/Event.php
+++ b/vendor/composer/composer/src/Composer/Script/Event.php
@@ -14,6 +14,7 @@ namespace Composer\Script;
 
 use Composer\Composer;
 use Composer\IO\IOInterface;
+use Composer\EventDispatcher\Event as BaseEvent;
 
 /**
  * The script event class
@@ -21,7 +22,7 @@ use Composer\IO\IOInterface;
  * @author François Pluchino <francois.pluchino@opendisplay.com>
  * @author Nils Adermann <naderman@naderman.de>
  */
-class Event extends \Composer\EventDispatcher\Event
+class Event extends BaseEvent
 {
     /**
      * @var Composer The composer instance
@@ -45,10 +46,12 @@ class Event extends \Composer\EventDispatcher\Event
      * @param Composer    $composer The composer object
      * @param IOInterface $io       The IOInterface object
      * @param boolean     $devMode  Whether or not we are in dev mode
+     * @param array       $args     Arguments passed by the user
+     * @param array       $flags    Optional flags to pass data not as argument
      */
-    public function __construct($name, Composer $composer, IOInterface $io, $devMode = false)
+    public function __construct($name, Composer $composer, IOInterface $io, $devMode = false, array $args = array(), array $flags = array())
     {
-        parent::__construct($name);
+        parent::__construct($name, $args, $flags);
         $this->composer = $composer;
         $this->io = $io;
         $this->devMode = $devMode;
diff --git a/vendor/composer/composer/src/Composer/Script/ScriptEvents.php b/vendor/composer/composer/src/Composer/Script/ScriptEvents.php
index 5f3eaaf..616b2b9 100644
--- a/vendor/composer/composer/src/Composer/Script/ScriptEvents.php
+++ b/vendor/composer/composer/src/Composer/Script/ScriptEvents.php
@@ -165,4 +165,21 @@ class ScriptEvents
      */
     const POST_CREATE_PROJECT_CMD = 'post-create-project-cmd';
 
+    /**
+     * The PRE_ARCHIVE_CMD event occurs before the update command is executed.
+     *
+     * The event listener method receives a Composer\Script\CommandEvent instance.
+     *
+     * @var string
+     */
+    const PRE_ARCHIVE_CMD = 'pre-archive-cmd';
+
+    /**
+     * The POST_ARCHIVE_CMD event occurs after the status command is executed.
+     *
+     * The event listener method receives a Composer\Script\CommandEvent instance.
+     *
+     * @var string
+     */
+    const POST_ARCHIVE_CMD = 'post-archive-cmd';
 }
diff --git a/vendor/composer/composer/src/Composer/Util/AuthHelper.php b/vendor/composer/composer/src/Composer/Util/AuthHelper.php
new file mode 100644
index 0000000..4accba7
--- /dev/null
+++ b/vendor/composer/composer/src/Composer/Util/AuthHelper.php
@@ -0,0 +1,63 @@
+<?php
+
+/*
+ * This file is part of Composer.
+ *
+ * (c) Nils Adermann <naderman@naderman.de>
+ *     Jordi Boggiano <j.boggiano@seld.be>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Composer\Util;
+
+use Composer\Config;
+use Composer\IO\IOInterface;
+
+/**
+ * @author Jordi Boggiano <j.boggiano@seld.be>
+ */
+class AuthHelper
+{
+    protected $io;
+    protected $config;
+
+    public function __construct(IOInterface $io, Config $config)
+    {
+        $this->io = $io;
+        $this->config = $config;
+    }
+
+    public function storeAuth($originUrl, $storeAuth)
+    {
+        $store = false;
+        $configSource = $this->config->getAuthConfigSource();
+        if ($storeAuth === true) {
+            $store = $configSource;
+        } elseif ($storeAuth === 'prompt') {
+            $answer = $this->io->askAndValidate(
+                'Do you want to store credentials for '.$originUrl.' in '.$configSource->getName().' ? [Yn] ',
+                function ($value) {
+                    $input = strtolower(substr(trim($value), 0, 1));
+                    if (in_array($input, array('y','n'))) {
+                        return $input;
+                    }
+                    throw new \RuntimeException('Please answer (y)es or (n)o');
+                },
+                false,
+                'y'
+            );
+
+            if ($answer === 'y') {
+                $store = $configSource;
+            }
+        }
+        if ($store) {
+            $store->addConfigSetting(
+                'http-basic.'.$originUrl,
+                $this->io->getAuthentication($originUrl)
+            );
+        }
+    }
+}
diff --git a/vendor/composer/composer/src/Composer/Util/ComposerMirror.php b/vendor/composer/composer/src/Composer/Util/ComposerMirror.php
new file mode 100644
index 0000000..036444d
--- /dev/null
+++ b/vendor/composer/composer/src/Composer/Util/ComposerMirror.php
@@ -0,0 +1,57 @@
+<?php
+
+/*
+ * This file is part of Composer.
+ *
+ * (c) Nils Adermann <naderman@naderman.de>
+ *     Jordi Boggiano <j.boggiano@seld.be>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Composer\Util;
+
+/**
+ * Composer mirror utilities
+ *
+ * @author Jordi Boggiano <j.boggiano@seld.be>
+ */
+class ComposerMirror
+{
+    public static function processUrl($mirrorUrl, $packageName, $version, $reference, $type)
+    {
+        if ($reference) {
+            $reference = preg_match('{^([a-f0-9]*|%reference%)$}', $reference) ? $reference : md5($reference);
+        }
+        $version = strpos($version, '/') === false ? $version : md5($version);
+
+        return str_replace(
+            array('%package%', '%version%', '%reference%', '%type%'),
+            array($packageName, $version, $reference, $type),
+            $mirrorUrl
+        );
+    }
+
+    public static function processGitUrl($mirrorUrl, $packageName, $url, $type)
+    {
+        if (preg_match('#^(?:(?:https?|git)://github\.com/|git@github\.com:)([^/]+)/(.+?)(?:\.git)?$#', $url, $match)) {
+            $url = 'gh-'.$match[1].'/'.$match[2];
+        } elseif (preg_match('#^https://bitbucket\.org/([^/]+)/(.+?)(?:\.git)?/?$#', $url, $match)) {
+            $url = 'bb-'.$match[1].'/'.$match[2];
+        } else {
+            $url = preg_replace('{[^a-z0-9_.-]}i', '-', trim($url, '/'));
+        }
+
+        return str_replace(
+            array('%package%', '%normalizedUrl%', '%type%'),
+            array($packageName, $url, $type),
+            $mirrorUrl
+        );
+    }
+
+    public static function processHgUrl($mirrorUrl, $packageName, $url, $type)
+    {
+        return self::processGitUrl($mirrorUrl, $packageName, $url, $type);
+    }
+}
diff --git a/vendor/composer/composer/src/Composer/Util/ConfigValidator.php b/vendor/composer/composer/src/Composer/Util/ConfigValidator.php
index 5bd9153..71b0ac4 100644
--- a/vendor/composer/composer/src/Composer/Util/ConfigValidator.php
+++ b/vendor/composer/composer/src/Composer/Util/ConfigValidator.php
@@ -37,11 +37,12 @@ class ConfigValidator
     /**
      * Validates the config, and returns the result.
      *
-     * @param string $file The path to the file
+     * @param string  $file                       The path to the file
+     * @param integer $arrayLoaderValidationFlags Flags for ArrayLoader validation
      *
      * @return array a triple containing the errors, publishable errors, and warnings
      */
-    public function validate($file)
+    public function validate($file, $arrayLoaderValidationFlags = ValidatingArrayLoader::CHECK_ALL)
     {
         $errors = array();
         $publishErrors = array();
@@ -93,6 +94,10 @@ class ConfigValidator
             $warnings[] = 'No license specified, it is recommended to do so. For closed-source software you may use "proprietary" as license.';
         }
 
+        if (isset($manifest['version'])) {
+            $warnings[] = 'The version field is present, it is recommended to leave it out if the package is published on Packagist.';
+        }
+
         if (!empty($manifest['name']) && preg_match('{[A-Z]}', $manifest['name'])) {
             $suggestName = preg_replace('{(?:([a-z])([A-Z])|([A-Z])([A-Z][a-z]))}', '\\1\\3-\\2\\4', $manifest['name']);
             $suggestName = strtolower($suggestName);
@@ -119,7 +124,7 @@ class ConfigValidator
         }
 
         try {
-            $loader = new ValidatingArrayLoader(new ArrayLoader());
+            $loader = new ValidatingArrayLoader(new ArrayLoader(), true, null, $arrayLoaderValidationFlags);
             if (!isset($manifest['version'])) {
                 $manifest['version'] = '1.0.0';
             }
diff --git a/vendor/composer/composer/src/Composer/Util/Filesystem.php b/vendor/composer/composer/src/Composer/Util/Filesystem.php
index 8771776..ca39573 100644
--- a/vendor/composer/composer/src/Composer/Util/Filesystem.php
+++ b/vendor/composer/composer/src/Composer/Util/Filesystem.php
@@ -14,6 +14,7 @@ namespace Composer\Util;
 
 use RecursiveDirectoryIterator;
 use RecursiveIteratorIterator;
+use Symfony\Component\Finder\Finder;
 
 /**
  * @author Jordi Boggiano <j.boggiano@seld.be>
@@ -35,7 +36,7 @@ class Filesystem
         }
 
         if (file_exists($file)) {
-            return unlink($file);
+            return $this->unlink($file);
         }
 
         return false;
@@ -49,9 +50,36 @@ class Filesystem
      */
     public function isDirEmpty($dir)
     {
-        $dir = rtrim($dir, '/\\');
+        $finder = Finder::create()
+            ->ignoreVCS(false)
+            ->ignoreDotFiles(false)
+            ->depth(0)
+            ->in($dir);
 
-        return count(glob($dir.'/*') ?: array()) === 0 && count(glob($dir.'/.*') ?: array()) === 2;
+        return count($finder) === 0;
+    }
+
+    public function emptyDirectory($dir, $ensureDirectoryExists = true)
+    {
+        if (file_exists($dir) && is_link($dir)) {
+            $this->unlink($dir);
+        }
+
+        if ($ensureDirectoryExists) {
+            $this->ensureDirectoryExists($dir);
+        }
+
+        if (is_dir($dir)) {
+            $finder = Finder::create()
+                ->ignoreVCS(false)
+                ->ignoreDotFiles(false)
+                ->depth(0)
+                ->in($dir);
+
+            foreach ($finder as $path) {
+                $this->remove((string) $path);
+            }
+        }
     }
 
     /**
@@ -62,10 +90,16 @@ class Filesystem
      *
      * @param  string $directory
      * @return bool
+     *
+     * @throws \RuntimeException
      */
     public function removeDirectory($directory)
     {
-        if (!is_dir($directory)) {
+        if ($this->isSymlinkedDirectory($directory)) {
+            return $this->unlinkSymlinkedDirectory($directory);
+        }
+
+        if (!file_exists($directory) || !is_dir($directory)) {
             return true;
         }
 
@@ -78,9 +112,9 @@ class Filesystem
         }
 
         if (defined('PHP_WINDOWS_VERSION_BUILD')) {
-            $cmd = sprintf('rmdir /S /Q %s', escapeshellarg(realpath($directory)));
+            $cmd = sprintf('rmdir /S /Q %s', ProcessExecutor::escape(realpath($directory)));
         } else {
-            $cmd = sprintf('rm -rf %s', escapeshellarg($directory));
+            $cmd = sprintf('rm -rf %s', ProcessExecutor::escape($directory));
         }
 
         $result = $this->getProcess()->execute($cmd, $output) === 0;
@@ -88,7 +122,11 @@ class Filesystem
         // clear stat cache because external processes aren't tracked by the php stat cache
         clearstatcache();
 
-        return $result && !is_dir($directory);
+        if ($result && !file_exists($directory)) {
+            return true;
+        }
+
+        return $this->removeDirectoryPhp($directory);
     }
 
     /**
@@ -108,13 +146,13 @@ class Filesystem
 
         foreach ($ri as $file) {
             if ($file->isDir()) {
-                rmdir($file->getPathname());
+                $this->rmdir($file->getPathname());
             } else {
-                unlink($file->getPathname());
+                $this->unlink($file->getPathname());
             }
         }
 
-        return rmdir($directory);
+        return $this->rmdir($directory);
     }
 
     public function ensureDirectoryExists($directory)
@@ -134,6 +172,58 @@ class Filesystem
     }
 
     /**
+     * Attempts to unlink a file and in case of failure retries after 350ms on windows
+     *
+     * @param  string $path
+     * @return bool
+     *
+     * @throws \RuntimeException
+     */
+    public function unlink($path)
+    {
+        if (!@$this->unlinkImplementation($path)) {
+            // retry after a bit on windows since it tends to be touchy with mass removals
+            if (!defined('PHP_WINDOWS_VERSION_BUILD') || (usleep(350000) && !@$this->unlinkImplementation($path))) {
+                $error = error_get_last();
+                $message = 'Could not delete '.$path.': ' . @$error['message'];
+                if (defined('PHP_WINDOWS_VERSION_BUILD')) {
+                    $message .= "\nThis can be due to an antivirus or the Windows Search Indexer locking the file while they are analyzed";
+                }
+
+                throw new \RuntimeException($message);
+            }
+        }
+
+        return true;
+    }
+
+    /**
+     * Attempts to rmdir a file and in case of failure retries after 350ms on windows
+     *
+     * @param  string $path
+     * @return bool
+     *
+     * @throws \RuntimeException
+     */
+    public function rmdir($path)
+    {
+        if (!@rmdir($path)) {
+            // retry after a bit on windows since it tends to be touchy with mass removals
+            if (!defined('PHP_WINDOWS_VERSION_BUILD') || (usleep(350000) && !@rmdir($path))) {
+                $error = error_get_last();
+                $message = 'Could not delete '.$path.': ' . @$error['message'];
+                if (defined('PHP_WINDOWS_VERSION_BUILD')) {
+                    $message .= "\nThis can be due to an antivirus or the Windows Search Indexer locking the file while they are analyzed";
+                }
+
+                throw new \RuntimeException($message);
+            }
+        }
+
+        return true;
+    }
+
+    /**
      * Copy then delete is a non-atomic version of {@link rename}.
      *
      * Some systems can't rename and also don't have proc_open,
@@ -144,6 +234,13 @@ class Filesystem
      */
     public function copyThenRemove($source, $target)
     {
+        if (!is_dir($source)) {
+            copy($source, $target);
+            $this->unlink($source);
+
+            return;
+        }
+
         $it = new RecursiveDirectoryIterator($source, RecursiveDirectoryIterator::SKIP_DOTS);
         $ri = new RecursiveIteratorIterator($it, RecursiveIteratorIterator::SELF_FIRST);
         $this->ensureDirectoryExists($target);
@@ -172,7 +269,7 @@ class Filesystem
 
         if (defined('PHP_WINDOWS_VERSION_BUILD')) {
             // Try to copy & delete - this is a workaround for random "Access denied" errors.
-            $command = sprintf('xcopy %s %s /E /I /Q', escapeshellarg($source), escapeshellarg($target));
+            $command = sprintf('xcopy %s %s /E /I /Q', ProcessExecutor::escape($source), ProcessExecutor::escape($target));
             $result = $this->processExecutor->execute($command, $output);
 
             // clear stat cache because external processes aren't tracked by the php stat cache
@@ -186,7 +283,7 @@ class Filesystem
         } else {
             // We do not use PHP's "rename" function here since it does not support
             // the case where $source, and $target are located on different partitions.
-            $command = sprintf('mv %s %s', escapeshellarg($source), escapeshellarg($target));
+            $command = sprintf('mv %s %s', ProcessExecutor::escape($source), ProcessExecutor::escape($target));
             $result = $this->processExecutor->execute($command, $output);
 
             // clear stat cache because external processes aren't tracked by the php stat cache
@@ -353,6 +450,26 @@ class Filesystem
         return $prefix.($absolute ? '/' : '').implode('/', $parts);
     }
 
+    /**
+     * Return if the given path is local
+     *
+     * @param  string $path
+     * @return bool
+     */
+    public static function isLocalPath($path)
+    {
+        return (bool) preg_match('{^(file://|/|[a-z]:[\\\\/]|\.\.[\\\\/]|[a-z0-9_.-]+[\\\\/])}i', $path);
+    }
+
+    public static function getPlatformPath($path)
+    {
+        if (defined('PHP_WINDOWS_VERSION_BUILD')) {
+            $path = preg_replace('{^(?:file:///([a-z])/)}i', 'file://$1:/', $path);
+        }
+
+        return preg_replace('{^file://}i', '', $path);
+    }
+
     protected function directorySize($directory)
     {
         $it = new RecursiveDirectoryIterator($directory, RecursiveDirectoryIterator::SKIP_DOTS);
@@ -372,4 +489,67 @@ class Filesystem
     {
         return new ProcessExecutor;
     }
+
+    /**
+     * delete symbolic link implementation (commonly known as "unlink()")
+     *
+     * symbolic links on windows which link to directories need rmdir instead of unlink
+     *
+     * @param string $path
+     *
+     * @return bool
+     */
+    private function unlinkImplementation($path)
+    {
+        if (defined('PHP_WINDOWS_VERSION_BUILD') && is_dir($path) && is_link($path)) {
+            return rmdir($path);
+        }
+
+        return unlink($path);
+    }
+
+    private function isSymlinkedDirectory($directory)
+    {
+        if (!is_dir($directory)) {
+            return false;
+        }
+
+        $resolved = $this->resolveSymlinkedDirectorySymlink($directory);
+
+        return is_link($resolved);
+    }
+
+    /**
+     * @param string $directory
+     *
+     * @return bool
+     */
+    private function unlinkSymlinkedDirectory($directory)
+    {
+        $resolved = $this->resolveSymlinkedDirectorySymlink($directory);
+
+        return $this->unlink($resolved);
+    }
+
+    /**
+     * resolve pathname to symbolic link of a directory
+     *
+     * @param string $pathname directory path to resolve
+     *
+     * @return string resolved path to symbolic link or original pathname (unresolved)
+     */
+    private function resolveSymlinkedDirectorySymlink($pathname)
+    {
+        if (!is_dir($pathname)) {
+            return $pathname;
+        }
+
+        $resolved = rtrim($pathname, '/');
+
+        if (!strlen($resolved)) {
+            return $pathname;
+        }
+
+        return $resolved;
+    }
 }
diff --git a/vendor/composer/composer/src/Composer/Util/Git.php b/vendor/composer/composer/src/Composer/Util/Git.php
index 4b6fcd6..4a0c393 100644
--- a/vendor/composer/composer/src/Composer/Util/Git.php
+++ b/vendor/composer/composer/src/Composer/Util/Git.php
@@ -12,12 +12,146 @@
 
 namespace Composer\Util;
 
+use Composer\Config;
+use Composer\IO\IOInterface;
+
 /**
  * @author Jordi Boggiano <j.boggiano@seld.be>
  */
 class Git
 {
-    public function cleanEnv()
+    protected $io;
+    protected $config;
+    protected $process;
+    protected $filesystem;
+
+    public function __construct(IOInterface $io, Config $config, ProcessExecutor $process, Filesystem $fs)
+    {
+        $this->io = $io;
+        $this->config = $config;
+        $this->process = $process;
+        $this->filesystem = $fs;
+    }
+
+    public function runCommand($commandCallable, $url, $cwd, $initialClone = false)
+    {
+        if ($initialClone) {
+            $origCwd = $cwd;
+            $cwd = null;
+        }
+
+        if (preg_match('{^ssh://[^@]+@[^:]+:[^0-9]+}', $url)) {
+            throw new \InvalidArgumentException('The source URL '.$url.' is invalid, ssh URLs should have a port number after ":".'."\n".'Use ssh://git@example.com:22/path or just git@example.com:path if you do not want to provide a password or custom port.');
+        }
+
+        if (!$initialClone) {
+            // capture username/password from URL if there is one
+            $this->process->execute('git remote -v', $output, $cwd);
+            if (preg_match('{^(?:composer|origin)\s+https?://(.+):(.+)@([^/]+)}im', $output, $match)) {
+                $this->io->setAuthentication($match[3], urldecode($match[1]), urldecode($match[2]));
+            }
+        }
+
+        // public github, autoswitch protocols
+        if (preg_match('{^(?:https?|git)://'.self::getGitHubDomainsRegex($this->config).'/(.*)}', $url, $match)) {
+            $protocols = $this->config->get('github-protocols');
+            if (!is_array($protocols)) {
+                throw new \RuntimeException('Config value "github-protocols" must be an array, got '.gettype($protocols));
+            }
+            $messages = array();
+            foreach ($protocols as $protocol) {
+                if ('ssh' === $protocol) {
+                    $url = "git@" . $match[1] . ":" . $match[2];
+                } else {
+                    $url = $protocol ."://" . $match[1] . "/" . $match[2];
+                }
+
+                if (0 === $this->process->execute(call_user_func($commandCallable, $url), $ignoredOutput, $cwd)) {
+                    return;
+                }
+                $messages[] = '- ' . $url . "\n" . preg_replace('#^#m', '  ', $this->process->getErrorOutput());
+                if ($initialClone) {
+                    $this->filesystem->removeDirectory($origCwd);
+                }
+            }
+
+            // failed to checkout, first check git accessibility
+            $this->throwException('Failed to clone ' . self::sanitizeUrl($url) .' via '.implode(', ', $protocols).' protocols, aborting.' . "\n\n" . implode("\n", $messages), $url);
+        }
+
+        $command = call_user_func($commandCallable, $url);
+        if (0 !== $this->process->execute($command, $ignoredOutput, $cwd)) {
+            // private github repository without git access, try https with auth
+            if (preg_match('{^git@'.self::getGitHubDomainsRegex($this->config).':(.+?)\.git$}i', $url, $match)) {
+                if (!$this->io->hasAuthentication($match[1])) {
+                    $gitHubUtil = new GitHub($this->io, $this->config, $this->process);
+                    $message = 'Cloning failed using an ssh key for authentication, enter your GitHub credentials to access private repos';
+
+                    if (!$gitHubUtil->authorizeOAuth($match[1]) && $this->io->isInteractive()) {
+                        $gitHubUtil->authorizeOAuthInteractively($match[1], $message);
+                    }
+                }
+
+                if ($this->io->hasAuthentication($match[1])) {
+                    $auth = $this->io->getAuthentication($match[1]);
+                    $url = 'https://'.rawurlencode($auth['username']) . ':' . rawurlencode($auth['password']) . '@'.$match[1].'/'.$match[2].'.git';
+
+                    $command = call_user_func($commandCallable, $url);
+                    if (0 === $this->process->execute($command, $ignoredOutput, $cwd)) {
+                        return;
+                    }
+                }
+            } elseif ( // private non-github repo that failed to authenticate
+                preg_match('{(https?://)([^/]+)(.*)$}i', $url, $match) &&
+                strpos($this->process->getErrorOutput(), 'fatal: Authentication failed') !== false
+            ) {
+                if (strpos($match[2], '@')) {
+                    list($authParts, $match[2]) = explode('@', $match[2], 2);
+                }
+
+                $storeAuth = false;
+                if ($this->io->hasAuthentication($match[2])) {
+                    $auth = $this->io->getAuthentication($match[2]);
+                } elseif ($this->io->isInteractive()) {
+                    $defaultUsername = null;
+                    if (isset($authParts) && $authParts) {
+                        if (false !== strpos($authParts, ':')) {
+                            list($defaultUsername,) = explode(':', $authParts, 2);
+                        } else {
+                            $defaultUsername = $authParts;
+                        }
+                    }
+
+                    $this->io->write('    Authentication required (<info>'.parse_url($url, PHP_URL_HOST).'</info>):');
+                    $auth = array(
+                        'username'  => $this->io->ask('      Username: ', $defaultUsername),
+                        'password'  => $this->io->askAndHideAnswer('      Password: '),
+                    );
+                    $storeAuth = $this->config->get('store-auths');
+                }
+
+                if ($auth) {
+                    $url = $match[1].rawurlencode($auth['username']).':'.rawurlencode($auth['password']).'@'.$match[2].$match[3];
+
+                    $command = call_user_func($commandCallable, $url);
+                    if (0 === $this->process->execute($command, $ignoredOutput, $cwd)) {
+                        $this->io->setAuthentication($match[2], $auth['username'], $auth['password']);
+                        $authHelper = new AuthHelper($this->io, $this->config);
+                        $authHelper->storeAuth($match[2], $storeAuth);
+
+                        return;
+                    }
+                }
+            }
+
+            if ($initialClone) {
+                $this->filesystem->removeDirectory($origCwd);
+            }
+            $this->throwException('Failed to execute ' . self::sanitizeUrl($command) . "\n\n" . $this->process->getErrorOutput(), $url);
+        }
+    }
+
+    public static function cleanEnv()
     {
         if (ini_get('safe_mode') && false === strpos(ini_get('safe_mode_allowed_env_vars'), 'GIT_ASKPASS')) {
             throw new \RuntimeException('safe_mode is enabled and safe_mode_allowed_env_vars does not contain GIT_ASKPASS, can not set env var. You can disable safe_mode with "-dsafe_mode=0" when running composer');
@@ -36,4 +170,23 @@ class Git
             putenv('GIT_WORK_TREE');
         }
     }
+
+    public static function getGitHubDomainsRegex(Config $config)
+    {
+        return '('.implode('|', array_map('preg_quote', $config->get('github-domains'))).')';
+    }
+
+    public static function sanitizeUrl($message)
+    {
+        return preg_replace('{://([^@]+?):.+?@}', '://$1:***@', $message);
+    }
+
+    private function throwException($message, $url)
+    {
+        if (0 !== $this->process->execute('git --version', $ignoredOutput)) {
+            throw new \RuntimeException('Failed to clone '.self::sanitizeUrl($url).', git was not found, check that it is installed and in your PATH env.' . "\n\n" . $this->process->getErrorOutput());
+        }
+
+        throw new \RuntimeException($message);
+    }
 }
diff --git a/vendor/composer/composer/src/Composer/Util/GitHub.php b/vendor/composer/composer/src/Composer/Util/GitHub.php
index 49e56f8..8624edc 100644
--- a/vendor/composer/composer/src/Composer/Util/GitHub.php
+++ b/vendor/composer/composer/src/Composer/Util/GitHub.php
@@ -40,7 +40,7 @@ class GitHub
         $this->io = $io;
         $this->config = $config;
         $this->process = $process ?: new ProcessExecutor;
-        $this->remoteFilesystem = $remoteFilesystem ?: new RemoteFilesystem($io);
+        $this->remoteFilesystem = $remoteFilesystem ?: new RemoteFilesystem($io, $config);
     }
 
     /**
@@ -83,34 +83,101 @@ class GitHub
         if ($message) {
             $this->io->write($message);
         }
-        $this->io->write('The credentials will be swapped for an OAuth token stored in '.$this->config->get('home').'/config.json, your password will not be stored');
+        $this->io->write('The credentials will be swapped for an OAuth token stored in '.$this->config->getAuthConfigSource()->getName().', your password will not be stored');
         $this->io->write('To revoke access to this token you can visit https://github.com/settings/applications');
         while ($attemptCounter++ < 5) {
             try {
-                $username = $this->io->ask('Username: ');
-                $password = $this->io->askAndHideAnswer('Password: ');
-                $this->io->setAuthentication($originUrl, $username, $password);
+                if (empty($otp) || !$this->io->hasAuthentication($originUrl)) {
+                    $username = $this->io->ask('Username: ');
+                    $password = $this->io->askAndHideAnswer('Password: ');
+                    $otp      = null;
+
+                    $this->io->setAuthentication($originUrl, $username, $password);
+                }
 
                 // build up OAuth app name
                 $appName = 'Composer';
-                if (0 === $this->process->execute('hostname', $output)) {
+                if ($this->config->get('github-expose-hostname') === true && 0 === $this->process->execute('hostname', $output)) {
                     $appName .= ' on ' . trim($output);
+                } else {
+                    $appName .= ' [' . date('YmdHis') . ']';
+                }
+
+                $headers = array();
+                if ($otp) {
+                    $headers = array('X-GitHub-OTP: ' . $otp);
                 }
 
-                $contents = JsonFile::parseJson($this->remoteFilesystem->getContents($originUrl, 'https://'. $apiUrl . '/authorizations', false, array(
+                // try retrieving an existing token with the same name
+                $contents = null;
+                $auths = JsonFile::parseJson($this->remoteFilesystem->getContents($originUrl, 'https://'. $apiUrl . '/authorizations', false, array(
+                    'retry-auth-failure' => false,
                     'http' => array(
-                        'method' => 'POST',
-                        'follow_location' => false,
-                        'header' => "Content-Type: application/json\r\n",
-                        'content' => json_encode(array(
-                            'scopes' => array('repo'),
-                            'note' => $appName,
-                            'note_url' => 'https://getcomposer.org/',
-                        )),
+                        'header' => $headers
                     )
                 )));
+                foreach ($auths as $auth) {
+                    if (
+                        isset($auth['app']['name'])
+                        && 0 === strpos($auth['app']['name'], $appName)
+                        && $auth['app']['url'] === 'https://getcomposer.org/'
+                    ) {
+                        $this->io->write('An existing OAuth token for Composer is present and will be reused');
+
+                        $contents['token'] = $auth['token'];
+                        break;
+                    }
+                }
+
+                // no existing token, create one
+                if (empty($contents['token'])) {
+                    $headers[] = 'Content-Type: application/json';
+
+                    $contents = JsonFile::parseJson($this->remoteFilesystem->getContents($originUrl, 'https://'. $apiUrl . '/authorizations', false, array(
+                        'retry-auth-failure' => false,
+                        'http' => array(
+                            'method' => 'POST',
+                            'follow_location' => false,
+                            'header' => $headers,
+                            'content' => json_encode(array(
+                                'scopes' => array('repo'),
+                                'note' => $appName,
+                                'note_url' => 'https://getcomposer.org/',
+                            )),
+                        )
+                    )));
+                    $this->io->write('Token successfully created');
+                }
             } catch (TransportException $e) {
                 if (in_array($e->getCode(), array(403, 401))) {
+                    // 401 when authentication was supplied, handle 2FA if required.
+                    if ($this->io->hasAuthentication($originUrl)) {
+                        $headerNames = array_map(function ($header) {
+                            return strtolower(strstr($header, ':', true));
+                        }, $e->getHeaders());
+
+                        if ($key = array_search('x-github-otp', $headerNames)) {
+                            $headers = $e->getHeaders();
+                            list($required, $method) = array_map('trim', explode(';', substr(strstr($headers[$key], ':'), 1)));
+
+                            if ('required' === $required) {
+                                $this->io->write('Two-factor Authentication');
+
+                                if ('app' === $method) {
+                                    $this->io->write('Open the two-factor authentication app on your device to view your authentication code and verify your identity.');
+                                }
+
+                                if ('sms' === $method) {
+                                    $this->io->write('You have been sent an SMS message with an authentication code to verify your identity.');
+                                }
+
+                                $otp = $this->io->ask('Authentication Code: ');
+
+                                continue;
+                            }
+                        }
+                    }
+
                     $this->io->write('Invalid credentials.');
                     continue;
                 }
@@ -121,9 +188,8 @@ class GitHub
             $this->io->setAuthentication($originUrl, $contents['token'], 'x-oauth-basic');
 
             // store value in user config
-            $githubTokens = $this->config->get('github-oauth') ?: array();
-            $githubTokens[$originUrl] = $contents['token'];
-            $this->config->getConfigSource()->addConfigSetting('github-oauth', $githubTokens);
+            $this->config->getConfigSource()->removeConfigSetting('github-oauth.'.$originUrl);
+            $this->config->getAuthConfigSource()->addConfigSetting('github-oauth.'.$originUrl, $contents['token']);
 
             return true;
         }
diff --git a/vendor/composer/composer/src/Composer/Util/NoProxyPattern.php b/vendor/composer/composer/src/Composer/Util/NoProxyPattern.php
index 533dbc1..4e5c0c7 100644
--- a/vendor/composer/composer/src/Composer/Util/NoProxyPattern.php
+++ b/vendor/composer/composer/src/Composer/Util/NoProxyPattern.php
@@ -126,7 +126,7 @@ class NoProxyPattern
 
         // Now do some bit shifting/switching to convert to ints
         $i    = ($a << 24) + ($b << 16) + ($c << 8) + $d;
-        $mask = $bits == 0 ? 0: (~0 << (32 - $bits));
+        $mask = $bits == 0 ? 0 : (~0 << (32 - $bits));
 
         // Here's our lowest int
         $low = $i & $mask;
diff --git a/vendor/composer/composer/src/Composer/Util/Perforce.php b/vendor/composer/composer/src/Composer/Util/Perforce.php
index 4755855..8e79f87 100644
--- a/vendor/composer/composer/src/Composer/Util/Perforce.php
+++ b/vendor/composer/composer/src/Composer/Util/Perforce.php
@@ -35,27 +35,35 @@ class Perforce
     protected $windowsFlag;
     protected $commandResult;
 
-    public function __construct($repoConfig, $port, $path, ProcessExecutor $process, $isWindows)
+    protected $io;
+
+    protected $filesystem;
+
+    public function __construct($repoConfig, $port, $path, ProcessExecutor $process, $isWindows, IOInterface $io)
     {
         $this->windowsFlag = $isWindows;
         $this->p4Port = $port;
         $this->initializePath($path);
         $this->process = $process;
         $this->initialize($repoConfig);
+        $this->io = $io;
     }
 
-    public static function create($repoConfig, $port, $path, ProcessExecutor $process = null)
+    public static function create($repoConfig, $port, $path, ProcessExecutor $process, IOInterface $io)
     {
-        if (!isset($process)) {
-            $process = new ProcessExecutor;
-        }
         $isWindows = defined('PHP_WINDOWS_VERSION_BUILD');
-
-        $perforce = new Perforce($repoConfig, $port, $path, $process, $isWindows);
+        $perforce = new Perforce($repoConfig, $port, $path, $process, $isWindows, $io);
 
         return $perforce;
     }
 
+    public static function checkServerExists($url, ProcessExecutor $processExecutor)
+    {
+        $output = null;
+
+        return  0 === $processExecutor->execute('p4 -p ' . $url . ' info -s', $output);
+    }
+
     public function initialize($repoConfig)
     {
         $this->uniquePerforceClientName = $this->generateUniquePerforceClientName();
@@ -100,10 +108,12 @@ class Perforce
     public function cleanupClientSpec()
     {
         $client = $this->getClient();
-        $command = 'p4 client -d $client';
+        $task = 'client -d ' . $client;
+        $useP4Client = false;
+        $command = $this->generateP4Command($task, $useP4Client);
         $this->executeCommand($command);
         $clientSpec = $this->getP4ClientSpec();
-        $fileSystem = new FileSystem($this->process);
+        $fileSystem = $this->getFilesystem();
         $fileSystem->remove($clientSpec);
     }
 
@@ -111,6 +121,7 @@ class Perforce
     {
         $this->commandResult = "";
         $exit_code = $this->process->execute($command, $this->commandResult);
+
         return $exit_code;
     }
 
@@ -132,7 +143,7 @@ class Perforce
     public function initializePath($path)
     {
         $this->path = $path;
-        $fs = new Filesystem();
+        $fs = $this->getFilesystem();
         $fs->ensureDirectoryExists($path);
     }
 
@@ -191,7 +202,12 @@ class Perforce
         return $this->p4User;
     }
 
-    public function queryP4User(IOInterface $io)
+    public function setUser($user)
+    {
+        $this->p4User = $user;
+    }
+
+    public function queryP4User()
     {
         $this->getUser();
         if (strlen($this->p4User) > 0) {
@@ -201,7 +217,7 @@ class Perforce
         if (strlen($this->p4User) > 0) {
             return;
         }
-        $this->p4User = $io->ask('Enter P4 User:');
+        $this->p4User = $this->io->ask('Enter P4 User:');
         if ($this->windowsFlag) {
             $command = 'p4 set P4USER=' . $this->p4User;
         } else {
@@ -235,18 +251,19 @@ class Perforce
             $command = 'echo $' . $name;
             $this->executeCommand($command);
             $result = trim($this->commandResult);
+
             return $result;
         }
     }
 
-    public function queryP4Password(IOInterface $io)
+    public function queryP4Password()
     {
         if (isset($this->p4Password)) {
             return $this->p4Password;
         }
         $password = $this->getP4variable('P4PASSWD');
         if (strlen($password) <= 0) {
-            $password = $io->askAndHideAnswer('Enter password for Perforce user ' . $this->getUser() . ': ');
+            $password = $this->io->askAndHideAnswer('Enter password for Perforce user ' . $this->getUser() . ': ');
         }
         $this->p4Password = $password;
 
@@ -270,40 +287,37 @@ class Perforce
     {
         $command = $this->generateP4Command('login -s', false);
         $exitCode  = $this->executeCommand($command);
-        if ($exitCode){
+        if ($exitCode) {
             $errorOutput = $this->process->getErrorOutput();
             $index = strpos($errorOutput, $this->getUser());
-            if ($index === false){
+            if ($index === false) {
                 $index = strpos($errorOutput, 'p4');
-                if ($index===false){
+                if ($index === false) {
                     return false;
                 }
                 throw new \Exception('p4 command not found in path: ' . $errorOutput);
             }
             throw new \Exception('Invalid user name: ' . $this->getUser() );
         }
+
         return true;
     }
 
     public function connectClient()
     {
-        $p4CreateClientCommand = $this->generateP4Command('client -i < ' . $this->getP4ClientSpec());
+        $p4CreateClientCommand = $this->generateP4Command('client -i < ' . str_replace( " ", "\\ ", $this->getP4ClientSpec() ));
         $this->executeCommand($p4CreateClientCommand);
     }
 
-    public function syncCodeBase($label)
+    public function syncCodeBase($sourceReference)
     {
         $prevDir = getcwd();
         chdir($this->path);
-
         $p4SyncCommand = $this->generateP4Command('sync -f ');
-        if (isset($label)) {
-            if (strcmp($label, 'dev-master') != 0) {
-                $p4SyncCommand = $p4SyncCommand . '@' . $label;
-            }
+        if (null != $sourceReference) {
+            $p4SyncCommand = $p4SyncCommand . '@' . $sourceReference;
         }
         $this->executeCommand($p4SyncCommand);
-
         chdir($prevDir);
     }
 
@@ -364,30 +378,24 @@ class Perforce
         return $process->run();
     }
 
-    public function p4Login(IOInterface $io)
+    public function p4Login()
     {
-        $this->queryP4User($io);
+        $this->queryP4User();
         if (!$this->isLoggedIn()) {
-            $password = $this->queryP4Password($io);
+            $password = $this->queryP4Password();
             if ($this->windowsFlag) {
                 $this->windowsLogin($password);
             } else {
                 $command = 'echo ' . $password  . ' | ' . $this->generateP4Command(' login -a', false);
                 $exitCode = $this->executeCommand($command);
                 $result = trim($this->commandResult);
-                if ($exitCode){
+                if ($exitCode) {
                     throw new \Exception("Error logging in:" . $this->process->getErrorOutput());
                 }
             }
         }
     }
 
-    public static function checkServerExists($url, ProcessExecutor $processExecutor)
-    {
-        $output = null;
-        return  0 === $processExecutor->execute('p4 -p ' . $url . ' info -s', $output);
-    }
-
     public function getComposerInformation($identifier)
     {
         $index = strpos($identifier, '@');
@@ -459,8 +467,15 @@ class Perforce
                 }
             }
         }
-        $branches = array();
-        $branches['master'] = $possibleBranches[$this->p4Branch];
+        $command = $this->generateP4Command('changes '. $this->getStream() . '/...', false);
+        $this->executeCommand($command);
+        $result = $this->commandResult;
+        $resArray = explode(PHP_EOL, $result);
+        $lastCommit = $resArray[0];
+        $lastCommitArr = explode(' ', $lastCommit);
+        $lastCommitNum = $lastCommitArr[1];
+
+        $branches = array('master' => $possibleBranches[$this->p4Branch] . '@'. $lastCommitNum);
 
         return $branches;
     }
@@ -541,4 +556,18 @@ class Perforce
 
         return $result;
     }
+
+    public function getFilesystem()
+    {
+        if (empty($this->filesystem)) {
+            $this->filesystem = new Filesystem($this->process);
+        }
+
+        return $this->filesystem;
+    }
+
+    public function setFilesystem(Filesystem $fs)
+    {
+        $this->filesystem = $fs;
+    }
 }
diff --git a/vendor/composer/composer/src/Composer/Util/ProcessExecutor.php b/vendor/composer/composer/src/Composer/Util/ProcessExecutor.php
index 1ad2b1d..46dafb0 100644
--- a/vendor/composer/composer/src/Composer/Util/ProcessExecutor.php
+++ b/vendor/composer/composer/src/Composer/Util/ProcessExecutor.php
@@ -13,6 +13,7 @@
 namespace Composer\Util;
 
 use Symfony\Component\Process\Process;
+use Symfony\Component\Process\ProcessUtils;
 use Composer\IO\IOInterface;
 
 /**
@@ -34,10 +35,10 @@ class ProcessExecutor
     /**
      * runs a process on the commandline
      *
-     * @param string $command the command to execute
-     * @param mixed  $output  the output will be written into this var if passed by ref
-     *                        if a callable is passed it will be used as output handler
-     * @param  string $cwd the working directory
+     * @param  string $command the command to execute
+     * @param  mixed  $output  the output will be written into this var if passed by ref
+     *                         if a callable is passed it will be used as output handler
+     * @param  string $cwd     the working directory
      * @return int    statuscode
      */
     public function execute($command, &$output = null, $cwd = null)
@@ -104,4 +105,17 @@ class ProcessExecutor
     {
         static::$timeout = $timeout;
     }
+
+    /**
+     * Escapes a string to be used as a shell argument.
+     *
+     * @param string $argument The argument that will be escaped
+     *
+     * @return string The escaped argument
+     */
+
+    public static function escape($argument)
+    {
+        return ProcessUtils::escapeArgument($argument);
+    }
 }
diff --git a/vendor/composer/composer/src/Composer/Util/RemoteFilesystem.php b/vendor/composer/composer/src/Composer/Util/RemoteFilesystem.php
index d3ecec0..cfb4a94 100644
--- a/vendor/composer/composer/src/Composer/Util/RemoteFilesystem.php
+++ b/vendor/composer/composer/src/Composer/Util/RemoteFilesystem.php
@@ -13,6 +13,7 @@
 namespace Composer\Util;
 
 use Composer\Composer;
+use Composer\Config;
 use Composer\IO\IOInterface;
 use Composer\Downloader\TransportException;
 
@@ -24,6 +25,7 @@ use Composer\Downloader\TransportException;
 class RemoteFilesystem
 {
     private $io;
+    private $config;
     private $firstCall;
     private $bytesMax;
     private $originUrl;
@@ -33,16 +35,21 @@ class RemoteFilesystem
     private $progress;
     private $lastProgress;
     private $options;
+    private $retryAuthFailure;
+    private $lastHeaders;
+    private $storeAuth;
 
     /**
      * Constructor.
      *
      * @param IOInterface $io      The IO instance
+     * @param Config      $config  The config
      * @param array       $options The options
      */
-    public function __construct(IOInterface $io, $options = array())
+    public function __construct(IOInterface $io, Config $config = null, array $options = array())
     {
         $this->io = $io;
+        $this->config = $config;
         $this->options = $options;
     }
 
@@ -70,7 +77,7 @@ class RemoteFilesystem
      * @param boolean $progress  Display the progression
      * @param array   $options   Additional context options
      *
-     * @return string The content
+     * @return bool|string The content
      */
     public function getContents($originUrl, $fileUrl, $progress = true, $options = array())
     {
@@ -88,6 +95,16 @@ class RemoteFilesystem
     }
 
     /**
+     * Returns the headers of the last request
+     *
+     * @return array
+     */
+    public function getLastHeaders()
+    {
+        return $this->lastHeaders;
+    }
+
+    /**
      * Get file content or copy action.
      *
      * @param string  $originUrl         The origin URL
@@ -103,18 +120,30 @@ class RemoteFilesystem
      */
     protected function get($originUrl, $fileUrl, $additionalOptions = array(), $fileName = null, $progress = true)
     {
+        if (strpos($originUrl, '.github.com') === (strlen($originUrl) - 11)) {
+            $originUrl = 'github.com';
+        }
+
         $this->bytesMax = 0;
         $this->originUrl = $originUrl;
         $this->fileUrl = $fileUrl;
         $this->fileName = $fileName;
         $this->progress = $progress;
         $this->lastProgress = null;
+        $this->retryAuthFailure = true;
+        $this->lastHeaders = array();
 
         // capture username/password from URL if there is one
         if (preg_match('{^https?://(.+):(.+)@([^/]+)}i', $fileUrl, $match)) {
             $this->io->setAuthentication($originUrl, urldecode($match[1]), urldecode($match[2]));
         }
 
+        if (isset($additionalOptions['retry-auth-failure'])) {
+            $this->retryAuthFailure = (bool) $additionalOptions['retry-auth-failure'];
+
+            unset($additionalOptions['retry-auth-failure']);
+        }
+
         $options = $this->getOptionsForUrl($originUrl, $additionalOptions);
 
         if ($this->io->isDebug()) {
@@ -124,6 +153,9 @@ class RemoteFilesystem
             $fileUrl .= (false === strpos($fileUrl, '?') ? '?' : '&') . 'access_token='.$options['github-token'];
             unset($options['github-token']);
         }
+        if (isset($options['http'])) {
+            $options['http']['ignore_errors'] = true;
+        }
         $ctx = StreamContextFactory::getContext($fileUrl, $options, array('notification' => array($this, 'callbackGet')));
 
         if ($this->progress) {
@@ -145,6 +177,10 @@ class RemoteFilesystem
             if ($e instanceof TransportException && !empty($http_response_header[0])) {
                 $e->setHeaders($http_response_header);
             }
+            if ($e instanceof TransportException && $result !== false) {
+                $e->setResponse($result);
+            }
+            $result = false;
         }
         if ($errorMessage && !ini_get('allow_url_fopen')) {
             $errorMessage = 'allow_url_fopen must be enabled in php.ini ('.$errorMessage.')';
@@ -154,10 +190,16 @@ class RemoteFilesystem
             throw $e;
         }
 
-        // fix for 5.4.0 https://bugs.php.net/bug.php?id=61336
+        // fail 4xx and 5xx responses and capture the response
         if (!empty($http_response_header[0]) && preg_match('{^HTTP/\S+ ([45]\d\d)}i', $http_response_header[0], $match)) {
-            $result = false;
             $errorCode = $match[1];
+            if (!$this->retry) {
+                $e = new TransportException('The "'.$this->fileUrl.'" file could not be downloaded ('.$http_response_header[0].')', $errorCode);
+                $e->setHeaders($http_response_header);
+                $e->setResponse($result);
+                throw $e;
+            }
+            $result = false;
         }
 
         // decode gzip
@@ -179,10 +221,14 @@ class RemoteFilesystem
                     // work around issue with gzuncompress & co that do not work with all gzip checksums
                     $result = file_get_contents('compress.zlib://data:application/octet-stream;base64,'.base64_encode($result));
                 }
+
+                if (!$result) {
+                    throw new TransportException('Failed to decode zlib stream');
+                }
             }
         }
 
-        if ($this->progress) {
+        if ($this->progress && !$this->retry) {
             $this->io->overwrite("    Downloading: <comment>100%</comment>");
         }
 
@@ -209,7 +255,13 @@ class RemoteFilesystem
         if ($this->retry) {
             $this->retry = false;
 
-            return $this->get($this->originUrl, $this->fileUrl, $additionalOptions, $this->fileName, $this->progress);
+            $result = $this->get($this->originUrl, $this->fileUrl, $additionalOptions, $this->fileName, $this->progress);
+
+            $authHelper = new AuthHelper($this->io, $this->config);
+            $authHelper->storeAuth($this->originUrl, $this->storeAuth);
+            $this->storeAuth = false;
+
+            return $result;
         }
 
         if (false === $result) {
@@ -221,6 +273,10 @@ class RemoteFilesystem
             throw $e;
         }
 
+        if (!empty($http_response_header[0])) {
+            $this->lastHeaders = $http_response_header;
+        }
+
         return $result;
     }
 
@@ -241,31 +297,19 @@ class RemoteFilesystem
             case STREAM_NOTIFY_FAILURE:
             case STREAM_NOTIFY_AUTH_REQUIRED:
                 if (401 === $messageCode) {
-                    if (!$this->io->isInteractive()) {
-                        $message = "The '" . $this->fileUrl . "' URL required authentication.\nYou must be using the interactive console";
-
-                        throw new TransportException($message, 401);
+                    // Bail if the caller is going to handle authentication failures itself.
+                    if (!$this->retryAuthFailure) {
+                        break;
                     }
 
-                    $this->promptAuthAndRetry();
-                    break;
-                }
-
-                if ($notificationCode === STREAM_NOTIFY_AUTH_REQUIRED) {
+                    $this->promptAuthAndRetry($messageCode);
                     break;
                 }
-
-                throw new TransportException('The "'.$this->fileUrl.'" file could not be downloaded ('.trim($message).')', $messageCode);
+                break;
 
             case STREAM_NOTIFY_AUTH_RESULT:
                 if (403 === $messageCode) {
-                    if (!$this->io->isInteractive() || $this->io->hasAuthentication($this->originUrl)) {
-                        $message = "The '" . $this->fileUrl . "' URL could not be accessed: " . $message;
-
-                        throw new TransportException($message, 403);
-                    }
-
-                    $this->promptAuthAndRetry();
+                    $this->promptAuthAndRetry($messageCode, $message);
                     break;
                 }
                 break;
@@ -296,12 +340,44 @@ class RemoteFilesystem
         }
     }
 
-    protected function promptAuthAndRetry()
+    protected function promptAuthAndRetry($httpStatus, $reason = null)
     {
-        $this->io->overwrite('    Authentication required (<info>'.parse_url($this->fileUrl, PHP_URL_HOST).'</info>):');
-        $username = $this->io->ask('      Username: ');
-        $password = $this->io->askAndHideAnswer('      Password: ');
-        $this->io->setAuthentication($this->originUrl, $username, $password);
+        if ($this->config && in_array($this->originUrl, $this->config->get('github-domains'), true)) {
+            $message = "\n".'Could not fetch '.$this->fileUrl.', enter your GitHub credentials '.($httpStatus === 404 ? 'to access private repos' : 'to go over the API rate limit');
+            $gitHubUtil = new GitHub($this->io, $this->config, null, $this);
+            if (!$gitHubUtil->authorizeOAuth($this->originUrl)
+                && (!$this->io->isInteractive() || !$gitHubUtil->authorizeOAuthInteractively($this->originUrl, $message))
+            ) {
+                throw new TransportException('Could not authenticate against '.$this->originUrl, 401);
+            }
+        } else {
+            // 404s are only handled for github
+            if ($httpStatus === 404) {
+                return;
+            }
+
+            // fail if the console is not interactive
+            if (!$this->io->isInteractive()) {
+                if ($httpStatus === 401) {
+                    $message = "The '" . $this->fileUrl . "' URL required authentication.\nYou must be using the interactive console to authenticate";
+                }
+                if ($httpStatus === 403) {
+                    $message = "The '" . $this->fileUrl . "' URL could not be accessed: " . $reason;
+                }
+
+                throw new TransportException($message, $httpStatus);
+            }
+            // fail if we already have auth
+            if ($this->io->hasAuthentication($this->originUrl)) {
+                throw new TransportException("Invalid credentials for '" . $this->fileUrl . "', aborting.", $httpStatus);
+            }
+
+            $this->io->overwrite('    Authentication required (<info>'.parse_url($this->fileUrl, PHP_URL_HOST).'</info>):');
+            $username = $this->io->ask('      Username: ');
+            $password = $this->io->askAndHideAnswer('      Password: ');
+            $this->io->setAuthentication($this->originUrl, $username, $password);
+            $this->storeAuth = $this->config->get('store-auths');
+        }
 
         $this->retry = true;
         throw new TransportException('RETRY');
@@ -309,15 +385,19 @@ class RemoteFilesystem
 
     protected function getOptionsForUrl($originUrl, $additionalOptions)
     {
+        if (defined('HHVM_VERSION')) {
+            $phpVersion = 'HHVM ' . HHVM_VERSION;
+        } else {
+            $phpVersion = 'PHP ' . PHP_MAJOR_VERSION . '.' . PHP_MINOR_VERSION . '.' . PHP_RELEASE_VERSION;
+        }
+
         $headers = array(
             sprintf(
-                'User-Agent: Composer/%s (%s; %s; PHP %s.%s.%s)',
+                'User-Agent: Composer/%s (%s; %s; %s)',
                 Composer::VERSION === '@package_version@' ? 'source' : Composer::VERSION,
                 php_uname('s'),
                 php_uname('r'),
-                PHP_MAJOR_VERSION,
-                PHP_MINOR_VERSION,
-                PHP_RELEASE_VERSION
+                $phpVersion
             )
         );
 
diff --git a/vendor/composer/composer/src/Composer/Util/Svn.php b/vendor/composer/composer/src/Composer/Util/Svn.php
index 510b45d..4949aa2 100644
--- a/vendor/composer/composer/src/Composer/Util/Svn.php
+++ b/vendor/composer/composer/src/Composer/Util/Svn.php
@@ -12,6 +12,7 @@
 
 namespace Composer\Util;
 
+use Composer\Config;
 use Composer\IO\IOInterface;
 
 /**
@@ -58,17 +59,30 @@ class Svn
     protected $qtyAuthTries = 0;
 
     /**
+     * @var \Composer\Config
+     */
+    protected $config;
+
+    /**
      * @param string                   $url
      * @param \Composer\IO\IOInterface $io
+     * @param Config                   $config
      * @param ProcessExecutor          $process
      */
-    public function __construct($url, IOInterface $io, ProcessExecutor $process = null)
+    public function __construct($url, IOInterface $io, Config $config, ProcessExecutor $process = null)
     {
         $this->url = $url;
         $this->io  = $io;
+        $this->config = $config;
         $this->process = $process ?: new ProcessExecutor;
     }
 
+    public static function cleanEnv()
+    {
+        // clean up env for OSX, see https://github.com/composer/composer/issues/2146#issuecomment-35478940
+        putenv("DYLD_LIBRARY_PATH");
+    }
+
     /**
      * Execute an SVN command and try to fix up the process with credentials
      * if necessary.
@@ -117,17 +131,12 @@ class Svn
             throw new \RuntimeException($output);
         }
 
-        // no auth supported for non interactive calls
-        if (!$this->io->isInteractive()) {
-            throw new \RuntimeException(
-                'can not ask for authentication in non interactive mode ('.$output.')'
-            );
+        if (!$this->hasAuth()) {
+            $this->doAuthDance();
         }
 
         // try to authenticate if maximum quantity of tries not reached
-        if ($this->qtyAuthTries++ < self::MAX_QTY_AUTH_TRIES || !$this->hasAuth()) {
-            $this->doAuthDance();
-
+        if ($this->qtyAuthTries++ < self::MAX_QTY_AUTH_TRIES) {
             // restart the process
             return $this->execute($command, $url, $cwd, $path, $verbose);
         }
@@ -138,12 +147,28 @@ class Svn
     }
 
     /**
+     * @param boolean $cacheCredentials
+     */
+    public function setCacheCredentials($cacheCredentials)
+    {
+        $this->cacheCredentials = $cacheCredentials;
+    }
+
+    /**
      * Repositories requests credentials, let's put them in.
      *
      * @return \Composer\Util\Svn
+     * @throws \RuntimeException
      */
     protected function doAuthDance()
     {
+        // cannot ask for credentials in non interactive mode
+        if (!$this->io->isInteractive()) {
+            throw new \RuntimeException(
+                'can not ask for authentication in non interactive mode'
+            );
+        }
+
         $this->io->write("The Subversion server ({$this->url}) requested credentials:");
 
         $this->hasAuth = true;
@@ -170,11 +195,11 @@ class Svn
             $cmd,
             '--non-interactive ',
             $this->getCredentialString(),
-            escapeshellarg($url)
+            ProcessExecutor::escape($url)
         );
 
         if ($path) {
-            $cmd .= ' ' . escapeshellarg($path);
+            $cmd .= ' ' . ProcessExecutor::escape($path);
         }
 
         return $cmd;
@@ -196,8 +221,8 @@ class Svn
         return sprintf(
             ' %s--username %s --password %s ',
             $this->getAuthCache(),
-            escapeshellarg($this->getUsername()),
-            escapeshellarg($this->getPassword())
+            ProcessExecutor::escape($this->getUsername()),
+            ProcessExecutor::escape($this->getPassword())
         );
     }
 
@@ -242,17 +267,11 @@ class Svn
             return $this->hasAuth;
         }
 
-        $uri = parse_url($this->url);
-        if (empty($uri['user'])) {
-            return $this->hasAuth = false;
-        }
-
-        $this->credentials['username'] = $uri['user'];
-        if (!empty($uri['pass'])) {
-            $this->credentials['password'] = $uri['pass'];
+        if (false === $this->createAuthFromConfig()) {
+            $this->createAuthFromUrl();
         }
 
-        return $this->hasAuth = true;
+        return $this->hasAuth;
     }
 
     /**
@@ -264,4 +283,48 @@ class Svn
     {
         return $this->cacheCredentials ? '' : '--no-auth-cache ';
     }
+
+    /**
+     * Create the auth params from the configuration file.
+     *
+     * @return bool
+     */
+    private function createAuthFromConfig()
+    {
+        if (!$this->config->has('http-basic')) {
+            return $this->hasAuth = false;
+        }
+
+        $authConfig = $this->config->get('http-basic');
+
+        $host = parse_url($this->url, PHP_URL_HOST);
+        if (isset($authConfig[$host])) {
+            $this->credentials['username'] = $authConfig[$host]['username'];
+            $this->credentials['password'] = $authConfig[$host]['password'];
+
+            return $this->hasAuth = true;
+        }
+
+        return $this->hasAuth = false;
+    }
+
+    /**
+     * Create the auth params from the url
+     *
+     * @return bool
+     */
+    private function createAuthFromUrl()
+    {
+        $uri = parse_url($this->url);
+        if (empty($uri['user'])) {
+            return $this->hasAuth = false;
+        }
+
+        $this->credentials['username'] = $uri['user'];
+        if (!empty($uri['pass'])) {
+            $this->credentials['password'] = $uri['pass'];
+        }
+
+        return $this->hasAuth = true;
+    }
 }
diff --git a/vendor/composer/composer/tests/Composer/Test/AllFunctionalTest.php b/vendor/composer/composer/tests/Composer/Test/AllFunctionalTest.php
index 03ec430..4a23c57 100644
--- a/vendor/composer/composer/tests/Composer/Test/AllFunctionalTest.php
+++ b/vendor/composer/composer/tests/Composer/Test/AllFunctionalTest.php
@@ -60,6 +60,10 @@ class AllFunctionalTest extends \PHPUnit_Framework_TestCase
 
     public function testBuildPhar()
     {
+        if (defined('HHVM_VERSION')) {
+            $this->markTestSkipped('Building the phar does not work on HHVM.');
+        }
+
         $fs = new Filesystem;
         $fs->removeDirectory(dirname(self::$pharPath));
         $fs->ensureDirectoryExists(dirname(self::$pharPath));
@@ -124,7 +128,7 @@ class AllFunctionalTest extends \PHPUnit_Framework_TestCase
         $testDir = sys_get_temp_dir().'/composer_functional_test'.uniqid(mt_rand(), true);
         $this->testDir = $testDir;
         $varRegex = '#%([a-zA-Z_-]+)%#';
-        $variableReplacer = function($match) use (&$data, $testDir) {
+        $variableReplacer = function ($match) use (&$data, $testDir) {
             list(, $var) = $match;
 
             switch ($var) {
diff --git a/vendor/composer/composer/tests/Composer/Test/ApplicationTest.php b/vendor/composer/composer/tests/Composer/Test/ApplicationTest.php
new file mode 100644
index 0000000..c990226
--- /dev/null
+++ b/vendor/composer/composer/tests/Composer/Test/ApplicationTest.php
@@ -0,0 +1,76 @@
+<?php
+
+/*
+ * This file is part of Composer.
+ *
+ * (c) Nils Adermann <naderman@naderman.de>
+ *     Jordi Boggiano <j.boggiano@seld.be>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Composer\Test;
+
+use Composer\Console\Application;
+use Composer\TestCase;
+
+class ApplicationTest extends TestCase
+{
+    public function testDevWarning()
+    {
+        $application = new Application;
+
+        $inputMock = $this->getMock('Symfony\Component\Console\Input\InputInterface');
+        $outputMock = $this->getMock('Symfony\Component\Console\Output\OutputInterface');
+
+        $inputMock->expects($this->once())
+            ->method('getFirstArgument')
+            ->will($this->returnValue('list'));
+
+        $outputMock->expects($this->once())
+            ->method("writeln")
+            ->with($this->equalTo(sprintf('<warning>Warning: This development build of composer is over 30 days old. It is recommended to update it by running "%s self-update" to get the latest version.</warning>', $_SERVER['PHP_SELF'])));
+
+        if (!defined('COMPOSER_DEV_WARNING_TIME')) {
+            define('COMPOSER_DEV_WARNING_TIME', time() - 1);
+        }
+
+        $this->setExpectedException('RuntimeException');
+        $application->doRun($inputMock, $outputMock);
+    }
+
+    public function ensureNoDevWarning($command)
+    {
+        $application = new Application;
+
+        $application->add(new \Composer\Command\SelfUpdateCommand);
+
+        $inputMock = $this->getMock('Symfony\Component\Console\Input\InputInterface');
+        $outputMock = $this->getMock('Symfony\Component\Console\Output\OutputInterface');
+
+        $inputMock->expects($this->once())
+            ->method('getFirstArgument')
+            ->will($this->returnValue($command));
+
+        $outputMock->expects($this->never())
+            ->method("writeln");
+
+        if (!defined('COMPOSER_DEV_WARNING_TIME')) {
+            define('COMPOSER_DEV_WARNING_TIME', time() - 1);
+        }
+
+        $this->setExpectedException('RuntimeException');
+        $application->doRun($inputMock, $outputMock);
+    }
+
+    public function testDevWarningPrevented()
+    {
+        $this->ensureNoDevWarning('self-update');
+    }
+
+    public function testDevWarningPreventedAlias()
+    {
+        $this->ensureNoDevWarning('self-up');
+    }
+}
diff --git a/vendor/composer/composer/tests/Composer/Test/Autoload/AutoloadGeneratorTest.php b/vendor/composer/composer/tests/Composer/Test/Autoload/AutoloadGeneratorTest.php
index 499f4de..7c4ddcc 100644
--- a/vendor/composer/composer/tests/Composer/Test/Autoload/AutoloadGeneratorTest.php
+++ b/vendor/composer/composer/tests/Composer/Test/Autoload/AutoloadGeneratorTest.php
@@ -19,16 +19,52 @@ use Composer\Package\AliasPackage;
 use Composer\Package\Package;
 use Composer\TestCase;
 use Composer\Script\ScriptEvents;
+use Composer\Repository\InstalledRepositoryInterface;
+use Composer\Installer\InstallationManager;
+use Composer\Config;
+use Composer\EventDispatcher\EventDispatcher;
+use PHPUnit_Framework_MockObject_MockObject as MockObject;
 
 class AutoloadGeneratorTest extends TestCase
 {
+    /**
+     * @var string
+     */
     public $vendorDir;
+
+    /**
+     * @var Config|MockObject
+     */
     private $config;
+
+    /**
+     * @var string
+     */
     private $workingDir;
+
+    /**
+     * @var InstallationManager|MockObject
+     */
     private $im;
+
+    /**
+     * @var InstalledRepositoryInterface|MockObject
+     */
     private $repository;
+
+    /**
+     * @var AutoloadGenerator
+     */
     private $generator;
+
+    /**
+     * @var Filesystem
+     */
     private $fs;
+
+    /**
+     * @var EventDispatcher|MockObject
+     */
     private $eventDispatcher;
 
     protected function setUp()
@@ -111,17 +147,19 @@ class AutoloadGeneratorTest extends TestCase
             ->will($this->returnValue(array()));
 
         $this->fs->ensureDirectoryExists($this->workingDir.'/composer');
-        $this->fs->ensureDirectoryExists($this->workingDir.'/src');
+        $this->fs->ensureDirectoryExists($this->workingDir.'/src/Lala');
         $this->fs->ensureDirectoryExists($this->workingDir.'/lib');
+        file_put_contents($this->workingDir.'/src/Lala/ClassMapMain.php', '<?php namespace Lala; class ClassMapMain {}');
 
         $this->fs->ensureDirectoryExists($this->workingDir.'/src-fruit');
         $this->fs->ensureDirectoryExists($this->workingDir.'/src-cake');
         $this->fs->ensureDirectoryExists($this->workingDir.'/lib-cake');
+        file_put_contents($this->workingDir.'/src-cake/ClassMapBar.php', '<?php namespace Acme\Cake; class ClassMapBar {}');
 
         $this->fs->ensureDirectoryExists($this->workingDir.'/composersrc');
         file_put_contents($this->workingDir.'/composersrc/foo.php', '<?php class ClassMapFoo {}');
 
-        $this->generator->dump($this->config, $this->repository, $package, $this->im, 'composer', false, '_1');
+        $this->generator->dump($this->config, $this->repository, $package, $this->im, 'composer', true, '_1');
 
         // Assert that autoload_namespaces.php was correctly generated.
         $this->assertAutoloadFiles('main', $this->vendorDir.'/composer');
@@ -133,6 +171,77 @@ class AutoloadGeneratorTest extends TestCase
         $this->assertAutoloadFiles('classmap', $this->vendorDir.'/composer', 'classmap');
     }
 
+    public function testMainPackageDevAutoloading()
+    {
+        $package = new Package('a', '1.0', '1.0');
+        $package->setAutoload(array(
+            'psr-0' => array(
+                'Main' => 'src/',
+            ),
+        ));
+        $package->setDevAutoload(array(
+            'files' => array('devfiles/foo.php'),
+            'psr-0' => array(
+                'Main' => 'tests/'
+            ),
+        ));
+
+        $this->repository->expects($this->once())
+            ->method('getCanonicalPackages')
+            ->will($this->returnValue(array()));
+
+        $this->fs->ensureDirectoryExists($this->workingDir.'/composer');
+        $this->fs->ensureDirectoryExists($this->workingDir.'/src/Main');
+        file_put_contents($this->workingDir.'/src/Main/ClassMain.php', '<?php namespace Main; class ClassMain {}');
+
+        $this->fs->ensureDirectoryExists($this->workingDir.'/devfiles');
+        file_put_contents($this->workingDir.'/devfiles/foo.php', '<?php function foo() { echo "foo"; }');
+
+        // generate autoload files with the dev mode set to true
+        $this->generator->setDevMode(true);
+        $this->generator->dump($this->config, $this->repository, $package, $this->im, 'composer', true, '_1');
+
+        // check standard autoload
+        $this->assertAutoloadFiles('main5', $this->vendorDir.'/composer');
+        $this->assertAutoloadFiles('classmap7', $this->vendorDir.'/composer', 'classmap');
+
+        // make sure dev autoload is correctly dumped
+        $this->assertAutoloadFiles('files2', $this->vendorDir.'/composer', 'files');
+    }
+
+    public function testMainPackageDevAutoloadingDisabledByDefault()
+    {
+        $package = new Package('a', '1.0', '1.0');
+        $package->setAutoload(array(
+            'psr-0' => array(
+                'Main' => 'src/',
+            ),
+        ));
+        $package->setDevAutoload(array(
+            'files' => array('devfiles/foo.php'),
+        ));
+
+        $this->repository->expects($this->once())
+            ->method('getCanonicalPackages')
+            ->will($this->returnValue(array()));
+
+        $this->fs->ensureDirectoryExists($this->workingDir.'/composer');
+        $this->fs->ensureDirectoryExists($this->workingDir.'/src/Main');
+        file_put_contents($this->workingDir.'/src/Main/ClassMain.php', '<?php namespace Main; class ClassMain {}');
+
+        $this->fs->ensureDirectoryExists($this->workingDir.'/devfiles');
+        file_put_contents($this->workingDir.'/devfiles/foo.php', '<?php function foo() { echo "foo"; }');
+
+        $this->generator->dump($this->config, $this->repository, $package, $this->im, 'composer', true, '_1');
+
+        // check standard autoload
+        $this->assertAutoloadFiles('main4', $this->vendorDir.'/composer');
+        $this->assertAutoloadFiles('classmap7', $this->vendorDir.'/composer', 'classmap');
+
+        // make sure dev autoload is disabled when dev mode is set to false
+        $this->assertFalse(is_file($this->vendorDir.'/composer/autoload_files.php'));
+    }
+
     public function testVendorDirSameAsWorkingDir()
     {
         $this->vendorDir = $this->workingDir;
@@ -198,10 +307,6 @@ class AutoloadGeneratorTest extends TestCase
         $package = new Package('a', '1.0', '1.0');
         $package->setAutoload(array(
             'psr-0' => array('Main\\Foo' => '', 'Main\\Bar' => ''),
-            'psr-4' => array(
-                'Acme\Fruit\\' => 'src-fruit/',
-                'Acme\Cake\\' => array('src-cake/', 'lib-cake/'),
-            ),
             'classmap' => array('Main/Foo/src', 'lib'),
             'files' => array('foo.php', 'Main/Foo/bar.php'),
         ));
@@ -479,17 +584,31 @@ class AutoloadGeneratorTest extends TestCase
         $this->assertTrue(function_exists('testFilesAutoloadOrderByDependencyRoot'));
     }
 
+    /**
+     * Test that PSR-0 and PSR-4 mappings are processed in the correct order for
+     * autoloading and for classmap generation:
+     * - The main package has priority over other packages.
+     * - Longer namespaces have priority over shorter namespaces.
+     */
     public function testOverrideVendorsAutoloading()
     {
-        $package = new Package('z', '1.0', '1.0');
-        $package->setAutoload(array('psr-0' => array('A\\B' => $this->workingDir.'/lib'), 'classmap' => array($this->workingDir.'/src')));
-        $package->setRequires(array(new Link('z', 'a/a')));
+        $mainPackage = new Package('z', '1.0', '1.0');
+        $mainPackage->setAutoload(array(
+            'psr-0' => array('A\\B' => $this->workingDir.'/lib'),
+            'classmap' => array($this->workingDir.'/src')
+        ));
+        $mainPackage->setRequires(array(new Link('z', 'a/a')));
 
         $packages = array();
         $packages[] = $a = new Package('a/a', '1.0', '1.0');
         $packages[] = $b = new Package('b/b', '1.0', '1.0');
-        $a->setAutoload(array('psr-0' => array('A' => 'src/', 'A\\B' => 'lib/'), 'classmap' => array('classmap')));
-        $b->setAutoload(array('psr-0' => array('B\\Sub\\Name' => 'src/')));
+        $a->setAutoload(array(
+            'psr-0' => array('A' => 'src/', 'A\\B' => 'lib/'),
+            'classmap' => array('classmap'),
+        ));
+        $b->setAutoload(array(
+            'psr-0' => array('B\\Sub\\Name' => 'src/'),
+        ));
 
         $this->repository->expects($this->once())
             ->method('getCanonicalPackages')
@@ -502,8 +621,12 @@ class AutoloadGeneratorTest extends TestCase
         $this->fs->ensureDirectoryExists($this->vendorDir.'/a/a/src');
         $this->fs->ensureDirectoryExists($this->vendorDir.'/a/a/lib/A/B');
         $this->fs->ensureDirectoryExists($this->vendorDir.'/b/b/src');
+
+        // Define the classes A\B\C and Foo\Bar in the main package.
         file_put_contents($this->workingDir.'/lib/A/B/C.php', '<?php namespace A\\B; class C {}');
         file_put_contents($this->workingDir.'/src/classes.php', '<?php namespace Foo; class Bar {}');
+
+        // Define the same two classes in the package a/a.
         file_put_contents($this->vendorDir.'/a/a/lib/A/B/C.php', '<?php namespace A\\B; class C {}');
         file_put_contents($this->vendorDir.'/a/a/classmap/classes.php', '<?php namespace Foo; class Bar {}');
 
@@ -552,7 +675,7 @@ return array(
 
 EOF;
 
-        $this->generator->dump($this->config, $this->repository, $package, $this->im, 'composer', true, '_9');
+        $this->generator->dump($this->config, $this->repository, $mainPackage, $this->im, 'composer', true, '_9');
         $this->assertEquals($expectedNamespace, file_get_contents($this->vendorDir.'/composer/autoload_namespaces.php'));
         $this->assertEquals($expectedPsr4, file_get_contents($this->vendorDir.'/composer/autoload_psr4.php'));
         $this->assertEquals($expectedClassmap, file_get_contents($this->vendorDir.'/composer/autoload_classmap.php'));
diff --git a/vendor/composer/composer/tests/Composer/Test/Autoload/ClassLoaderTest.php b/vendor/composer/composer/tests/Composer/Test/Autoload/ClassLoaderTest.php
index 0b9c193..5077210 100644
--- a/vendor/composer/composer/tests/Composer/Test/Autoload/ClassLoaderTest.php
+++ b/vendor/composer/composer/tests/Composer/Test/Autoload/ClassLoaderTest.php
@@ -14,11 +14,11 @@ class ClassLoaderTest extends \PHPUnit_Framework_TestCase
      *
      * @dataProvider getLoadClassTests
      *
-     * @param string $class The fully-qualified class name to test, without preceding namespace separator.
-     * @param bool $prependSeparator Whether to call ->loadClass() with a class name with preceding
-     *                               namespace separator, as it happens in PHP 5.3.0 - 5.3.2. See https://bugs.php.net/50731
+     * @param string $class            The fully-qualified class name to test, without preceding namespace separator.
+     * @param bool   $prependSeparator Whether to call ->loadClass() with a class name with preceding
+     *                                 namespace separator, as it happens in PHP 5.3.0 - 5.3.2. See https://bugs.php.net/50731
      */
-    public function testLoadClass($class, $prependSeparator = FALSE)
+    public function testLoadClass($class, $prependSeparator = false)
     {
         $loader = new ClassLoader();
         $loader->add('Namespaced\\', __DIR__ . '/Fixtures');
@@ -55,4 +55,13 @@ class ClassLoaderTest extends \PHPUnit_Framework_TestCase
             array('ShinyVendor\\ShinyPackage\\SubNamespace\\Bar', true),
         );
     }
+
+    /**
+     * getPrefixes method should return empty array if ClassLoader does not have any psr-0 configuration
+     */
+    public function testGetPrefixesWithNoPSR0Configuration()
+    {
+        $loader = new ClassLoader();
+        $this->assertEmpty($loader->getPrefixes());
+    }
 }
diff --git a/vendor/composer/composer/tests/Composer/Test/Autoload/ClassMapGeneratorTest.php b/vendor/composer/composer/tests/Composer/Test/Autoload/ClassMapGeneratorTest.php
index ddadc89..1ef68d4 100644
--- a/vendor/composer/composer/tests/Composer/Test/Autoload/ClassMapGeneratorTest.php
+++ b/vendor/composer/composer/tests/Composer/Test/Autoload/ClassMapGeneratorTest.php
@@ -12,6 +12,8 @@
 namespace Composer\Test\Autoload;
 
 use Composer\Autoload\ClassMapGenerator;
+use Symfony\Component\Finder\Finder;
+use Composer\Util\Filesystem;
 
 class ClassMapGeneratorTest extends \PHPUnit_Framework_TestCase
 {
@@ -78,11 +80,9 @@ class ClassMapGeneratorTest extends \PHPUnit_Framework_TestCase
 
     public function testCreateMapFinderSupport()
     {
-        if (!class_exists('Symfony\\Component\\Finder\\Finder')) {
-            $this->markTestSkipped('Finder component is not available');
-        }
+        $this->checkIfFinderIsAvailable();
 
-        $finder = new \Symfony\Component\Finder\Finder();
+        $finder = new Finder();
         $finder->files()->in(__DIR__ . '/Fixtures/beta/NamespaceCollision');
 
         $this->assertEqualsNormalized(array(
@@ -104,6 +104,92 @@ class ClassMapGeneratorTest extends \PHPUnit_Framework_TestCase
         $find->invoke(null, __DIR__.'/no-file');
     }
 
+    public function testAmbiguousReference()
+    {
+        $this->checkIfFinderIsAvailable();
+
+        $tempDir = sys_get_temp_dir().'/ComposerTestAmbiguousRefs';
+        if (!is_dir($tempDir.'/other')) {
+            mkdir($tempDir.'/other', 0777, true);
+        }
+
+        $finder = new Finder();
+        $finder->files()->in($tempDir);
+
+        $io = $this->getMockBuilder('Composer\IO\ConsoleIO')
+            ->disableOriginalConstructor()
+            ->getMock();
+
+        file_put_contents($tempDir.'/A.php', "<?php\nclass A {}");
+        file_put_contents($tempDir.'/other/A.php', "<?php\nclass A {}");
+
+        $a = realpath($tempDir.'/A.php');
+        $b = realpath($tempDir.'/other/A.php');
+        $msg = '';
+
+        $io->expects($this->once())
+            ->method('write')
+            ->will($this->returnCallback(function ($text) use (&$msg) {
+                $msg = $text;
+            }));
+
+        $messages = array(
+            '<warning>Warning: Ambiguous class resolution, "A" was found in both "'.$a.'" and "'.$b.'", the first will be used.</warning>',
+            '<warning>Warning: Ambiguous class resolution, "A" was found in both "'.$b.'" and "'.$a.'", the first will be used.</warning>',
+        );
+
+        ClassMapGenerator::createMap($finder, null, $io);
+
+        $this->assertTrue(in_array($msg, $messages, true), $msg.' not found in expected messages ('.var_export($messages, true).')');
+
+        $fs = new Filesystem();
+        $fs->removeDirectory($tempDir);
+    }
+
+    /**
+     * If one file has a class or interface defined more than once,
+     * an ambiguous reference warning should not be produced
+     */
+    public function testUnambiguousReference()
+    {
+        $tempDir = sys_get_temp_dir().'/ComposerTestUnambiguousRefs';
+        if (!is_dir($tempDir)) {
+            mkdir($tempDir, 0777, true);
+        }
+
+        file_put_contents($tempDir.'/A.php', "<?php\nclass A {}");
+
+        file_put_contents(
+            $tempDir.'/B.php',
+            "<?php
+                if (true) {
+                    interface B {}
+                } else {
+                    interface B extends Iterator {}
+                }
+            "
+        );
+
+        foreach (array('test', 'fixture', 'example') as $keyword) {
+            if (!is_dir($tempDir.'/'.$keyword)) {
+                mkdir($tempDir.'/'.$keyword, 0777, true);
+            }
+            file_put_contents($tempDir.'/'.$keyword.'/A.php', "<?php\nclass A {}");
+        }
+
+        $io = $this->getMockBuilder('Composer\IO\ConsoleIO')
+            ->disableOriginalConstructor()
+            ->getMock();
+
+        $io->expects($this->never())
+            ->method('write');
+
+        ClassMapGenerator::createMap($tempDir, null, $io);
+
+        $fs = new Filesystem();
+        $fs->removeDirectory($tempDir);
+    }
+
     /**
      * @expectedException \RuntimeException
      * @expectedExceptionMessage Could not scan for classes inside
@@ -123,4 +209,11 @@ class ClassMapGeneratorTest extends \PHPUnit_Framework_TestCase
         }
         $this->assertEquals($expected, $actual, $message);
     }
+
+    private function checkIfFinderIsAvailable()
+    {
+        if (!class_exists('Symfony\\Component\\Finder\\Finder')) {
+            $this->markTestSkipped('Finder component is not available');
+        }
+    }
 }
diff --git a/vendor/composer/composer/tests/Composer/Test/Autoload/Fixtures/autoload_classmap.php b/vendor/composer/composer/tests/Composer/Test/Autoload/Fixtures/autoload_classmap.php
index b7b2a96..2fe8ee0 100644
--- a/vendor/composer/composer/tests/Composer/Test/Autoload/Fixtures/autoload_classmap.php
+++ b/vendor/composer/composer/tests/Composer/Test/Autoload/Fixtures/autoload_classmap.php
@@ -6,5 +6,7 @@ $vendorDir = dirname(dirname(__FILE__));
 $baseDir = dirname($vendorDir);
 
 return array(
+    'Acme\\Cake\\ClassMapBar' => $baseDir . '/src-cake/ClassMapBar.php',
     'ClassMapFoo' => $baseDir . '/composersrc/foo.php',
+    'Lala\\ClassMapMain' => $baseDir . '/src/Lala/ClassMapMain.php',
 );
diff --git a/vendor/composer/composer/tests/Composer/Test/Autoload/Fixtures/autoload_classmap7.php b/vendor/composer/composer/tests/Composer/Test/Autoload/Fixtures/autoload_classmap7.php
new file mode 100644
index 0000000..5768726
--- /dev/null
+++ b/vendor/composer/composer/tests/Composer/Test/Autoload/Fixtures/autoload_classmap7.php
@@ -0,0 +1,10 @@
+<?php
+
+// autoload_classmap.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = dirname($vendorDir);
+
+return array(
+    'Main\\ClassMain' => $baseDir . '/src/Main/ClassMain.php',
+);
diff --git a/vendor/composer/composer/tests/Composer/Test/Autoload/Fixtures/autoload_files2.php b/vendor/composer/composer/tests/Composer/Test/Autoload/Fixtures/autoload_files2.php
new file mode 100644
index 0000000..13cb9ec
--- /dev/null
+++ b/vendor/composer/composer/tests/Composer/Test/Autoload/Fixtures/autoload_files2.php
@@ -0,0 +1,10 @@
+<?php
+
+// autoload_files.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = dirname($vendorDir);
+
+return array(
+    $baseDir . '/devfiles/foo.php',
+);
diff --git a/vendor/composer/composer/tests/Composer/Test/Autoload/Fixtures/autoload_files_functions.php b/vendor/composer/composer/tests/Composer/Test/Autoload/Fixtures/autoload_files_functions.php
index 0af7f86..6b6494b 100644
--- a/vendor/composer/composer/tests/Composer/Test/Autoload/Fixtures/autoload_files_functions.php
+++ b/vendor/composer/composer/tests/Composer/Test/Autoload/Fixtures/autoload_files_functions.php
@@ -9,6 +9,6 @@ return array(
     $vendorDir . '/a/a/test.php',
     $vendorDir . '/b/b/test2.php',
     $vendorDir . '/c/c/foo/bar/test3.php',
-    $baseDir . '/root.php',
     $vendorDir . '/c/c/foo/bar/test4.php',
+    $baseDir . '/root.php',
 );
diff --git a/vendor/composer/composer/tests/Composer/Test/Autoload/Fixtures/autoload_main4.php b/vendor/composer/composer/tests/Composer/Test/Autoload/Fixtures/autoload_main4.php
new file mode 100644
index 0000000..e6032e6
--- /dev/null
+++ b/vendor/composer/composer/tests/Composer/Test/Autoload/Fixtures/autoload_main4.php
@@ -0,0 +1,10 @@
+<?php
+
+// autoload_namespaces.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = dirname($vendorDir);
+
+return array(
+    'Main' => array($baseDir . '/src'),
+);
diff --git a/vendor/composer/composer/tests/Composer/Test/Autoload/Fixtures/autoload_main5.php b/vendor/composer/composer/tests/Composer/Test/Autoload/Fixtures/autoload_main5.php
new file mode 100644
index 0000000..15cb262
--- /dev/null
+++ b/vendor/composer/composer/tests/Composer/Test/Autoload/Fixtures/autoload_main5.php
@@ -0,0 +1,10 @@
+<?php
+
+// autoload_namespaces.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = dirname($vendorDir);
+
+return array(
+    'Main' => array($baseDir . '/src', $baseDir . '/tests'),
+);
diff --git a/vendor/composer/composer/tests/Composer/Test/Autoload/Fixtures/autoload_real_files_by_dependency.php b/vendor/composer/composer/tests/Composer/Test/Autoload/Fixtures/autoload_real_files_by_dependency.php
index e58e8d2..0830705 100644
--- a/vendor/composer/composer/tests/Composer/Test/Autoload/Fixtures/autoload_real_files_by_dependency.php
+++ b/vendor/composer/composer/tests/Composer/Test/Autoload/Fixtures/autoload_real_files_by_dependency.php
@@ -23,9 +23,6 @@ class ComposerAutoloaderInitFilesAutoloadOrder
         self::$loader = $loader = new \Composer\Autoload\ClassLoader();
         spl_autoload_unregister(array('ComposerAutoloaderInitFilesAutoloadOrder', 'loadClassLoader'));
 
-        $vendorDir = dirname(__DIR__);
-        $baseDir = dirname($vendorDir);
-
         $map = require __DIR__ . '/autoload_namespaces.php';
         foreach ($map as $namespace => $path) {
             $loader->set($namespace, $path);
@@ -45,9 +42,14 @@ class ComposerAutoloaderInitFilesAutoloadOrder
 
         $includeFiles = require __DIR__ . '/autoload_files.php';
         foreach ($includeFiles as $file) {
-            require $file;
+            composerRequireFilesAutoloadOrder($file);
         }
 
         return $loader;
     }
 }
+
+function composerRequireFilesAutoloadOrder($file)
+{
+    require $file;
+}
diff --git a/vendor/composer/composer/tests/Composer/Test/Autoload/Fixtures/autoload_real_functions.php b/vendor/composer/composer/tests/Composer/Test/Autoload/Fixtures/autoload_real_functions.php
index a92e664..1c01549 100644
--- a/vendor/composer/composer/tests/Composer/Test/Autoload/Fixtures/autoload_real_functions.php
+++ b/vendor/composer/composer/tests/Composer/Test/Autoload/Fixtures/autoload_real_functions.php
@@ -23,9 +23,6 @@ class ComposerAutoloaderInitFilesAutoload
         self::$loader = $loader = new \Composer\Autoload\ClassLoader();
         spl_autoload_unregister(array('ComposerAutoloaderInitFilesAutoload', 'loadClassLoader'));
 
-        $vendorDir = dirname(__DIR__);
-        $baseDir = dirname($vendorDir);
-
         $map = require __DIR__ . '/autoload_namespaces.php';
         foreach ($map as $namespace => $path) {
             $loader->set($namespace, $path);
@@ -45,9 +42,14 @@ class ComposerAutoloaderInitFilesAutoload
 
         $includeFiles = require __DIR__ . '/autoload_files.php';
         foreach ($includeFiles as $file) {
-            require $file;
+            composerRequireFilesAutoload($file);
         }
 
         return $loader;
     }
 }
+
+function composerRequireFilesAutoload($file)
+{
+    require $file;
+}
diff --git a/vendor/composer/composer/tests/Composer/Test/Autoload/Fixtures/autoload_real_include_path.php b/vendor/composer/composer/tests/Composer/Test/Autoload/Fixtures/autoload_real_include_path.php
index e72ea10..65ba681 100644
--- a/vendor/composer/composer/tests/Composer/Test/Autoload/Fixtures/autoload_real_include_path.php
+++ b/vendor/composer/composer/tests/Composer/Test/Autoload/Fixtures/autoload_real_include_path.php
@@ -23,9 +23,6 @@ class ComposerAutoloaderInitIncludePath
         self::$loader = $loader = new \Composer\Autoload\ClassLoader();
         spl_autoload_unregister(array('ComposerAutoloaderInitIncludePath', 'loadClassLoader'));
 
-        $vendorDir = dirname(__DIR__);
-        $baseDir = dirname($vendorDir);
-
         $map = require __DIR__ . '/autoload_namespaces.php';
         foreach ($map as $namespace => $path) {
             $loader->set($namespace, $path);
@@ -67,3 +64,8 @@ class ComposerAutoloaderInitIncludePath
         }
     }
 }
+
+function composerRequireIncludePath($file)
+{
+    require $file;
+}
diff --git a/vendor/composer/composer/tests/Composer/Test/Autoload/Fixtures/autoload_real_target_dir.php b/vendor/composer/composer/tests/Composer/Test/Autoload/Fixtures/autoload_real_target_dir.php
index 4a6259d..dc786f7 100644
--- a/vendor/composer/composer/tests/Composer/Test/Autoload/Fixtures/autoload_real_target_dir.php
+++ b/vendor/composer/composer/tests/Composer/Test/Autoload/Fixtures/autoload_real_target_dir.php
@@ -23,9 +23,6 @@ class ComposerAutoloaderInitTargetDir
         self::$loader = $loader = new \Composer\Autoload\ClassLoader();
         spl_autoload_unregister(array('ComposerAutoloaderInitTargetDir', 'loadClassLoader'));
 
-        $vendorDir = dirname(__DIR__);
-        $baseDir = dirname($vendorDir);
-
         $map = require __DIR__ . '/autoload_namespaces.php';
         foreach ($map as $namespace => $path) {
             $loader->set($namespace, $path);
@@ -47,7 +44,7 @@ class ComposerAutoloaderInitTargetDir
 
         $includeFiles = require __DIR__ . '/autoload_files.php';
         foreach ($includeFiles as $file) {
-            require $file;
+            composerRequireTargetDir($file);
         }
 
         return $loader;
@@ -71,3 +68,8 @@ class ComposerAutoloaderInitTargetDir
         }
     }
 }
+
+function composerRequireTargetDir($file)
+{
+    require $file;
+}
diff --git a/vendor/composer/composer/tests/Composer/Test/Autoload/Fixtures/classmap/StripNoise.php b/vendor/composer/composer/tests/Composer/Test/Autoload/Fixtures/classmap/StripNoise.php
index 3fe5389..4c34408 100644
--- a/vendor/composer/composer/tests/Composer/Test/Autoload/Fixtures/classmap/StripNoise.php
+++ b/vendor/composer/composer/tests/Composer/Test/Autoload/Fixtures/classmap/StripNoise.php
@@ -15,12 +15,30 @@ class Fail2
 
 }
 A
-. <<<'TEST'
+. <<<  AB
 class Fail3
 {
 
 }
-TEST;
+AB
+. <<<'TEST'
+class Fail4
+{
+
+}
+TEST
+. <<< 'ANOTHER'
+class Fail5
+{
+
+}
+ANOTHER
+. <<<	'ONEMORE'
+class Fail6
+{
+
+}
+ONEMORE;
     }
 
     public function test2()
diff --git a/vendor/composer/composer/tests/Composer/Test/Autoload/Fixtures/template/notphp.inc b/vendor/composer/composer/tests/Composer/Test/Autoload/Fixtures/template/notphp.inc
new file mode 100644
index 0000000..2f1f873
--- /dev/null
+++ b/vendor/composer/composer/tests/Composer/Test/Autoload/Fixtures/template/notphp.inc
@@ -0,0 +1,11 @@
+/**
+ * AJAX interface for remembering user preferences set on the fly
+ *
+ * Match /preferences/ajax/
+ */
+'preferences_ajax' => array
+(
+    'handler' => array ('midgard_admin_asgard_handler_preferences', 'ajax'),
+    'fixed_args' => array('preferences', 'ajax'),
+    'variable_args' => 0,
+),
diff --git a/vendor/composer/composer/tests/Composer/Test/ComposerTest.php b/vendor/composer/composer/tests/Composer/Test/ComposerTest.php
index f667e88..df00c36 100644
--- a/vendor/composer/composer/tests/Composer/Test/ComposerTest.php
+++ b/vendor/composer/composer/tests/Composer/Test/ComposerTest.php
@@ -47,7 +47,8 @@ class ComposerTest extends TestCase
     public function testSetGetDownloadManager()
     {
         $composer = new Composer();
-        $manager = $this->getMock('Composer\Downloader\DownloadManager');
+        $io = $this->getMock('Composer\IO\IOInterface');
+        $manager = $this->getMock('Composer\Downloader\DownloadManager', array(), array($io));
         $composer->setDownloadManager($manager);
 
         $this->assertSame($manager, $composer->getDownloadManager());
diff --git a/vendor/composer/composer/tests/Composer/Test/Config/JsonConfigSourceTest.php b/vendor/composer/composer/tests/Composer/Test/Config/JsonConfigSourceTest.php
index d0b78f3..b7a3b59 100644
--- a/vendor/composer/composer/tests/Composer/Test/Config/JsonConfigSourceTest.php
+++ b/vendor/composer/composer/tests/Composer/Test/Config/JsonConfigSourceTest.php
@@ -48,7 +48,6 @@ class JsonConfigSourceTest extends \PHPUnit_Framework_TestCase
             $value,
             $this->fixturePath('addLink/'.$fixtureBasename.'.json'),
         );
-
     }
 
     /**
diff --git a/vendor/composer/composer/tests/Composer/Test/ConfigTest.php b/vendor/composer/composer/tests/Composer/Test/ConfigTest.php
index c2cf82c..521fb63 100644
--- a/vendor/composer/composer/tests/Composer/Test/ConfigTest.php
+++ b/vendor/composer/composer/tests/Composer/Test/ConfigTest.php
@@ -21,7 +21,7 @@ class ConfigTest extends \PHPUnit_Framework_TestCase
      */
     public function testAddPackagistRepository($expected, $localConfig, $systemConfig = null)
     {
-        $config = new Config();
+        $config = new Config(false);
         if ($systemConfig) {
             $config->merge(array('repositories' => $systemConfig));
         }
@@ -102,16 +102,28 @@ class ConfigTest extends \PHPUnit_Framework_TestCase
 
     public function testMergeGithubOauth()
     {
-        $config = new Config();
+        $config = new Config(false);
         $config->merge(array('config' => array('github-oauth' => array('foo' => 'bar'))));
         $config->merge(array('config' => array('github-oauth' => array('bar' => 'baz'))));
 
         $this->assertEquals(array('foo' => 'bar', 'bar' => 'baz'), $config->get('github-oauth'));
     }
 
+    public function testVarReplacement()
+    {
+        $config = new Config(false);
+        $config->merge(array('config' => array('a' => 'b', 'c' => '{$a}')));
+        $config->merge(array('config' => array('bin-dir' => '$HOME', 'cache-dir' => '~/foo/')));
+
+        $home = rtrim(getenv('HOME') ?: getenv('USERPROFILE'), '\\/');
+        $this->assertEquals('b', $config->get('c'));
+        $this->assertEquals($home.'/', $config->get('bin-dir'));
+        $this->assertEquals($home.'/foo', $config->get('cache-dir'));
+    }
+
     public function testOverrideGithubProtocols()
     {
-        $config = new Config();
+        $config = new Config(false);
         $config->merge(array('config' => array('github-protocols' => array('https', 'git'))));
         $config->merge(array('config' => array('github-protocols' => array('https'))));
 
diff --git a/vendor/composer/composer/tests/Composer/Test/DependencyResolver/RequestTest.php b/vendor/composer/composer/tests/Composer/Test/DependencyResolver/RequestTest.php
index d8cb865..78a1da9 100644
--- a/vendor/composer/composer/tests/Composer/Test/DependencyResolver/RequestTest.php
+++ b/vendor/composer/composer/tests/Composer/Test/DependencyResolver/RequestTest.php
@@ -34,14 +34,14 @@ class RequestTest extends TestCase
 
         $request = new Request($pool);
         $request->install('foo');
-        $request->install('bar');
+        $request->fix('bar');
         $request->remove('foobar');
 
         $this->assertEquals(
             array(
-                array('packages' => array($foo), 'cmd' => 'install', 'packageName' => 'foo', 'constraint' => null),
-                array('packages' => array($bar), 'cmd' => 'install', 'packageName' => 'bar', 'constraint' => null),
-                array('packages' => array($foobar), 'cmd' => 'remove', 'packageName' => 'foobar', 'constraint' => null),
+                array('cmd' => 'install', 'packageName' => 'foo', 'constraint' => null, 'fixed' => false),
+                array('cmd' => 'install', 'packageName' => 'bar', 'constraint' => null, 'fixed' => true),
+                array('cmd' => 'remove', 'packageName' => 'foobar', 'constraint' => null, 'fixed' => false),
             ),
             $request->getJobs());
     }
@@ -66,7 +66,7 @@ class RequestTest extends TestCase
 
         $this->assertEquals(
             array(
-                    array('packages' => array($foo1, $foo2), 'cmd' => 'install', 'packageName' => 'foo', 'constraint' => $constraint),
+                    array('cmd' => 'install', 'packageName' => 'foo', 'constraint' => $constraint, 'fixed' => false),
             ),
             $request->getJobs()
         );
@@ -80,7 +80,7 @@ class RequestTest extends TestCase
         $request->updateAll();
 
         $this->assertEquals(
-            array(array('cmd' => 'update-all', 'packages' => array())),
+            array(array('cmd' => 'update-all')),
             $request->getJobs());
     }
 }
diff --git a/vendor/composer/composer/tests/Composer/Test/DependencyResolver/RuleSetIteratorTest.php b/vendor/composer/composer/tests/Composer/Test/DependencyResolver/RuleSetIteratorTest.php
index 1598e77..e83b79c 100644
--- a/vendor/composer/composer/tests/Composer/Test/DependencyResolver/RuleSetIteratorTest.php
+++ b/vendor/composer/composer/tests/Composer/Test/DependencyResolver/RuleSetIteratorTest.php
@@ -27,11 +27,11 @@ class RuleSetIteratorTest extends \PHPUnit_Framework_TestCase
 
         $this->rules = array(
             RuleSet::TYPE_JOB => array(
-                new Rule($this->pool, array(), 'job1', null),
-                new Rule($this->pool, array(), 'job2', null),
+                new Rule(array(), 'job1', null),
+                new Rule(array(), 'job2', null),
             ),
             RuleSet::TYPE_LEARNED => array(
-                new Rule($this->pool, array(), 'update1', null),
+                new Rule(array(), 'update1', null),
             ),
             RuleSet::TYPE_PACKAGE => array(),
         );
diff --git a/vendor/composer/composer/tests/Composer/Test/DependencyResolver/RuleSetTest.php b/vendor/composer/composer/tests/Composer/Test/DependencyResolver/RuleSetTest.php
index 35e3f17..c1eb83e 100644
--- a/vendor/composer/composer/tests/Composer/Test/DependencyResolver/RuleSetTest.php
+++ b/vendor/composer/composer/tests/Composer/Test/DependencyResolver/RuleSetTest.php
@@ -32,11 +32,11 @@ class RuleSetTest extends TestCase
         $rules = array(
             RuleSet::TYPE_PACKAGE => array(),
             RuleSet::TYPE_JOB => array(
-                new Rule($this->pool, array(), 'job1', null),
-                new Rule($this->pool, array(), 'job2', null),
+                new Rule(array(), 'job1', null),
+                new Rule(array(), 'job2', null),
             ),
             RuleSet::TYPE_LEARNED => array(
-                new Rule($this->pool, array(), 'update1', null),
+                new Rule(array(), 'update1', null),
             ),
         );
 
@@ -56,15 +56,15 @@ class RuleSetTest extends TestCase
     {
         $ruleSet = new RuleSet;
 
-        $ruleSet->add(new Rule($this->pool, array(), 'job1', null), 7);
+        $ruleSet->add(new Rule(array(), 'job1', null), 7);
     }
 
     public function testCount()
     {
         $ruleSet = new RuleSet;
 
-        $ruleSet->add(new Rule($this->pool, array(), 'job1', null), RuleSet::TYPE_JOB);
-        $ruleSet->add(new Rule($this->pool, array(), 'job2', null), RuleSet::TYPE_JOB);
+        $ruleSet->add(new Rule(array(), 'job1', null), RuleSet::TYPE_JOB);
+        $ruleSet->add(new Rule(array(), 'job2', null), RuleSet::TYPE_JOB);
 
         $this->assertEquals(2, $ruleSet->count());
     }
@@ -73,18 +73,18 @@ class RuleSetTest extends TestCase
     {
         $ruleSet = new RuleSet;
 
-        $rule = new Rule($this->pool, array(), 'job1', null);
+        $rule = new Rule(array(), 'job1', null);
         $ruleSet->add($rule, RuleSet::TYPE_JOB);
 
-        $this->assertSame($rule, $ruleSet->ruleById(0));
+        $this->assertSame($rule, $ruleSet->ruleById[0]);
     }
 
     public function testGetIterator()
     {
         $ruleSet = new RuleSet;
 
-        $rule1 = new Rule($this->pool, array(), 'job1', null);
-        $rule2 = new Rule($this->pool, array(), 'job1', null);
+        $rule1 = new Rule(array(), 'job1', null);
+        $rule2 = new Rule(array(), 'job1', null);
         $ruleSet->add($rule1, RuleSet::TYPE_JOB);
         $ruleSet->add($rule2, RuleSet::TYPE_LEARNED);
 
@@ -98,8 +98,8 @@ class RuleSetTest extends TestCase
     public function testGetIteratorFor()
     {
         $ruleSet = new RuleSet;
-        $rule1 = new Rule($this->pool, array(), 'job1', null);
-        $rule2 = new Rule($this->pool, array(), 'job1', null);
+        $rule1 = new Rule(array(), 'job1', null);
+        $rule2 = new Rule(array(), 'job1', null);
 
         $ruleSet->add($rule1, RuleSet::TYPE_JOB);
         $ruleSet->add($rule2, RuleSet::TYPE_LEARNED);
@@ -112,8 +112,8 @@ class RuleSetTest extends TestCase
     public function testGetIteratorWithout()
     {
         $ruleSet = new RuleSet;
-        $rule1 = new Rule($this->pool, array(), 'job1', null);
-        $rule2 = new Rule($this->pool, array(), 'job1', null);
+        $rule1 = new Rule(array(), 'job1', null);
+        $rule2 = new Rule(array(), 'job1', null);
 
         $ruleSet->add($rule1, RuleSet::TYPE_JOB);
         $ruleSet->add($rule2, RuleSet::TYPE_LEARNED);
@@ -155,7 +155,7 @@ class RuleSetTest extends TestCase
         $this->assertFalse($ruleSet->containsEqual($rule3));
     }
 
-    public function testToString()
+    public function testPrettyString()
     {
         $repo = new ArrayRepository;
         $repo->addPackage($p = $this->getPackage('foo', '2.1'));
@@ -163,11 +163,11 @@ class RuleSetTest extends TestCase
 
         $ruleSet = new RuleSet;
         $literal = $p->getId();
-        $rule = new Rule($this->pool, array($literal), 'job1', null);
+        $rule = new Rule(array($literal), 'job1', null);
 
         $ruleSet->add($rule, RuleSet::TYPE_JOB);
 
-        $this->assertContains('JOB     : (+foo-2.1.0.0)', $ruleSet->__toString());
+        $this->assertContains('JOB     : (install foo 2.1)', $ruleSet->getPrettyString($this->pool));
     }
 
     private function getRuleMock()
diff --git a/vendor/composer/composer/tests/Composer/Test/DependencyResolver/RuleTest.php b/vendor/composer/composer/tests/Composer/Test/DependencyResolver/RuleTest.php
index 1066763..6688b24 100644
--- a/vendor/composer/composer/tests/Composer/Test/DependencyResolver/RuleTest.php
+++ b/vendor/composer/composer/tests/Composer/Test/DependencyResolver/RuleTest.php
@@ -28,14 +28,14 @@ class RuleTest extends TestCase
 
     public function testGetHash()
     {
-        $rule = new Rule($this->pool, array(123), 'job1', null);
+        $rule = new Rule(array(123), 'job1', null);
 
         $this->assertEquals(substr(md5('123'), 0, 5), $rule->getHash());
     }
 
     public function testSetAndGetId()
     {
-        $rule = new Rule($this->pool, array(), 'job1', null);
+        $rule = new Rule(array(), 'job1', null);
         $rule->setId(666);
 
         $this->assertEquals(666, $rule->getId());
@@ -43,31 +43,31 @@ class RuleTest extends TestCase
 
     public function testEqualsForRulesWithDifferentHashes()
     {
-        $rule = new Rule($this->pool, array(1, 2), 'job1', null);
-        $rule2 = new Rule($this->pool, array(1, 3), 'job1', null);
+        $rule = new Rule(array(1, 2), 'job1', null);
+        $rule2 = new Rule(array(1, 3), 'job1', null);
 
         $this->assertFalse($rule->equals($rule2));
     }
 
     public function testEqualsForRulesWithDifferLiteralsQuantity()
     {
-        $rule = new Rule($this->pool, array(1, 12), 'job1', null);
-        $rule2 = new Rule($this->pool, array(1), 'job1', null);
+        $rule = new Rule(array(1, 12), 'job1', null);
+        $rule2 = new Rule(array(1), 'job1', null);
 
         $this->assertFalse($rule->equals($rule2));
     }
 
     public function testEqualsForRulesWithSameLiterals()
     {
-        $rule = new Rule($this->pool, array(1, 12), 'job1', null);
-        $rule2 = new Rule($this->pool, array(1, 12), 'job1', null);
+        $rule = new Rule(array(1, 12), 'job1', null);
+        $rule2 = new Rule(array(1, 12), 'job1', null);
 
         $this->assertTrue($rule->equals($rule2));
     }
 
     public function testSetAndGetType()
     {
-        $rule = new Rule($this->pool, array(), 'job1', null);
+        $rule = new Rule(array(), 'job1', null);
         $rule->setType('someType');
 
         $this->assertEquals('someType', $rule->getType());
@@ -75,7 +75,7 @@ class RuleTest extends TestCase
 
     public function testEnable()
     {
-        $rule = new Rule($this->pool, array(), 'job1', null);
+        $rule = new Rule(array(), 'job1', null);
         $rule->disable();
         $rule->enable();
 
@@ -85,7 +85,7 @@ class RuleTest extends TestCase
 
     public function testDisable()
     {
-        $rule = new Rule($this->pool, array(), 'job1', null);
+        $rule = new Rule(array(), 'job1', null);
         $rule->enable();
         $rule->disable();
 
@@ -95,22 +95,22 @@ class RuleTest extends TestCase
 
     public function testIsAssertions()
     {
-        $rule = new Rule($this->pool, array(1, 12), 'job1', null);
-        $rule2 = new Rule($this->pool, array(1), 'job1', null);
+        $rule = new Rule(array(1, 12), 'job1', null);
+        $rule2 = new Rule(array(1), 'job1', null);
 
         $this->assertFalse($rule->isAssertion());
         $this->assertTrue($rule2->isAssertion());
     }
 
-    public function testToString()
+    public function testPrettyString()
     {
         $repo = new ArrayRepository;
         $repo->addPackage($p1 = $this->getPackage('foo', '2.1'));
         $repo->addPackage($p2 = $this->getPackage('baz', '1.1'));
         $this->pool->addRepository($repo);
 
-        $rule = new Rule($this->pool, array($p1->getId(), -$p2->getId()), 'job1', null);
+        $rule = new Rule(array($p1->getId(), -$p2->getId()), 'job1', null);
 
-        $this->assertEquals('(-baz-1.1.0.0|+foo-2.1.0.0)', $rule->__toString());
+        $this->assertEquals('(don\'t install baz 1.1|install foo 2.1)', $rule->getPrettyString($this->pool));
     }
 }
diff --git a/vendor/composer/composer/tests/Composer/Test/DependencyResolver/SolverTest.php b/vendor/composer/composer/tests/Composer/Test/DependencyResolver/SolverTest.php
index 349f6e3..d3b540f 100644
--- a/vendor/composer/composer/tests/Composer/Test/DependencyResolver/SolverTest.php
+++ b/vendor/composer/composer/tests/Composer/Test/DependencyResolver/SolverTest.php
@@ -441,10 +441,9 @@ class SolverTest extends TestCase
 
         $this->request->install('A');
 
-        $this->checkSolverResult(array(
-            array('job' => 'install', 'package' => $packageQ),
-            array('job' => 'install', 'package' => $packageA),
-        ));
+        // must explicitly pick the provider, so error in this case
+        $this->setExpectedException('Composer\DependencyResolver\SolverProblemsException');
+        $this->solver->solve($this->request);
     }
 
     public function testSkipReplacerOfExistingPackage()
@@ -465,7 +464,7 @@ class SolverTest extends TestCase
         ));
     }
 
-    public function testInstallReplacerOfMissingPackage()
+    public function testNoInstallReplacerOfMissingPackage()
     {
         $this->repo->addPackage($packageA = $this->getPackage('A', '1.0'));
         $this->repo->addPackage($packageQ = $this->getPackage('Q', '1.0'));
@@ -476,10 +475,8 @@ class SolverTest extends TestCase
 
         $this->request->install('A');
 
-        $this->checkSolverResult(array(
-            array('job' => 'install', 'package' => $packageQ),
-            array('job' => 'install', 'package' => $packageA),
-        ));
+        $this->setExpectedException('Composer\DependencyResolver\SolverProblemsException');
+        $this->solver->solve($this->request);
     }
 
     public function testSkipReplacedPackageIfReplacerIsSelected()
@@ -574,11 +571,12 @@ class SolverTest extends TestCase
         $this->reposComplete();
 
         $this->request->install('A');
+        $this->request->install('C');
 
         $this->checkSolverResult(array(
-            array('job' => 'install', 'package' => $packageB),
             array('job' => 'install', 'package' => $packageA),
             array('job' => 'install', 'package' => $packageC),
+            array('job' => 'install', 'package' => $packageB),
         ));
     }
 
@@ -611,6 +609,7 @@ class SolverTest extends TestCase
         $this->reposComplete();
 
         $this->request->install('A');
+        $this->request->install('D');
 
         $this->checkSolverResult(array(
             array('job' => 'install', 'package' => $packageD2),
@@ -655,8 +654,7 @@ class SolverTest extends TestCase
     public function testConflictResultEmpty()
     {
         $this->repo->addPackage($packageA = $this->getPackage('A', '1.0'));
-        $this->repo->addPackage($packageB = $this->getPackage('B', '1.0'));;
-
+        $this->repo->addPackage($packageB = $this->getPackage('B', '1.0'));
         $packageA->setConflicts(array(
             'b' => new Link('A', 'B', $this->getVersionConstraint('>=', '1.0'), 'conflicts'),
         ));
diff --git a/vendor/composer/composer/tests/Composer/Test/Downloader/DownloadManagerTest.php b/vendor/composer/composer/tests/Composer/Test/Downloader/DownloadManagerTest.php
index 29b2edf..1728c58 100644
--- a/vendor/composer/composer/tests/Composer/Test/Downloader/DownloadManagerTest.php
+++ b/vendor/composer/composer/tests/Composer/Test/Downloader/DownloadManagerTest.php
@@ -17,16 +17,18 @@ use Composer\Downloader\DownloadManager;
 class DownloadManagerTest extends \PHPUnit_Framework_TestCase
 {
     protected $filesystem;
+    protected $io;
 
     public function setUp()
     {
         $this->filesystem = $this->getMock('Composer\Util\Filesystem');
+        $this->io = $this->getMock('Composer\IO\IOInterface');
     }
 
     public function testSetGetDownloader()
     {
         $downloader = $this->createDownloaderMock();
-        $manager    = new DownloadManager(false, $this->filesystem);
+        $manager    = new DownloadManager($this->io, false, $this->filesystem);
 
         $manager->setDownloader('test', $downloader);
         $this->assertSame($downloader, $manager->getDownloader('test'));
@@ -43,7 +45,7 @@ class DownloadManagerTest extends \PHPUnit_Framework_TestCase
             ->method('getInstallationSource')
             ->will($this->returnValue(null));
 
-        $manager = new DownloadManager(false, $this->filesystem);
+        $manager = new DownloadManager($this->io, false, $this->filesystem);
 
         $this->setExpectedException('InvalidArgumentException');
 
@@ -69,7 +71,7 @@ class DownloadManagerTest extends \PHPUnit_Framework_TestCase
             ->will($this->returnValue('dist'));
 
         $manager = $this->getMockBuilder('Composer\Downloader\DownloadManager')
-            ->setConstructorArgs(array(false, $this->filesystem))
+            ->setConstructorArgs(array($this->io, false, $this->filesystem))
             ->setMethods(array('getDownloader'))
             ->getMock();
 
@@ -101,7 +103,7 @@ class DownloadManagerTest extends \PHPUnit_Framework_TestCase
             ->will($this->returnValue('source'));
 
         $manager = $this->getMockBuilder('Composer\Downloader\DownloadManager')
-            ->setConstructorArgs(array(false, $this->filesystem))
+            ->setConstructorArgs(array($this->io, false, $this->filesystem))
             ->setMethods(array('getDownloader'))
             ->getMock();
 
@@ -135,7 +137,7 @@ class DownloadManagerTest extends \PHPUnit_Framework_TestCase
             ->will($this->returnValue('source'));
 
         $manager = $this->getMockBuilder('Composer\Downloader\DownloadManager')
-            ->setConstructorArgs(array(false, $this->filesystem))
+            ->setConstructorArgs(array($this->io, false, $this->filesystem))
             ->setMethods(array('getDownloader'))
             ->getMock();
 
@@ -167,7 +169,7 @@ class DownloadManagerTest extends \PHPUnit_Framework_TestCase
             ->will($this->returnValue('dist'));
 
         $manager = $this->getMockBuilder('Composer\Downloader\DownloadManager')
-            ->setConstructorArgs(array(false, $this->filesystem))
+            ->setConstructorArgs(array($this->io, false, $this->filesystem))
             ->setMethods(array('getDownloader'))
             ->getMock();
 
@@ -182,6 +184,19 @@ class DownloadManagerTest extends \PHPUnit_Framework_TestCase
         $manager->getDownloaderForInstalledPackage($package);
     }
 
+    public function testGetDownloaderForMetapackage()
+    {
+        $package = $this->createPackageMock();
+        $package
+          ->expects($this->once())
+          ->method('getType')
+          ->will($this->returnValue('metapackage'));
+
+        $manager = new DownloadManager($this->io, false, $this->filesystem);
+
+        $this->assertNull($manager->getDownloaderForInstalledPackage($package));
+    }
+
     public function testFullPackageDownload()
     {
         $package = $this->createPackageMock();
@@ -206,7 +221,7 @@ class DownloadManagerTest extends \PHPUnit_Framework_TestCase
             ->with($package, 'target_dir');
 
         $manager = $this->getMockBuilder('Composer\Downloader\DownloadManager')
-            ->setConstructorArgs(array(false, $this->filesystem))
+            ->setConstructorArgs(array($this->io, false, $this->filesystem))
             ->setMethods(array('getDownloaderForInstalledPackage'))
             ->getMock();
         $manager
@@ -218,6 +233,62 @@ class DownloadManagerTest extends \PHPUnit_Framework_TestCase
         $manager->download($package, 'target_dir');
     }
 
+    public function testFullPackageDownloadFailover()
+    {
+        $package = $this->createPackageMock();
+        $package
+            ->expects($this->once())
+            ->method('getSourceType')
+            ->will($this->returnValue('git'));
+        $package
+            ->expects($this->once())
+            ->method('getDistType')
+            ->will($this->returnValue('pear'));
+        $package
+            ->expects($this->any())
+            ->method('getPrettyString')
+            ->will($this->returnValue('prettyPackage'));
+
+        $package
+            ->expects($this->at(3))
+            ->method('setInstallationSource')
+            ->with('dist');
+        $package
+            ->expects($this->at(5))
+            ->method('setInstallationSource')
+            ->with('source');
+
+        $downloaderFail = $this->createDownloaderMock();
+        $downloaderFail
+            ->expects($this->once())
+            ->method('download')
+            ->with($package, 'target_dir')
+            ->will($this->throwException(new \RuntimeException("Foo")));
+
+        $downloaderSuccess = $this->createDownloaderMock();
+        $downloaderSuccess
+            ->expects($this->once())
+            ->method('download')
+            ->with($package, 'target_dir');
+
+        $manager = $this->getMockBuilder('Composer\Downloader\DownloadManager')
+            ->setConstructorArgs(array($this->io, false, $this->filesystem))
+            ->setMethods(array('getDownloaderForInstalledPackage'))
+            ->getMock();
+        $manager
+            ->expects($this->at(0))
+            ->method('getDownloaderForInstalledPackage')
+            ->with($package)
+            ->will($this->returnValue($downloaderFail));
+        $manager
+            ->expects($this->at(1))
+            ->method('getDownloaderForInstalledPackage')
+            ->with($package)
+            ->will($this->returnValue($downloaderSuccess));
+
+        $manager->download($package, 'target_dir');
+    }
+
     public function testBadPackageDownload()
     {
         $package = $this->createPackageMock();
@@ -230,7 +301,7 @@ class DownloadManagerTest extends \PHPUnit_Framework_TestCase
             ->method('getDistType')
             ->will($this->returnValue(null));
 
-        $manager = new DownloadManager(false, $this->filesystem);
+        $manager = new DownloadManager($this->io, false, $this->filesystem);
 
         $this->setExpectedException('InvalidArgumentException');
         $manager->download($package, 'target_dir');
@@ -260,7 +331,7 @@ class DownloadManagerTest extends \PHPUnit_Framework_TestCase
             ->with($package, 'target_dir');
 
         $manager = $this->getMockBuilder('Composer\Downloader\DownloadManager')
-            ->setConstructorArgs(array(false, $this->filesystem))
+            ->setConstructorArgs(array($this->io, false, $this->filesystem))
             ->setMethods(array('getDownloaderForInstalledPackage'))
             ->getMock();
         $manager
@@ -296,7 +367,7 @@ class DownloadManagerTest extends \PHPUnit_Framework_TestCase
             ->with($package, 'target_dir');
 
         $manager = $this->getMockBuilder('Composer\Downloader\DownloadManager')
-            ->setConstructorArgs(array(false, $this->filesystem))
+            ->setConstructorArgs(array($this->io, false, $this->filesystem))
             ->setMethods(array('getDownloaderForInstalledPackage'))
             ->getMock();
         $manager
@@ -308,6 +379,36 @@ class DownloadManagerTest extends \PHPUnit_Framework_TestCase
         $manager->download($package, 'target_dir');
     }
 
+    public function testMetapackagePackageDownload()
+    {
+        $package = $this->createPackageMock();
+        $package
+          ->expects($this->once())
+          ->method('getSourceType')
+          ->will($this->returnValue('git'));
+        $package
+          ->expects($this->once())
+          ->method('getDistType')
+          ->will($this->returnValue(null));
+
+        $package
+          ->expects($this->once())
+          ->method('setInstallationSource')
+          ->with('source');
+
+        $manager = $this->getMockBuilder('Composer\Downloader\DownloadManager')
+          ->setConstructorArgs(array($this->io, false, $this->filesystem))
+          ->setMethods(array('getDownloaderForInstalledPackage'))
+          ->getMock();
+        $manager
+          ->expects($this->once())
+          ->method('getDownloaderForInstalledPackage')
+          ->with($package)
+          ->will($this->returnValue(null)); // There is no downloader for Metapackages.
+
+        $manager->download($package, 'target_dir');
+    }
+
     public function testFullPackageDownloadWithSourcePreferred()
     {
         $package = $this->createPackageMock();
@@ -332,7 +433,7 @@ class DownloadManagerTest extends \PHPUnit_Framework_TestCase
             ->with($package, 'target_dir');
 
         $manager = $this->getMockBuilder('Composer\Downloader\DownloadManager')
-            ->setConstructorArgs(array(false, $this->filesystem))
+            ->setConstructorArgs(array($this->io, false, $this->filesystem))
             ->setMethods(array('getDownloaderForInstalledPackage'))
             ->getMock();
         $manager
@@ -369,7 +470,7 @@ class DownloadManagerTest extends \PHPUnit_Framework_TestCase
             ->with($package, 'target_dir');
 
         $manager = $this->getMockBuilder('Composer\Downloader\DownloadManager')
-            ->setConstructorArgs(array(false, $this->filesystem))
+            ->setConstructorArgs(array($this->io, false, $this->filesystem))
             ->setMethods(array('getDownloaderForInstalledPackage'))
             ->getMock();
         $manager
@@ -406,7 +507,7 @@ class DownloadManagerTest extends \PHPUnit_Framework_TestCase
             ->with($package, 'target_dir');
 
         $manager = $this->getMockBuilder('Composer\Downloader\DownloadManager')
-            ->setConstructorArgs(array(false, $this->filesystem))
+            ->setConstructorArgs(array($this->io, false, $this->filesystem))
             ->setMethods(array('getDownloaderForInstalledPackage'))
             ->getMock();
         $manager
@@ -431,7 +532,7 @@ class DownloadManagerTest extends \PHPUnit_Framework_TestCase
             ->method('getDistType')
             ->will($this->returnValue(null));
 
-        $manager = new DownloadManager(false, $this->filesystem);
+        $manager = new DownloadManager($this->io, false, $this->filesystem);
         $manager->setPreferSource(true);
 
         $this->setExpectedException('InvalidArgumentException');
@@ -467,7 +568,7 @@ class DownloadManagerTest extends \PHPUnit_Framework_TestCase
             ->with($initial, $target, 'vendor/bundles/FOS/UserBundle');
 
         $manager = $this->getMockBuilder('Composer\Downloader\DownloadManager')
-            ->setConstructorArgs(array(false, $this->filesystem))
+            ->setConstructorArgs(array($this->io, false, $this->filesystem))
             ->setMethods(array('getDownloaderForInstalledPackage'))
             ->getMock();
         $manager
@@ -504,7 +605,7 @@ class DownloadManagerTest extends \PHPUnit_Framework_TestCase
             ->with($initial, 'vendor/bundles/FOS/UserBundle');
 
         $manager = $this->getMockBuilder('Composer\Downloader\DownloadManager')
-            ->setConstructorArgs(array(false, $this->filesystem))
+            ->setConstructorArgs(array($this->io, false, $this->filesystem))
             ->setMethods(array('getDownloaderForInstalledPackage', 'download'))
             ->getMock();
         $manager
@@ -545,7 +646,7 @@ class DownloadManagerTest extends \PHPUnit_Framework_TestCase
             ->with($initial, $target, 'vendor/pkg');
 
         $manager = $this->getMockBuilder('Composer\Downloader\DownloadManager')
-            ->setConstructorArgs(array(false, $this->filesystem))
+            ->setConstructorArgs(array($this->io, false, $this->filesystem))
             ->setMethods(array('getDownloaderForInstalledPackage', 'download'))
             ->getMock();
         $manager
@@ -582,7 +683,7 @@ class DownloadManagerTest extends \PHPUnit_Framework_TestCase
             ->with($initial, 'vendor/pkg');
 
         $manager = $this->getMockBuilder('Composer\Downloader\DownloadManager')
-            ->setConstructorArgs(array(false, $this->filesystem))
+            ->setConstructorArgs(array($this->io, false, $this->filesystem))
             ->setMethods(array('getDownloaderForInstalledPackage', 'download'))
             ->getMock();
         $manager
@@ -598,6 +699,24 @@ class DownloadManagerTest extends \PHPUnit_Framework_TestCase
         $manager->update($initial, $target, 'vendor/pkg');
     }
 
+    public function testUpdateMetapackage()
+    {
+        $initial = $this->createPackageMock();
+        $target = $this->createPackageMock();
+
+        $manager = $this->getMockBuilder('Composer\Downloader\DownloadManager')
+          ->setConstructorArgs(array($this->io, false, $this->filesystem))
+          ->setMethods(array('getDownloaderForInstalledPackage'))
+          ->getMock();
+        $manager
+          ->expects($this->once())
+          ->method('getDownloaderForInstalledPackage')
+          ->with($initial)
+          ->will($this->returnValue(null)); // There is no downloader for metapackages.
+
+        $manager->update($initial, $target, 'vendor/pkg');
+    }
+
     public function testRemove()
     {
         $package = $this->createPackageMock();
@@ -609,7 +728,7 @@ class DownloadManagerTest extends \PHPUnit_Framework_TestCase
             ->with($package, 'vendor/bundles/FOS/UserBundle');
 
         $manager = $this->getMockBuilder('Composer\Downloader\DownloadManager')
-            ->setConstructorArgs(array(false, $this->filesystem))
+            ->setConstructorArgs(array($this->io, false, $this->filesystem))
             ->setMethods(array('getDownloaderForInstalledPackage'))
             ->getMock();
         $manager
@@ -621,6 +740,23 @@ class DownloadManagerTest extends \PHPUnit_Framework_TestCase
         $manager->remove($package, 'vendor/bundles/FOS/UserBundle');
     }
 
+    public function testMetapackageRemove()
+    {
+        $package = $this->createPackageMock();
+
+        $manager = $this->getMockBuilder('Composer\Downloader\DownloadManager')
+          ->setConstructorArgs(array($this->io, false, $this->filesystem))
+          ->setMethods(array('getDownloaderForInstalledPackage'))
+          ->getMock();
+        $manager
+          ->expects($this->once())
+          ->method('getDownloaderForInstalledPackage')
+          ->with($package)
+          ->will($this->returnValue(null)); // There is no downloader for metapackages.
+
+        $manager->remove($package, 'vendor/bundles/FOS/UserBundle');
+    }
+
     private function createDownloaderMock()
     {
         return $this->getMockBuilder('Composer\Downloader\DownloaderInterface')
diff --git a/vendor/composer/composer/tests/Composer/Test/Downloader/FileDownloaderTest.php b/vendor/composer/composer/tests/Composer/Test/Downloader/FileDownloaderTest.php
index db6f81a..f0578f6 100644
--- a/vendor/composer/composer/tests/Composer/Test/Downloader/FileDownloaderTest.php
+++ b/vendor/composer/composer/tests/Composer/Test/Downloader/FileDownloaderTest.php
@@ -48,6 +48,10 @@ class FileDownloaderTest extends \PHPUnit_Framework_TestCase
             ->method('getDistUrl')
             ->will($this->returnValue('url'))
         ;
+        $packageMock->expects($this->once())
+            ->method('getDistUrls')
+            ->will($this->returnValue(array('url')))
+        ;
 
         $path = tempnam(sys_get_temp_dir(), 'c');
 
@@ -87,7 +91,15 @@ class FileDownloaderTest extends \PHPUnit_Framework_TestCase
         $packageMock = $this->getMock('Composer\Package\PackageInterface');
         $packageMock->expects($this->any())
             ->method('getDistUrl')
-            ->will($this->returnValue('http://example.com/script.js'))
+            ->will($this->returnValue($distUrl = 'http://example.com/script.js'))
+        ;
+        $packageMock->expects($this->once())
+            ->method('getDistUrls')
+            ->will($this->returnValue(array($distUrl)))
+        ;
+        $packageMock->expects($this->atLeastOnce())
+            ->method('getTransportOptions')
+            ->will($this->returnValue(array()))
         ;
 
         do {
@@ -97,7 +109,7 @@ class FileDownloaderTest extends \PHPUnit_Framework_TestCase
         $ioMock = $this->getMock('Composer\IO\IOInterface');
         $ioMock->expects($this->any())
             ->method('write')
-            ->will($this->returnCallback(function($messages, $newline = true) use ($path) {
+            ->will($this->returnCallback(function ($messages, $newline = true) use ($path) {
                 if (is_file($path.'/script.js')) {
                     unlink($path.'/script.js');
                 }
@@ -159,12 +171,20 @@ class FileDownloaderTest extends \PHPUnit_Framework_TestCase
         $packageMock = $this->getMock('Composer\Package\PackageInterface');
         $packageMock->expects($this->any())
             ->method('getDistUrl')
-            ->will($this->returnValue('http://example.com/script.js'))
+            ->will($this->returnValue($distUrl = 'http://example.com/script.js'))
+        ;
+        $packageMock->expects($this->atLeastOnce())
+            ->method('getTransportOptions')
+            ->will($this->returnValue(array()))
         ;
         $packageMock->expects($this->any())
             ->method('getDistSha1Checksum')
             ->will($this->returnValue('invalid'))
         ;
+        $packageMock->expects($this->once())
+            ->method('getDistUrls')
+            ->will($this->returnValue(array($distUrl)))
+        ;
         $filesystem = $this->getMock('Composer\Util\Filesystem');
 
         do {
diff --git a/vendor/composer/composer/tests/Composer/Test/Downloader/GitDownloaderTest.php b/vendor/composer/composer/tests/Composer/Test/Downloader/GitDownloaderTest.php
index 7a0816e..05cc8f3 100644
--- a/vendor/composer/composer/tests/Composer/Test/Downloader/GitDownloaderTest.php
+++ b/vendor/composer/composer/tests/Composer/Test/Downloader/GitDownloaderTest.php
@@ -51,6 +51,9 @@ class GitDownloaderTest extends \PHPUnit_Framework_TestCase
             ->method('getSourceReference')
             ->will($this->returnValue('1234567890123456789012345678901234567890'));
         $packageMock->expects($this->any())
+            ->method('getSourceUrls')
+            ->will($this->returnValue(array('https://example.com/composer/composer')));
+        $packageMock->expects($this->any())
             ->method('getSourceUrl')
             ->will($this->returnValue('https://example.com/composer/composer'));
         $packageMock->expects($this->any())
@@ -58,7 +61,7 @@ class GitDownloaderTest extends \PHPUnit_Framework_TestCase
             ->will($this->returnValue('dev-master'));
         $processExecutor = $this->getMock('Composer\Util\ProcessExecutor');
 
-        $expectedGitCommand = $this->winCompat("git clone 'https://example.com/composer/composer' 'composerPath' && cd 'composerPath' && git remote add composer 'https://example.com/composer/composer' && git fetch composer");
+        $expectedGitCommand = $this->winCompat("git clone --no-checkout 'https://example.com/composer/composer' 'composerPath' && cd 'composerPath' && git remote add composer 'https://example.com/composer/composer' && git fetch composer");
         $processExecutor->expects($this->at(0))
             ->method('execute')
             ->with($this->equalTo($expectedGitCommand))
@@ -90,6 +93,9 @@ class GitDownloaderTest extends \PHPUnit_Framework_TestCase
             ->method('getSourceReference')
             ->will($this->returnValue('ref'));
         $packageMock->expects($this->any())
+            ->method('getSourceUrls')
+            ->will($this->returnValue(array('https://github.com/mirrors/composer', 'https://github.com/composer/composer')));
+        $packageMock->expects($this->any())
             ->method('getSourceUrl')
             ->will($this->returnValue('https://github.com/composer/composer'));
         $packageMock->expects($this->any())
@@ -97,31 +103,37 @@ class GitDownloaderTest extends \PHPUnit_Framework_TestCase
             ->will($this->returnValue('1.0.0'));
         $processExecutor = $this->getMock('Composer\Util\ProcessExecutor');
 
-        $expectedGitCommand = $this->winCompat("git clone 'git://github.com/composer/composer' 'composerPath' && cd 'composerPath' && git remote add composer 'git://github.com/composer/composer' && git fetch composer");
+        $expectedGitCommand = $this->winCompat("git clone --no-checkout 'git://github.com/mirrors/composer' 'composerPath' && cd 'composerPath' && git remote add composer 'git://github.com/mirrors/composer' && git fetch composer");
         $processExecutor->expects($this->at(0))
             ->method('execute')
             ->with($this->equalTo($expectedGitCommand))
             ->will($this->returnValue(1));
 
-        $expectedGitCommand = $this->winCompat("git clone 'https://github.com/composer/composer' 'composerPath' && cd 'composerPath' && git remote add composer 'https://github.com/composer/composer' && git fetch composer");
+        $expectedGitCommand = $this->winCompat("git clone --no-checkout 'https://github.com/mirrors/composer' 'composerPath' && cd 'composerPath' && git remote add composer 'https://github.com/mirrors/composer' && git fetch composer");
         $processExecutor->expects($this->at(2))
             ->method('execute')
             ->with($this->equalTo($expectedGitCommand))
             ->will($this->returnValue(0));
 
-        $expectedGitCommand = $this->winCompat("git remote set-url --push origin 'git@github.com:composer/composer.git'");
+        $expectedGitCommand = $this->winCompat("git remote set-url origin 'https://github.com/composer/composer'");
         $processExecutor->expects($this->at(3))
             ->method('execute')
             ->with($this->equalTo($expectedGitCommand), $this->equalTo(null), $this->equalTo($this->winCompat('composerPath')))
             ->will($this->returnValue(0));
 
+        $expectedGitCommand = $this->winCompat("git remote set-url --push origin 'git@github.com:composer/composer.git'");
         $processExecutor->expects($this->at(4))
             ->method('execute')
-            ->with($this->equalTo('git branch -r'))
+            ->with($this->equalTo($expectedGitCommand), $this->equalTo(null), $this->equalTo($this->winCompat('composerPath')))
             ->will($this->returnValue(0));
 
         $processExecutor->expects($this->at(5))
             ->method('execute')
+            ->with($this->equalTo('git branch -r'))
+            ->will($this->returnValue(0));
+
+        $processExecutor->expects($this->at(6))
+            ->method('execute')
             ->with($this->equalTo($this->winCompat("git checkout 'ref' && git reset --hard 'ref'")), $this->equalTo(null), $this->equalTo($this->winCompat('composerPath')))
             ->will($this->returnValue(0));
 
@@ -147,6 +159,9 @@ class GitDownloaderTest extends \PHPUnit_Framework_TestCase
             ->method('getSourceReference')
             ->will($this->returnValue('ref'));
         $packageMock->expects($this->any())
+            ->method('getSourceUrls')
+            ->will($this->returnValue(array('https://github.com/composer/composer')));
+        $packageMock->expects($this->any())
             ->method('getSourceUrl')
             ->will($this->returnValue('https://github.com/composer/composer'));
         $packageMock->expects($this->any())
@@ -154,7 +169,7 @@ class GitDownloaderTest extends \PHPUnit_Framework_TestCase
             ->will($this->returnValue('1.0.0'));
         $processExecutor = $this->getMock('Composer\Util\ProcessExecutor');
 
-        $expectedGitCommand = $this->winCompat("git clone '{$protocol}://github.com/composer/composer' 'composerPath' && cd 'composerPath' && git remote add composer '{$protocol}://github.com/composer/composer' && git fetch composer");
+        $expectedGitCommand = $this->winCompat("git clone --no-checkout '{$protocol}://github.com/composer/composer' 'composerPath' && cd 'composerPath' && git remote add composer '{$protocol}://github.com/composer/composer' && git fetch composer");
         $processExecutor->expects($this->at(0))
             ->method('execute')
             ->with($this->equalTo($expectedGitCommand))
@@ -182,14 +197,14 @@ class GitDownloaderTest extends \PHPUnit_Framework_TestCase
      */
     public function testDownloadThrowsRuntimeExceptionIfGitCommandFails()
     {
-        $expectedGitCommand = $this->winCompat("git clone 'https://example.com/composer/composer' 'composerPath' && cd 'composerPath' && git remote add composer 'https://example.com/composer/composer' && git fetch composer");
+        $expectedGitCommand = $this->winCompat("git clone --no-checkout 'https://example.com/composer/composer' 'composerPath' && cd 'composerPath' && git remote add composer 'https://example.com/composer/composer' && git fetch composer");
         $packageMock = $this->getMock('Composer\Package\PackageInterface');
         $packageMock->expects($this->any())
             ->method('getSourceReference')
             ->will($this->returnValue('ref'));
         $packageMock->expects($this->any())
-            ->method('getSourceUrl')
-            ->will($this->returnValue('https://example.com/composer/composer'));
+            ->method('getSourceUrls')
+            ->will($this->returnValue(array('https://example.com/composer/composer')));
         $processExecutor = $this->getMock('Composer\Util\ProcessExecutor');
         $processExecutor->expects($this->at(0))
             ->method('execute')
@@ -227,8 +242,8 @@ class GitDownloaderTest extends \PHPUnit_Framework_TestCase
             ->method('getSourceReference')
             ->will($this->returnValue('ref'));
         $packageMock->expects($this->any())
-            ->method('getSourceUrl')
-            ->will($this->returnValue('https://github.com/composer/composer'));
+            ->method('getSourceUrls')
+            ->will($this->returnValue(array('https://github.com/composer/composer')));
         $packageMock->expects($this->any())
             ->method('getPrettyVersion')
             ->will($this->returnValue('1.0.0'));
@@ -273,8 +288,8 @@ class GitDownloaderTest extends \PHPUnit_Framework_TestCase
             ->method('getSourceReference')
             ->will($this->returnValue('ref'));
         $packageMock->expects($this->any())
-            ->method('getSourceUrl')
-            ->will($this->returnValue('https://github.com/composer/composer'));
+            ->method('getSourceUrls')
+            ->will($this->returnValue(array('https://github.com/composer/composer')));
         $processExecutor = $this->getMock('Composer\Util\ProcessExecutor');
         $processExecutor->expects($this->at(0))
             ->method('execute')
diff --git a/vendor/composer/composer/tests/Composer/Test/Downloader/HgDownloaderTest.php b/vendor/composer/composer/tests/Composer/Test/Downloader/HgDownloaderTest.php
index 37a8951..ab9ec28 100644
--- a/vendor/composer/composer/tests/Composer/Test/Downloader/HgDownloaderTest.php
+++ b/vendor/composer/composer/tests/Composer/Test/Downloader/HgDownloaderTest.php
@@ -48,8 +48,8 @@ class HgDownloaderTest extends \PHPUnit_Framework_TestCase
             ->method('getSourceReference')
             ->will($this->returnValue('ref'));
         $packageMock->expects($this->once())
-            ->method('getSourceUrl')
-            ->will($this->returnValue('https://mercurial.dev/l3l0/composer'));
+            ->method('getSourceUrls')
+            ->will($this->returnValue(array('https://mercurial.dev/l3l0/composer')));
         $processExecutor = $this->getMock('Composer\Util\ProcessExecutor');
 
         $expectedGitCommand = $this->getCmd('hg clone \'https://mercurial.dev/l3l0/composer\' \'composerPath\'');
@@ -93,8 +93,8 @@ class HgDownloaderTest extends \PHPUnit_Framework_TestCase
             ->method('getSourceReference')
             ->will($this->returnValue('ref'));
         $packageMock->expects($this->any())
-            ->method('getSourceUrl')
-            ->will($this->returnValue('https://github.com/l3l0/composer'));
+            ->method('getSourceUrls')
+            ->will($this->returnValue(array('https://github.com/l3l0/composer')));
         $processExecutor = $this->getMock('Composer\Util\ProcessExecutor');
 
         $expectedHgCommand = $this->getCmd("hg st");
diff --git a/vendor/composer/composer/tests/Composer/Test/Downloader/PearPackageExtractorTest.php b/vendor/composer/composer/tests/Composer/Test/Downloader/PearPackageExtractorTest.php
index fa39383..c053976 100644
--- a/vendor/composer/composer/tests/Composer/Test/Downloader/PearPackageExtractorTest.php
+++ b/vendor/composer/composer/tests/Composer/Test/Downloader/PearPackageExtractorTest.php
@@ -25,19 +25,19 @@ class PearPackageExtractorTest extends \PHPUnit_Framework_TestCase
         $fileActions = $method->invoke($extractor, __DIR__ . '/Fixtures/Package_v1.0', array('php' => '/'), array());
 
         $expectedFileActions = array(
-            'Gtk.php' => Array(
+            'Gtk.php' => array(
                 'from' => 'PEAR_Frontend_Gtk-0.4.0/Gtk.php',
                 'to' => 'PEAR/Frontend/Gtk.php',
                 'role' => 'php',
                 'tasks' => array(),
             ),
-            'Gtk/Config.php' => Array(
+            'Gtk/Config.php' => array(
                 'from' => 'PEAR_Frontend_Gtk-0.4.0/Gtk/Config.php',
                 'to' => 'PEAR/Frontend/Gtk/Config.php',
                 'role' => 'php',
                 'tasks' => array(),
             ),
-            'Gtk/xpm/black_close_icon.xpm' => Array(
+            'Gtk/xpm/black_close_icon.xpm' => array(
                 'from' => 'PEAR_Frontend_Gtk-0.4.0/Gtk/xpm/black_close_icon.xpm',
                 'to' => 'PEAR/Frontend/Gtk/xpm/black_close_icon.xpm',
                 'role' => 'php',
@@ -56,7 +56,7 @@ class PearPackageExtractorTest extends \PHPUnit_Framework_TestCase
         $fileActions = $method->invoke($extractor, __DIR__ . '/Fixtures/Package_v2.0', array('php' => '/'), array());
 
         $expectedFileActions = array(
-            'URL.php' => Array(
+            'URL.php' => array(
                 'from' => 'Net_URL-1.0.15/URL.php',
                 'to' => 'Net/URL.php',
                 'role' => 'php',
@@ -75,13 +75,13 @@ class PearPackageExtractorTest extends \PHPUnit_Framework_TestCase
         $fileActions = $method->invoke($extractor, __DIR__ . '/Fixtures/Package_v2.1', array('php' => '/', 'script' => '/bin'), array());
 
         $expectedFileActions = array(
-            'php/Zend/Authentication/Storage/StorageInterface.php' => Array(
+            'php/Zend/Authentication/Storage/StorageInterface.php' => array(
                 'from' => 'Zend_Authentication-2.0.0beta4/php/Zend/Authentication/Storage/StorageInterface.php',
                 'to' => '/php/Zend/Authentication/Storage/StorageInterface.php',
                 'role' => 'php',
                 'tasks' => array(),
             ),
-            'php/Zend/Authentication/Result.php' => Array(
+            'php/Zend/Authentication/Result.php' => array(
                 'from' => 'Zend_Authentication-2.0.0beta4/php/Zend/Authentication/Result.php',
                 'to' => '/php/Zend/Authentication/Result.php',
                 'role' => 'php',
@@ -98,7 +98,7 @@ class PearPackageExtractorTest extends \PHPUnit_Framework_TestCase
                     )
                 )
             ),
-            'renamedFile.php' => Array(
+            'renamedFile.php' => array(
                 'from' => 'Zend_Authentication-2.0.0beta4/renamedFile.php',
                 'to' => 'correctFile.php',
                 'role' => 'php',
diff --git a/vendor/composer/composer/tests/Composer/Test/Downloader/PerforceDownloaderTest.php b/vendor/composer/composer/tests/Composer/Test/Downloader/PerforceDownloaderTest.php
index 8a20f67..3e2bce2 100644
--- a/vendor/composer/composer/tests/Composer/Test/Downloader/PerforceDownloaderTest.php
+++ b/vendor/composer/composer/tests/Composer/Test/Downloader/PerforceDownloaderTest.php
@@ -15,86 +15,145 @@ namespace Composer\Test\Downloader;
 use Composer\Downloader\PerforceDownloader;
 use Composer\Config;
 use Composer\Repository\VcsRepository;
+use Composer\IO\IOInterface;
 
 /**
  * @author Matt Whittom <Matt.Whittom@veteransunited.com>
  */
 class PerforceDownloaderTest extends \PHPUnit_Framework_TestCase
 {
-    private $io;
-    private $config;
-    private $testPath;
-    public static $repository;
+    protected $config;
+    protected $downloader;
+    protected $io;
+    protected $package;
+    protected $processExecutor;
+    protected $repoConfig;
+    protected $repository;
+    protected $testPath;
 
     protected function setUp()
     {
-        $this->testPath = sys_get_temp_dir() . '/composer-test';
-        $this->config = new Config();
-        $this->config->merge(
-            array(
-                 'config' => array(
-                     'home' => $this->testPath,
-                 ),
-            )
-        );
-        $this->io = $this->getMock('Composer\IO\IOInterface');
+        $this->testPath        = sys_get_temp_dir() . '/composer-test';
+        $this->repoConfig      = $this->getRepoConfig();
+        $this->config          = $this->getConfig();
+        $this->io              = $this->getMockIoInterface();
+        $this->processExecutor = $this->getMockProcessExecutor();
+        $this->repository      = $this->getMockRepository($this->repoConfig, $this->io, $this->config);
+        $this->package         = $this->getMockPackageInterface($this->repository);
+        $this->downloader      = new PerforceDownloader($this->io, $this->config, $this->processExecutor);
     }
 
-    public function testInitPerforceGetRepoConfig()
+    protected function tearDown()
+    {
+        $this->downloader = null;
+        $this->package    = null;
+        $this->repository = null;
+        $this->io         = null;
+        $this->config     = null;
+        $this->repoConfig = null;
+        $this->testPath   = null;
+    }
+
+    protected function getMockProcessExecutor()
+    {
+        return $this->getMock('Composer\Util\ProcessExecutor');
+    }
+
+    protected function getConfig()
+    {
+        $config = new Config();
+        $settings = array('config' => array('home' => $this->testPath));
+        $config->merge($settings);
+
+        return $config;
+    }
+
+    protected function getMockIoInterface()
+    {
+        return $this->getMock('Composer\IO\IOInterface');
+    }
+
+    protected function getMockPackageInterface(VcsRepository $repository)
     {
-        $downloader = new PerforceDownloader($this->io, $this->config);
         $package = $this->getMock('Composer\Package\PackageInterface');
-        $repoConfig = array('url' => 'TEST_URL', 'p4user' => 'TEST_USER');
-        $repository = $this->getMock(
-            'Composer\Repository\VcsRepository',
-            array('getRepoConfig'),
-            array($repoConfig, $this->io, $this->config)
-        );
-        $package->expects($this->at(0))
-            ->method('getRepository')
-            ->will($this->returnValue($repository));
-        $repository->expects($this->at(0))
-            ->method('getRepoConfig');
-        $path = $this->testPath;
-        $downloader->initPerforce($package, $path, 'SOURCE_REF');
+        $package->expects($this->any())->method('getRepository')->will($this->returnValue($repository));
+
+        return $package;
     }
 
-    public function testDoDownload()
+    protected function getRepoConfig()
+    {
+        return array('url' => 'TEST_URL', 'p4user' => 'TEST_USER');
+    }
+
+    protected function getMockRepository(array $repoConfig, IOInterface $io, Config $config)
+    {
+        $class = 'Composer\Repository\VcsRepository';
+        $methods = array('getRepoConfig');
+        $args = array($repoConfig, $io, $config);
+        $repository = $this->getMock($class, $methods, $args);
+        $repository->expects($this->any())->method('getRepoConfig')->will($this->returnValue($repoConfig));
+
+        return $repository;
+    }
+
+    public function testInitPerforceInstantiatesANewPerforceObject()
+    {
+        $this->downloader->initPerforce($this->package, $this->testPath, 'SOURCE_REF');
+    }
+
+    public function testInitPerforceDoesNothingIfPerforceAlreadySet()
+    {
+        $perforce = $this->getMockBuilder('Composer\Util\Perforce')->disableOriginalConstructor()->getMock();
+        $this->downloader->setPerforce($perforce);
+        $this->repository->expects($this->never())->method('getRepoConfig');
+        $this->downloader->initPerforce($this->package, $this->testPath, 'SOURCE_REF');
+    }
+
+    /**
+     * @depends testInitPerforceInstantiatesANewPerforceObject
+     * @depends testInitPerforceDoesNothingIfPerforceAlreadySet
+     */
+    public function testDoDownloadWithTag()
+    {
+        //I really don't like this test but the logic of each Perforce method is tested in the Perforce class.  Really I am just enforcing workflow.
+        $ref = 'SOURCE_REF@123';
+        $label = 123;
+        $this->package->expects($this->once())->method('getSourceReference')->will($this->returnValue($ref));
+        $this->io->expects($this->once())->method('write')->with($this->stringContains('Cloning '.$ref));
+        $perforceMethods = array('setStream', 'p4Login', 'writeP4ClientSpec', 'connectClient', 'syncCodeBase', 'cleanupClientSpec');
+        $perforce = $this->getMockBuilder('Composer\Util\Perforce', $perforceMethods)->disableOriginalConstructor()->getMock();
+        $perforce->expects($this->at(0))->method('initializePath')->with($this->equalTo($this->testPath));
+        $perforce->expects($this->at(1))->method('setStream')->with($this->equalTo($ref));
+        $perforce->expects($this->at(2))->method('p4Login')->with($this->identicalTo($this->io));
+        $perforce->expects($this->at(3))->method('writeP4ClientSpec');
+        $perforce->expects($this->at(4))->method('connectClient');
+        $perforce->expects($this->at(5))->method('syncCodeBase')->with($label);
+        $perforce->expects($this->at(6))->method('cleanupClientSpec');
+        $this->downloader->setPerforce($perforce);
+        $this->downloader->doDownload($this->package, $this->testPath, 'url');
+    }
+
+    /**
+     * @depends testInitPerforceInstantiatesANewPerforceObject
+     * @depends testInitPerforceDoesNothingIfPerforceAlreadySet
+     */
+    public function testDoDownloadWithNoTag()
     {
-        $downloader = new PerforceDownloader($this->io, $this->config);
-        $repoConfig = array('depot' => 'TEST_DEPOT', 'branch' => 'TEST_BRANCH', 'p4user' => 'TEST_USER');
-        $port = 'TEST_PORT';
-        $path = 'TEST_PATH';
-        $process = $this->getmock('Composer\Util\ProcessExecutor');
-        $perforce = $this->getMock(
-            'Composer\Util\Perforce',
-            array('setStream', 'queryP4User', 'writeP4ClientSpec', 'connectClient', 'syncCodeBase'),
-            array($repoConfig, $port, $path, $process, true, 'TEST')
-        );
         $ref = 'SOURCE_REF';
-        $label = 'LABEL';
-        $perforce->expects($this->at(0))
-            ->method('setStream')
-            ->with($this->equalTo($ref));
-        $perforce->expects($this->at(1))
-            ->method('queryP4User')
-            ->with($this->io);
-        $perforce->expects($this->at(2))
-            ->method('writeP4ClientSpec');
-        $perforce->expects($this->at(3))
-            ->method('connectClient');
-        $perforce->expects($this->at(4))
-            ->method('syncCodeBase')
-            ->with($this->equalTo($label));
-        $downloader->setPerforce($perforce);
-        $package = $this->getMock('Composer\Package\PackageInterface');
-        $package->expects($this->at(0))
-            ->method('getSourceReference')
-            ->will($this->returnValue($ref));
-        $package->expects($this->at(1))
-            ->method('getPrettyVersion')
-            ->will($this->returnValue($label));
-        $path = $this->testPath;
-        $downloader->doDownload($package, $path);
+        $label = null;
+        $this->package->expects($this->once())->method('getSourceReference')->will($this->returnValue($ref));
+        $this->io->expects($this->once())->method('write')->with($this->stringContains('Cloning '.$ref));
+        $perforceMethods = array('setStream', 'p4Login', 'writeP4ClientSpec', 'connectClient', 'syncCodeBase', 'cleanupClientSpec');
+        $perforce = $this->getMockBuilder('Composer\Util\Perforce', $perforceMethods)->disableOriginalConstructor()->getMock();
+        $perforce->expects($this->at(0))->method('initializePath')->with($this->equalTo($this->testPath));
+        $perforce->expects($this->at(1))->method('setStream')->with($this->equalTo($ref));
+        $perforce->expects($this->at(2))->method('p4Login')->with($this->identicalTo($this->io));
+        $perforce->expects($this->at(3))->method('writeP4ClientSpec');
+        $perforce->expects($this->at(4))->method('connectClient');
+        $perforce->expects($this->at(5))->method('syncCodeBase')->with($label);
+        $perforce->expects($this->at(6))->method('cleanupClientSpec');
+        $this->downloader->setPerforce($perforce);
+        $this->downloader->doDownload($this->package, $this->testPath, 'url');
     }
 }
diff --git a/vendor/composer/composer/tests/Composer/Test/Downloader/ZipDownloaderTest.php b/vendor/composer/composer/tests/Composer/Test/Downloader/ZipDownloaderTest.php
index bbe77d7..58e0078 100644
--- a/vendor/composer/composer/tests/Composer/Test/Downloader/ZipDownloaderTest.php
+++ b/vendor/composer/composer/tests/Composer/Test/Downloader/ZipDownloaderTest.php
@@ -28,7 +28,15 @@ class ZipDownloaderTest extends \PHPUnit_Framework_TestCase
         $packageMock = $this->getMock('Composer\Package\PackageInterface');
         $packageMock->expects($this->any())
             ->method('getDistUrl')
-            ->will($this->returnValue('file://'.__FILE__))
+            ->will($this->returnValue($distUrl = 'file://'.__FILE__))
+        ;
+        $packageMock->expects($this->any())
+            ->method('getDistUrls')
+            ->will($this->returnValue(array($distUrl)))
+        ;
+        $packageMock->expects($this->atLeastOnce())
+            ->method('getTransportOptions')
+            ->will($this->returnValue(array()))
         ;
 
         $io = $this->getMock('Composer\IO\IOInterface');
diff --git a/vendor/composer/composer/tests/Composer/Test/EventDispatcher/EventDispatcherTest.php b/vendor/composer/composer/tests/Composer/Test/EventDispatcher/EventDispatcherTest.php
index fd26b0a..69e1de2 100644
--- a/vendor/composer/composer/tests/Composer/Test/EventDispatcher/EventDispatcherTest.php
+++ b/vendor/composer/composer/tests/Composer/Test/EventDispatcher/EventDispatcherTest.php
@@ -14,8 +14,9 @@ namespace Composer\Test\EventDispatcher;
 
 use Composer\EventDispatcher\Event;
 use Composer\EventDispatcher\EventDispatcher;
+use Composer\Installer\InstallerEvents;
 use Composer\TestCase;
-use Composer\Script;
+use Composer\Script\ScriptEvents;
 use Composer\Util\ProcessExecutor;
 
 class EventDispatcherTest extends TestCase
@@ -34,7 +35,7 @@ class EventDispatcherTest extends TestCase
             ->method('write')
             ->with('<error>Script Composer\Test\EventDispatcher\EventDispatcherTest::call handling the post-install-cmd event terminated with an exception</error>');
 
-        $dispatcher->dispatchCommandEvent("post-install-cmd", false);
+        $dispatcher->dispatchCommandEvent(ScriptEvents::POST_INSTALL_CMD, false);
     }
 
     /**
@@ -63,7 +64,7 @@ class EventDispatcherTest extends TestCase
             ->with($command)
             ->will($this->returnValue(0));
 
-        $dispatcher->dispatchCommandEvent("post-install-cmd", false);
+        $dispatcher->dispatchCommandEvent(ScriptEvents::POST_INSTALL_CMD, false);
     }
 
     public function testDispatcherCanExecuteCliAndPhpInSameEventScriptStack()
@@ -99,7 +100,7 @@ class EventDispatcherTest extends TestCase
             ->with('Composer\Test\EventDispatcher\EventDispatcherTest', 'someMethod')
             ->will($this->returnValue(true));
 
-        $dispatcher->dispatchCommandEvent("post-install-cmd", false);
+        $dispatcher->dispatchCommandEvent(ScriptEvents::POST_INSTALL_CMD, false);
     }
 
     private function getDispatcherStubForListenersTest($listeners, $io)
@@ -145,7 +146,7 @@ class EventDispatcherTest extends TestCase
             ->will($this->returnValue($listener));
 
         ob_start();
-        $dispatcher->dispatchCommandEvent("post-install-cmd", false);
+        $dispatcher->dispatchCommandEvent(ScriptEvents::POST_INSTALL_CMD, false);
         $this->assertEquals('foo', trim(ob_get_clean()));
     }
 
@@ -171,7 +172,32 @@ class EventDispatcherTest extends TestCase
             ->with($this->equalTo('<error>Script '.$code.' handling the post-install-cmd event returned with an error</error>'));
 
         $this->setExpectedException('RuntimeException');
-        $dispatcher->dispatchCommandEvent("post-install-cmd", false);
+        $dispatcher->dispatchCommandEvent(ScriptEvents::POST_INSTALL_CMD, false);
+    }
+
+    public function testDispatcherInstallerEvents()
+    {
+        $process = $this->getMock('Composer\Util\ProcessExecutor');
+        $dispatcher = $this->getMockBuilder('Composer\EventDispatcher\EventDispatcher')
+            ->setConstructorArgs(array(
+                    $this->getMock('Composer\Composer'),
+                    $this->getMock('Composer\IO\IOInterface'),
+                    $process,
+                ))
+            ->setMethods(array('getListeners'))
+            ->getMock();
+
+        $dispatcher->expects($this->atLeastOnce())
+            ->method('getListeners')
+            ->will($this->returnValue(array()));
+
+        $policy = $this->getMock('Composer\DependencyResolver\PolicyInterface');
+        $pool = $this->getMockBuilder('Composer\DependencyResolver\Pool')->disableOriginalConstructor()->getMock();
+        $installedRepo = $this->getMockBuilder('Composer\Repository\CompositeRepository')->disableOriginalConstructor()->getMock();
+        $request = $this->getMockBuilder('Composer\DependencyResolver\Request')->disableOriginalConstructor()->getMock();
+
+        $dispatcher->dispatchInstallerEvent(InstallerEvents::PRE_DEPENDENCIES_SOLVING, $policy, $pool, $installedRepo, $request);
+        $dispatcher->dispatchInstallerEvent(InstallerEvents::POST_DEPENDENCIES_SOLVING, $policy, $pool, $installedRepo, $request, array());
     }
 
     public static function call()
diff --git a/vendor/composer/composer/tests/Composer/Test/Fixtures/installer/abandoned-listed.test b/vendor/composer/composer/tests/Composer/Test/Fixtures/installer/abandoned-listed.test
new file mode 100644
index 0000000..18f4773
--- /dev/null
+++ b/vendor/composer/composer/tests/Composer/Test/Fixtures/installer/abandoned-listed.test
@@ -0,0 +1,36 @@
+--TEST--
+Abandoned packages are flagged
+--COMPOSER--
+{
+    "repositories": [
+        {
+            "type": "package",
+            "package": [
+                { "name": "a/a", "version": "1.0.0", "abandoned": true }
+            ]
+        },
+        {
+            "type": "package",
+            "package": [
+                { "name": "c/c", "version": "1.0.0", "abandoned": "b/b" }
+            ]
+        }
+    ],
+    "require": {
+        "a/a": "1.0.0",
+        "c/c": "1.0.0"
+    }
+}
+--RUN--
+install
+--EXPECT-OUTPUT--
+<info>Loading composer repositories with package information</info>
+<info>Installing dependencies (including require-dev)</info>
+<error>Package a/a is abandoned, you should avoid using it. No replacement was suggested.</error>
+<error>Package c/c is abandoned, you should avoid using it. Use b/b instead.</error>
+<info>Writing lock file</info>
+<info>Generating autoload files</info>
+
+--EXPECT--
+Installing a/a (1.0.0)
+Installing c/c (1.0.0)
diff --git a/vendor/composer/composer/tests/Composer/Test/Fixtures/installer/broken-deps-do-not-replace.test b/vendor/composer/composer/tests/Composer/Test/Fixtures/installer/broken-deps-do-not-replace.test
new file mode 100644
index 0000000..e2593ba
--- /dev/null
+++ b/vendor/composer/composer/tests/Composer/Test/Fixtures/installer/broken-deps-do-not-replace.test
@@ -0,0 +1,42 @@
+--TEST--
+Broken dependencies should not lead to a replacer being installed which is not mentioned by name
+--COMPOSER--
+{
+    "repositories": [
+        {
+            "type": "package",
+            "package": [
+                { "name": "a/a", "version": "1.0.0" },
+                { "name": "b/b", "version": "1.0.0", "require": {"c/c": "1.*"} },
+                { "name": "c/c", "version": "1.0.0", "replace": {"a/a": "1.0.0" },"require":{"x/x": "1.0"}},
+                { "name": "d/d", "version": "1.0.0", "replace": {"a/a": "1.0.0", "c/c":"1.0.0" }}
+            ]
+        }
+    ],
+    "require": {
+        "a/a": "1.*",
+        "b/b": "1.*"
+    }
+}
+--RUN--
+install
+--EXPECT-OUTPUT--
+<info>Loading composer repositories with package information</info>
+<info>Installing dependencies (including require-dev)</info>
+<error>Your requirements could not be resolved to an installable set of packages.</error>
+
+  Problem 1
+    - c/c 1.0.0 requires x/x 1.0 -> no matching package found.
+    - b/b 1.0.0 requires c/c 1.* -> satisfiable by c/c[1.0.0].
+    - Installation request for b/b 1.* -> satisfiable by b/b[1.0.0].
+
+Potential causes:
+ - A typo in the package name
+ - The package is not available in a stable-enough version according to your minimum-stability setting
+   see <https://groups.google.com/d/topic/composer-dev/_g3ASeIFlrc/discussion> for more details.
+
+Read <http://getcomposer.org/doc/articles/troubleshooting.md> for further common problems.
+
+--EXPECT-EXIT-CODE--
+2
+--EXPECT--
diff --git a/vendor/composer/composer/tests/Composer/Test/Fixtures/installer/install-branch-alias-composer-repo.test b/vendor/composer/composer/tests/Composer/Test/Fixtures/installer/install-branch-alias-composer-repo.test
new file mode 100644
index 0000000..bad64fc
--- /dev/null
+++ b/vendor/composer/composer/tests/Composer/Test/Fixtures/installer/install-branch-alias-composer-repo.test
@@ -0,0 +1,19 @@
+--TEST--
+Installing branch aliased package from a Composer repository.
+--COMPOSER--
+{
+    "repositories": [
+        {
+            "type": "composer",
+            "url": "file://install-branch-alias-composer-repo"
+        }
+    ],
+    "require": {
+        "a/a": "3.2.*@dev"
+    }
+}
+--RUN--
+install
+--EXPECT--
+Installing a/a (dev-foobar abcdef0)
+Marking a/a (3.2.x-dev abcdef0) as installed, alias of a/a (dev-foobar abcdef0)
diff --git a/vendor/composer/composer/tests/Composer/Test/Fixtures/installer/install-branch-alias-composer-repo/packages.json b/vendor/composer/composer/tests/Composer/Test/Fixtures/installer/install-branch-alias-composer-repo/packages.json
new file mode 100644
index 0000000..d51c0be
--- /dev/null
+++ b/vendor/composer/composer/tests/Composer/Test/Fixtures/installer/install-branch-alias-composer-repo/packages.json
@@ -0,0 +1,23 @@
+{
+    "packages": {
+        "a/a": {
+            "dev-foobar": {
+                "name": "a/a",
+                "version": "dev-foobar",
+                "version_normalized": "dev-foobar",
+                "source": {
+                    "type": "git",
+                    "url": "git@example.com:repo.git",
+                    "reference": "abcdef0000000000000000000000000000000000"
+                },
+                "time": "2014-11-13 11:52:12",
+                "type": "library",
+                "extra": {
+                    "branch-alias": {
+                        "dev-foobar": "3.2.x-dev"
+                    }
+                }
+            }
+        }
+    }
+}
diff --git a/vendor/composer/composer/tests/Composer/Test/Fixtures/installer/install-dev-using-dist.test b/vendor/composer/composer/tests/Composer/Test/Fixtures/installer/install-dev-using-dist.test
index fe7582b..af4eed8 100644
--- a/vendor/composer/composer/tests/Composer/Test/Fixtures/installer/install-dev-using-dist.test
+++ b/vendor/composer/composer/tests/Composer/Test/Fixtures/installer/install-dev-using-dist.test
@@ -47,6 +47,7 @@ install --prefer-dist
     "stability-flags": {
         "a/a": 20
     },
+    "prefer-stable": false,
     "platform": [],
     "platform-dev": []
 }
diff --git a/vendor/composer/composer/tests/Composer/Test/Fixtures/installer/install-dev.test b/vendor/composer/composer/tests/Composer/Test/Fixtures/installer/install-dev.test
index 3b03675..b6543fb 100644
--- a/vendor/composer/composer/tests/Composer/Test/Fixtures/installer/install-dev.test
+++ b/vendor/composer/composer/tests/Composer/Test/Fixtures/installer/install-dev.test
@@ -19,7 +19,7 @@ Installs a package in dev env
     }
 }
 --RUN--
-install --dev
+install
 --EXPECT--
 Installing a/a (1.0.0)
-Installing a/b (1.0.0)
\ No newline at end of file
+Installing a/b (1.0.0)
diff --git a/vendor/composer/composer/tests/Composer/Test/Fixtures/installer/install-from-empty-lock.test b/vendor/composer/composer/tests/Composer/Test/Fixtures/installer/install-from-empty-lock.test
index 65b3fe8..88c3e8f 100644
--- a/vendor/composer/composer/tests/Composer/Test/Fixtures/installer/install-from-empty-lock.test
+++ b/vendor/composer/composer/tests/Composer/Test/Fixtures/installer/install-from-empty-lock.test
@@ -24,7 +24,8 @@ Requirements from the composer file are not installed if the lock file is presen
     "packages-dev": null,
     "aliases": [],
     "minimum-stability": "stable",
-    "stability-flags": []
+    "stability-flags": [],
+    "prefer-stable": false
 }
 --RUN--
 install
diff --git a/vendor/composer/composer/tests/Composer/Test/Fixtures/installer/install-ignore-platform-package-requirements.test b/vendor/composer/composer/tests/Composer/Test/Fixtures/installer/install-ignore-platform-package-requirements.test
new file mode 100644
index 0000000..7959b6e
--- /dev/null
+++ b/vendor/composer/composer/tests/Composer/Test/Fixtures/installer/install-ignore-platform-package-requirements.test
@@ -0,0 +1,22 @@
+--TEST--
+Install in ignore-platform-reqs mode
+--COMPOSER--
+{
+    "repositories": [
+        {
+            "type": "package",
+            "package": [
+                { "name": "a/a", "version": "1.0.0", "require": { "ext-testdummy": "*", "php": "98" } }
+            ]
+        }
+    ],
+    "require": {
+        "a/a": "1.0.0",
+        "php": "99.9",
+        "ext-dummy2": "3"
+    }
+}
+--RUN--
+install --ignore-platform-reqs
+--EXPECT--
+Installing a/a (1.0.0)
diff --git a/vendor/composer/composer/tests/Composer/Test/Fixtures/installer/install-missing-alias-from-lock.test b/vendor/composer/composer/tests/Composer/Test/Fixtures/installer/install-missing-alias-from-lock.test
index e5ddacf..2988466 100644
--- a/vendor/composer/composer/tests/Composer/Test/Fixtures/installer/install-missing-alias-from-lock.test
+++ b/vendor/composer/composer/tests/Composer/Test/Fixtures/installer/install-missing-alias-from-lock.test
@@ -32,7 +32,8 @@ Installing an old alias that doesn't exist anymore from a lock is possible
     "packages-dev": null,
     "aliases": [],
     "minimum-stability": "dev",
-    "stability-flags": []
+    "stability-flags": [],
+    "prefer-stable": false
 }
 --RUN--
 install
diff --git a/vendor/composer/composer/tests/Composer/Test/Fixtures/installer/partial-update-downgrades-non-whitelisted-unstable.test b/vendor/composer/composer/tests/Composer/Test/Fixtures/installer/partial-update-downgrades-non-whitelisted-unstable.test
index fb618eb..f9fd505 100644
--- a/vendor/composer/composer/tests/Composer/Test/Fixtures/installer/partial-update-downgrades-non-whitelisted-unstable.test
+++ b/vendor/composer/composer/tests/Composer/Test/Fixtures/installer/partial-update-downgrades-non-whitelisted-unstable.test
@@ -35,6 +35,7 @@ Partial update from lock file should apply lock file and downgrade unstable pack
     "stability-flags": {
         "b/unstable": 15
     },
+    "prefer-stable": false,
     "platform": [],
     "platform-dev": []
 }
@@ -57,6 +58,7 @@ update c/uptodate
     "aliases": [],
     "minimum-stability": "stable",
     "stability-flags": [],
+    "prefer-stable": false,
     "platform": [],
     "platform-dev": []
 }
diff --git a/vendor/composer/composer/tests/Composer/Test/Fixtures/installer/partial-update-from-lock.test b/vendor/composer/composer/tests/Composer/Test/Fixtures/installer/partial-update-from-lock.test
index 51368b8..5b904f9 100644
--- a/vendor/composer/composer/tests/Composer/Test/Fixtures/installer/partial-update-from-lock.test
+++ b/vendor/composer/composer/tests/Composer/Test/Fixtures/installer/partial-update-from-lock.test
@@ -35,6 +35,7 @@ Partial update from lock file should update everything to the state of the lock,
     "stability-flags": {
         "b/unstable": 15
     },
+    "prefer-stable": false,
     "platform": [],
     "platform-dev": []
 }
@@ -57,6 +58,7 @@ update b/unstable
     "aliases": [],
     "minimum-stability": "stable",
     "stability-flags": [],
+    "prefer-stable": false,
     "platform": [],
     "platform-dev": []
 }
diff --git a/vendor/composer/composer/tests/Composer/Test/Fixtures/installer/partial-update-without-lock.test b/vendor/composer/composer/tests/Composer/Test/Fixtures/installer/partial-update-without-lock.test
index 146277d..224e58f 100644
--- a/vendor/composer/composer/tests/Composer/Test/Fixtures/installer/partial-update-without-lock.test
+++ b/vendor/composer/composer/tests/Composer/Test/Fixtures/installer/partial-update-without-lock.test
@@ -42,6 +42,7 @@ update b/unstable
     "aliases": [],
     "minimum-stability": "stable",
     "stability-flags": [],
+    "prefer-stable": false,
     "platform": [],
     "platform-dev": []
 }
diff --git a/vendor/composer/composer/tests/Composer/Test/Fixtures/installer/plugins-are-installed-first.test b/vendor/composer/composer/tests/Composer/Test/Fixtures/installer/plugins-are-installed-first.test
index c57a36d..ad34e9c 100644
--- a/vendor/composer/composer/tests/Composer/Test/Fixtures/installer/plugins-are-installed-first.test
+++ b/vendor/composer/composer/tests/Composer/Test/Fixtures/installer/plugins-are-installed-first.test
@@ -1,5 +1,5 @@
 --TEST--
-Composer installers are installed first if they have no requirements
+Composer installers are installed first if they have no meaningful requirements
 --COMPOSER--
 {
     "repositories": [
@@ -9,20 +9,23 @@ Composer installers are installed first if they have no requirements
                 { "name": "pkg", "version": "1.0.0" },
                 { "name": "pkg2", "version": "1.0.0" },
                 { "name": "inst", "version": "1.0.0", "type": "composer-plugin" },
-                { "name": "inst2", "version": "1.0.0", "type": "composer-plugin", "require": { "pkg2": "*" } }
+                { "name": "inst-with-req", "version": "1.0.0", "type": "composer-plugin", "require": { "php": ">=5", "ext-json": "*", "composer-plugin-api": "*" } },
+                { "name": "inst-with-req2", "version": "1.0.0", "type": "composer-plugin", "require": { "pkg2": "*" } }
             ]
         }
     ],
     "require": {
         "pkg": "1.0.0",
         "inst": "1.0.0",
-        "inst2": "1.0.0"
+        "inst-with-req2": "1.0.0",
+        "inst-with-req": "1.0.0"
     }
 }
 --RUN--
 install
 --EXPECT--
 Installing inst (1.0.0)
+Installing inst-with-req (1.0.0)
 Installing pkg (1.0.0)
 Installing pkg2 (1.0.0)
-Installing inst2 (1.0.0)
+Installing inst-with-req2 (1.0.0)
diff --git a/vendor/composer/composer/tests/Composer/Test/Fixtures/installer/provide-priorities.test b/vendor/composer/composer/tests/Composer/Test/Fixtures/installer/provide-priorities.test
deleted file mode 100644
index f97e16e..0000000
--- a/vendor/composer/composer/tests/Composer/Test/Fixtures/installer/provide-priorities.test
+++ /dev/null
@@ -1,34 +0,0 @@
---TEST--
-Provide only applies when no existing package has the given name
---COMPOSER--
-{
-    "repositories": [
-        {
-            "type": "package",
-            "package": [
-                { "name": "higher-prio-hijacker", "version": "1.1.0", "provide": { "package": "1.0.0" } },
-                { "name": "provider2", "version": "1.1.0", "provide": { "package2": "1.0.0" } }
-            ]
-        },
-        {
-            "type": "package",
-            "package": [
-                { "name": "package", "version": "0.9.0" },
-                { "name": "package", "version": "1.0.0" },
-                { "name": "hijacker", "version": "1.1.0", "provide": { "package": "1.0.0" } },
-                { "name": "provider3", "version": "1.1.0", "provide": { "package3": "1.0.0" } }
-            ]
-        }
-    ],
-    "require": {
-        "package": "1.*",
-        "package2": "1.*",
-        "provider3": "1.1.0"
-    }
-}
---RUN--
-install
---EXPECT--
-Installing package (1.0.0)
-Installing provider2 (1.1.0)
-Installing provider3 (1.1.0)
diff --git a/vendor/composer/composer/tests/Composer/Test/Fixtures/installer/replace-alias.test b/vendor/composer/composer/tests/Composer/Test/Fixtures/installer/replace-alias.test
new file mode 100644
index 0000000..327fb5a
--- /dev/null
+++ b/vendor/composer/composer/tests/Composer/Test/Fixtures/installer/replace-alias.test
@@ -0,0 +1,25 @@
+--TEST--
+Ensure a replacer package deals with branch aliases
+--COMPOSER--
+{
+    "repositories": [
+        {
+            "type": "package",
+            "package": [
+                { "name": "a/a", "version": "dev-master", "replace": {"c/c": "self.version" }, "extra": { "branch-alias": {"dev-master": "1.0.x-dev"} } },
+                { "name": "b/b", "version": "1.0.0", "require": {"c/c": "1.*"} },
+                { "name": "c/c", "version": "dev-master", "extra": { "branch-alias": {"dev-master": "1.0.x-dev"} } }
+            ]
+        }
+    ],
+    "require": {
+        "a/a": "dev-master",
+        "b/b": "1.*"
+    }
+}
+--RUN--
+install
+--EXPECT--
+Installing a/a (dev-master)
+Marking a/a (1.0.x-dev) as installed, alias of a/a (dev-master)
+Installing b/b (1.0.0)
diff --git a/vendor/composer/composer/tests/Composer/Test/Fixtures/installer/replace-priorities.test b/vendor/composer/composer/tests/Composer/Test/Fixtures/installer/replace-priorities.test
index 2f27ba7..d69dd9a 100644
--- a/vendor/composer/composer/tests/Composer/Test/Fixtures/installer/replace-priorities.test
+++ b/vendor/composer/composer/tests/Composer/Test/Fixtures/installer/replace-priorities.test
@@ -1,5 +1,5 @@
 --TEST--
-Replace takes precedence only in higher priority repositories
+Replace takes precedence only in higher priority repositories and if explicitly required
 --COMPOSER--
 {
     "repositories": [
@@ -14,13 +14,15 @@ Replace takes precedence only in higher priority repositories
             "package": [
                 { "name": "package", "version": "1.0.0" },
                 { "name": "package2", "version": "1.0.0" },
+                { "name": "package3", "version": "1.0.0", "require": { "forked": "*" } },
                 { "name": "hijacker", "version": "1.1.0", "replace": { "package": "1.1.0" } }
             ]
         }
     ],
     "require": {
         "package": "1.*",
-        "package2": "1.*"
+        "package2": "1.*",
+        "package3": "1.*"
     }
 }
 --RUN--
@@ -28,3 +30,4 @@ install
 --EXPECT--
 Installing package (1.0.0)
 Installing forked (1.1.0)
+Installing package3 (1.0.0)
diff --git a/vendor/composer/composer/tests/Composer/Test/Fixtures/installer/replace-root-require.test b/vendor/composer/composer/tests/Composer/Test/Fixtures/installer/replace-root-require.test
new file mode 100644
index 0000000..c00ac4f
--- /dev/null
+++ b/vendor/composer/composer/tests/Composer/Test/Fixtures/installer/replace-root-require.test
@@ -0,0 +1,24 @@
+--TEST--
+Ensure a transiently required replacer can replace root requirements
+--COMPOSER--
+{
+    "repositories": [
+        {
+            "type": "package",
+            "package": [
+                { "name": "a/a", "version": "1.0.0" },
+                { "name": "b/b", "version": "1.0.0", "require": {"c/c": "1.*"} },
+                { "name": "c/c", "version": "1.0.0", "replace": {"a/a": "1.0.0" }}
+            ]
+        }
+    ],
+    "require": {
+        "a/a": "1.*",
+        "b/b": "1.*"
+    }
+}
+--RUN--
+install
+--EXPECT--
+Installing c/c (1.0.0)
+Installing b/b (1.0.0)
diff --git a/vendor/composer/composer/tests/Composer/Test/Fixtures/installer/replace-vendor-priorities.test b/vendor/composer/composer/tests/Composer/Test/Fixtures/installer/replace-vendor-priorities.test
deleted file mode 100644
index 86c491f..0000000
--- a/vendor/composer/composer/tests/Composer/Test/Fixtures/installer/replace-vendor-priorities.test
+++ /dev/null
@@ -1,21 +0,0 @@
---TEST--
-Replacer of the same vendor takes precedence if same prio repo
---COMPOSER--
-{
-    "repositories": [
-        {
-            "type": "package",
-            "package": [
-                { "name": "b/replacer", "version": "1.1.0", "replace": { "a/package": "1.1.0" } },
-                { "name": "a/replacer", "version": "1.1.0", "replace": { "a/package": "1.1.0" } }
-            ]
-        }
-    ],
-    "require": {
-        "a/package": "1.*"
-    }
-}
---RUN--
-install
---EXPECT--
-Installing a/replacer (1.1.0)
diff --git a/vendor/composer/composer/tests/Composer/Test/Fixtures/installer/suggest-installed.test b/vendor/composer/composer/tests/Composer/Test/Fixtures/installer/suggest-installed.test
index f46102d..94f6c20 100644
--- a/vendor/composer/composer/tests/Composer/Test/Fixtures/installer/suggest-installed.test
+++ b/vendor/composer/composer/tests/Composer/Test/Fixtures/installer/suggest-installed.test
@@ -20,10 +20,10 @@ Suggestions are not displayed for installed packages
 install
 --EXPECT-OUTPUT--
 <info>Loading composer repositories with package information</info>
-<info>Installing dependencies</info>
+<info>Installing dependencies (including require-dev)</info>
 <info>Writing lock file</info>
 <info>Generating autoload files</info>
 
 --EXPECT--
 Installing a/a (1.0.0)
-Installing b/b (1.0.0)
\ No newline at end of file
+Installing b/b (1.0.0)
diff --git a/vendor/composer/composer/tests/Composer/Test/Fixtures/installer/suggest-prod.test b/vendor/composer/composer/tests/Composer/Test/Fixtures/installer/suggest-prod.test
new file mode 100644
index 0000000..290ccf4
--- /dev/null
+++ b/vendor/composer/composer/tests/Composer/Test/Fixtures/installer/suggest-prod.test
@@ -0,0 +1,26 @@
+--TEST--
+Suggestions are not displayed in non-dev mode
+--COMPOSER--
+{
+    "repositories": [
+        {
+            "type": "package",
+            "package": [
+                { "name": "a/a", "version": "1.0.0", "suggest": { "b/b": "an obscure reason" } }
+            ]
+        }
+    ],
+    "require": {
+        "a/a": "1.0.0"
+    }
+}
+--RUN--
+install --no-dev
+--EXPECT-OUTPUT--
+<info>Loading composer repositories with package information</info>
+<info>Installing dependencies</info>
+<info>Writing lock file</info>
+<info>Generating autoload files</info>
+
+--EXPECT--
+Installing a/a (1.0.0)
diff --git a/vendor/composer/composer/tests/Composer/Test/Fixtures/installer/suggest-replaced.test b/vendor/composer/composer/tests/Composer/Test/Fixtures/installer/suggest-replaced.test
index d1e8f61..99d13a7 100644
--- a/vendor/composer/composer/tests/Composer/Test/Fixtures/installer/suggest-replaced.test
+++ b/vendor/composer/composer/tests/Composer/Test/Fixtures/installer/suggest-replaced.test
@@ -6,7 +6,7 @@ Suggestions are not displayed for packages if they are replaced
         {
             "type": "package",
             "package": [
-                { "name": "a/a", "version": "1.0.0", "suggest": { "b/b": "an obscure reason" } },
+                { "name": "a/a", "version": "1.0.0", "suggest": { "b/b": "an obscure reason" }, "require": { "c/c": "*" } },
                 { "name": "c/c", "version": "1.0.0", "replace": { "b/b": "1.0.0" } }
             ]
         }
@@ -20,10 +20,10 @@ Suggestions are not displayed for packages if they are replaced
 install
 --EXPECT-OUTPUT--
 <info>Loading composer repositories with package information</info>
-<info>Installing dependencies</info>
+<info>Installing dependencies (including require-dev)</info>
 <info>Writing lock file</info>
 <info>Generating autoload files</info>
 
 --EXPECT--
+Installing c/c (1.0.0)
 Installing a/a (1.0.0)
-Installing c/c (1.0.0)
\ No newline at end of file
diff --git a/vendor/composer/composer/tests/Composer/Test/Fixtures/installer/suggest-uninstalled.test b/vendor/composer/composer/tests/Composer/Test/Fixtures/installer/suggest-uninstalled.test
index d2ea377..d7e026e 100644
--- a/vendor/composer/composer/tests/Composer/Test/Fixtures/installer/suggest-uninstalled.test
+++ b/vendor/composer/composer/tests/Composer/Test/Fixtures/installer/suggest-uninstalled.test
@@ -18,10 +18,10 @@ Suggestions are displayed
 install
 --EXPECT-OUTPUT--
 <info>Loading composer repositories with package information</info>
-<info>Installing dependencies</info>
+<info>Installing dependencies (including require-dev)</info>
 a/a suggests installing b/b (an obscure reason)
 <info>Writing lock file</info>
 <info>Generating autoload files</info>
 
 --EXPECT--
-Installing a/a (1.0.0)
\ No newline at end of file
+Installing a/a (1.0.0)
diff --git a/vendor/composer/composer/tests/Composer/Test/Fixtures/installer/update-alias-lock.test b/vendor/composer/composer/tests/Composer/Test/Fixtures/installer/update-alias-lock.test
index ad9451c..bfe0bb8 100644
--- a/vendor/composer/composer/tests/Composer/Test/Fixtures/installer/update-alias-lock.test
+++ b/vendor/composer/composer/tests/Composer/Test/Fixtures/installer/update-alias-lock.test
@@ -38,7 +38,8 @@ Update aliased package does not mess up the lock file
     "packages-dev": null,
     "aliases": [],
     "minimum-stability": "dev",
-    "stability-flags": []
+    "stability-flags": [],
+    "prefer-stable": false
 }
 --INSTALLED--
 [
@@ -64,8 +65,9 @@ update
     "aliases": [],
     "minimum-stability": "dev",
     "stability-flags": [],
+    "prefer-stable": false,
     "platform": [],
     "platform-dev": []
 }
 --EXPECT--
-Updating a/a (dev-master 1234) to a/a (dev-master master)
\ No newline at end of file
+Updating a/a (dev-master 1234) to a/a (dev-master master)
diff --git a/vendor/composer/composer/tests/Composer/Test/Fixtures/installer/update-all-dry-run.test b/vendor/composer/composer/tests/Composer/Test/Fixtures/installer/update-all-dry-run.test
index 191f974..cca859e 100644
--- a/vendor/composer/composer/tests/Composer/Test/Fixtures/installer/update-all-dry-run.test
+++ b/vendor/composer/composer/tests/Composer/Test/Fixtures/installer/update-all-dry-run.test
@@ -34,7 +34,7 @@ Updates updateable packages in dry-run mode
     { "name": "a/b", "version": "1.0.0" }
 ]
 --RUN--
-update --dev --dry-run
+update --dry-run
 --EXPECT--
 Updating a/a (1.0.0) to a/a (1.0.1)
 Updating a/b (1.0.0) to a/b (2.0.0)
diff --git a/vendor/composer/composer/tests/Composer/Test/Fixtures/installer/update-all.test b/vendor/composer/composer/tests/Composer/Test/Fixtures/installer/update-all.test
index ad5e1d3..a9bb435 100644
--- a/vendor/composer/composer/tests/Composer/Test/Fixtures/installer/update-all.test
+++ b/vendor/composer/composer/tests/Composer/Test/Fixtures/installer/update-all.test
@@ -34,7 +34,7 @@ Updates updateable packages
     { "name": "a/b", "version": "1.0.0" }
 ]
 --RUN--
-update --dev
+update
 --EXPECT--
 Updating a/a (1.0.0) to a/a (1.0.1)
-Updating a/b (1.0.0) to a/b (2.0.0)
\ No newline at end of file
+Updating a/b (1.0.0) to a/b (2.0.0)
diff --git a/vendor/composer/composer/tests/Composer/Test/Fixtures/installer/update-ignore-platform-package-requirements.test b/vendor/composer/composer/tests/Composer/Test/Fixtures/installer/update-ignore-platform-package-requirements.test
new file mode 100644
index 0000000..02f94cd
--- /dev/null
+++ b/vendor/composer/composer/tests/Composer/Test/Fixtures/installer/update-ignore-platform-package-requirements.test
@@ -0,0 +1,26 @@
+--TEST--
+Update in ignore-platform-reqs mode
+--COMPOSER--
+{
+    "repositories": [
+        {
+            "type": "package",
+            "package": [
+                { "name": "a/a", "version": "1.0.1", "require": { "ext-testdummy": "*" } }
+            ]
+        }
+    ],
+    "require": {
+        "a/a": "1.0.*",
+        "php": "99.9",
+        "ext-dummy2": "9"
+    }
+}
+--INSTALLED--
+[
+    { "name": "a/a", "version": "1.0.0" }
+]
+--RUN--
+update --ignore-platform-reqs
+--EXPECT--
+Updating a/a (1.0.0) to a/a (1.0.1)
diff --git a/vendor/composer/composer/tests/Composer/Test/Fixtures/installer/update-installed-reference-dry-run.test b/vendor/composer/composer/tests/Composer/Test/Fixtures/installer/update-installed-reference-dry-run.test
new file mode 100644
index 0000000..3c9036b
--- /dev/null
+++ b/vendor/composer/composer/tests/Composer/Test/Fixtures/installer/update-installed-reference-dry-run.test
@@ -0,0 +1,30 @@
+--TEST--
+Updating a dev package forcing it's reference, using dry run, should not do anything if the referenced version is the installed one
+--COMPOSER--
+{
+    "repositories": [
+        {
+            "type": "package",
+            "package": [
+                {
+                    "name": "a/a", "version": "dev-master",
+                    "source": { "reference": "abc123", "url": "", "type": "git" }
+                }
+            ]
+        }
+    ],
+    "require": {
+        "a/a": "dev-master#def000"
+    }
+}
+--INSTALLED--
+[
+    {
+        "name": "a/a", "version": "dev-master",
+        "source": { "reference": "def000", "url": "", "type": "git" },
+        "dist": { "reference": "def000", "url": "", "type": "zip", "shasum": "" }
+    }
+]
+--RUN--
+update --dry-run
+--EXPECT--
diff --git a/vendor/composer/composer/tests/Composer/Test/Fixtures/installer/update-installed-reference.test b/vendor/composer/composer/tests/Composer/Test/Fixtures/installer/update-installed-reference.test
new file mode 100644
index 0000000..e6814cc
--- /dev/null
+++ b/vendor/composer/composer/tests/Composer/Test/Fixtures/installer/update-installed-reference.test
@@ -0,0 +1,30 @@
+--TEST--
+Updating a dev package forcing it's reference should not do anything if the referenced version is the installed one
+--COMPOSER--
+{
+    "repositories": [
+        {
+            "type": "package",
+            "package": [
+                {
+                    "name": "a/a", "version": "dev-master",
+                    "source": { "reference": "abc123", "url": "", "type": "git" }
+                }
+            ]
+        }
+    ],
+    "require": {
+        "a/a": "dev-master#def000"
+    }
+}
+--INSTALLED--
+[
+    {
+        "name": "a/a", "version": "dev-master",
+        "source": { "reference": "def000", "url": "", "type": "git" },
+        "dist": { "reference": "def000", "url": "", "type": "zip", "shasum": "" }
+    }
+]
+--RUN--
+update
+--EXPECT--
diff --git a/vendor/composer/composer/tests/Composer/Test/Fixtures/installer/update-whitelist-patterns.test b/vendor/composer/composer/tests/Composer/Test/Fixtures/installer/update-whitelist-patterns.test
index e8aa593..de1fb1b 100644
--- a/vendor/composer/composer/tests/Composer/Test/Fixtures/installer/update-whitelist-patterns.test
+++ b/vendor/composer/composer/tests/Composer/Test/Fixtures/installer/update-whitelist-patterns.test
@@ -45,4 +45,4 @@ update vendor/Test* exact/Test-Package notexact/Test all/* no/reg?xp
 Updating vendor/Test-Package (1.0) to vendor/Test-Package (2.0)
 Updating exact/Test-Package (1.0) to exact/Test-Package (2.0)
 Updating all/Package1 (1.0) to all/Package1 (2.0)
-Updating all/Package2 (1.0) to all/Package2 (2.0)
\ No newline at end of file
+Updating all/Package2 (1.0) to all/Package2 (2.0)
diff --git a/vendor/composer/composer/tests/Composer/Test/Fixtures/installer/update-whitelist-reads-lock.test b/vendor/composer/composer/tests/Composer/Test/Fixtures/installer/update-whitelist-reads-lock.test
index d73b935..3bc1890 100644
--- a/vendor/composer/composer/tests/Composer/Test/Fixtures/installer/update-whitelist-reads-lock.test
+++ b/vendor/composer/composer/tests/Composer/Test/Fixtures/installer/update-whitelist-reads-lock.test
@@ -31,7 +31,8 @@ Limited update takes rules from lock if available, and not from the installed re
     "packages-dev": null,
     "aliases": [],
     "minimum-stability": "stable",
-    "stability-flags": []
+    "stability-flags": [],
+    "prefer-stable": false
 }
 --INSTALLED--
 [
diff --git a/vendor/composer/composer/tests/Composer/Test/Fixtures/installer/updating-dev-from-lock-removes-old-deps.test b/vendor/composer/composer/tests/Composer/Test/Fixtures/installer/updating-dev-from-lock-removes-old-deps.test
index f5c4ccc..bd94617 100644
--- a/vendor/composer/composer/tests/Composer/Test/Fixtures/installer/updating-dev-from-lock-removes-old-deps.test
+++ b/vendor/composer/composer/tests/Composer/Test/Fixtures/installer/updating-dev-from-lock-removes-old-deps.test
@@ -19,7 +19,8 @@ Installing locked dev packages should remove old dependencies
     "packages-dev": null,
     "aliases": [],
     "minimum-stability": "dev",
-    "stability-flags": []
+    "stability-flags": [],
+    "prefer-stable": false
 }
 --INSTALLED--
 [
diff --git a/vendor/composer/composer/tests/Composer/Test/Fixtures/installer/updating-dev-updates-url-and-reference.test b/vendor/composer/composer/tests/Composer/Test/Fixtures/installer/updating-dev-updates-url-and-reference.test
index 3eb7017..8492968 100644
--- a/vendor/composer/composer/tests/Composer/Test/Fixtures/installer/updating-dev-updates-url-and-reference.test
+++ b/vendor/composer/composer/tests/Composer/Test/Fixtures/installer/updating-dev-updates-url-and-reference.test
@@ -31,7 +31,8 @@ Updating a dev package for new reference updates the url and reference
     "packages-dev": null,
     "aliases": [],
     "minimum-stability": "dev",
-    "stability-flags": {"a/a":20}
+    "stability-flags": {"a/a":20},
+    "prefer-stable": false
 }
 --INSTALLED--
 [
@@ -57,6 +58,7 @@ update
     "aliases": [],
     "minimum-stability": "dev",
     "stability-flags": {"a/a":20},
+    "prefer-stable": false,
     "platform": [],
     "platform-dev": []
 }
diff --git a/vendor/composer/composer/tests/Composer/Test/Installer/InstallerEventTest.php b/vendor/composer/composer/tests/Composer/Test/Installer/InstallerEventTest.php
new file mode 100644
index 0000000..7cd63f6
--- /dev/null
+++ b/vendor/composer/composer/tests/Composer/Test/Installer/InstallerEventTest.php
@@ -0,0 +1,39 @@
+<?php
+
+/*
+ * This file is part of Composer.
+ *
+ * (c) Nils Adermann <naderman@naderman.de>
+ *     Jordi Boggiano <j.boggiano@seld.be>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Composer\Test\Installer;
+
+use Composer\Installer\InstallerEvent;
+
+class InstallerEventTest extends \PHPUnit_Framework_TestCase
+{
+    public function testGetter()
+    {
+        $composer = $this->getMock('Composer\Composer');
+        $io = $this->getMock('Composer\IO\IOInterface');
+        $policy = $this->getMock('Composer\DependencyResolver\PolicyInterface');
+        $pool = $this->getMockBuilder('Composer\DependencyResolver\Pool')->disableOriginalConstructor()->getMock();
+        $installedRepo = $this->getMockBuilder('Composer\Repository\CompositeRepository')->disableOriginalConstructor()->getMock();
+        $request = $this->getMockBuilder('Composer\DependencyResolver\Request')->disableOriginalConstructor()->getMock();
+        $operations = array($this->getMock('Composer\DependencyResolver\Operation\OperationInterface'));
+        $event = new InstallerEvent('EVENT_NAME', $composer, $io, $policy, $pool, $installedRepo, $request, $operations);
+
+        $this->assertSame('EVENT_NAME', $event->getName());
+        $this->assertInstanceOf('Composer\Composer', $event->getComposer());
+        $this->assertInstanceOf('Composer\IO\IOInterface', $event->getIO());
+        $this->assertInstanceOf('Composer\DependencyResolver\PolicyInterface', $event->getPolicy());
+        $this->assertInstanceOf('Composer\DependencyResolver\Pool', $event->getPool());
+        $this->assertInstanceOf('Composer\Repository\CompositeRepository', $event->getInstalledRepo());
+        $this->assertInstanceOf('Composer\DependencyResolver\Request', $event->getRequest());
+        $this->assertCount(1, $event->getOperations());
+    }
+}
diff --git a/vendor/composer/composer/tests/Composer/Test/InstallerTest.php b/vendor/composer/composer/tests/Composer/Test/InstallerTest.php
index 0cc17cf..4dc0bf5 100644
--- a/vendor/composer/composer/tests/Composer/Test/InstallerTest.php
+++ b/vendor/composer/composer/tests/Composer/Test/InstallerTest.php
@@ -51,7 +51,7 @@ class InstallerTest extends TestCase
     {
         $io = $this->getMock('Composer\IO\IOInterface');
 
-        $downloadManager = $this->getMock('Composer\Downloader\DownloadManager');
+        $downloadManager = $this->getMock('Composer\Downloader\DownloadManager', array(), array($io));
         $config = $this->getMock('Composer\Config');
 
         $repositoryManager = new RepositoryManager($io, $config);
@@ -138,7 +138,7 @@ class InstallerTest extends TestCase
     /**
      * @dataProvider getIntegrationTests
      */
-    public function testIntegration($file, $message, $condition, $composerConfig, $lock, $installed, $run, $expectLock, $expectOutput, $expect)
+    public function testIntegration($file, $message, $condition, $composerConfig, $lock, $installed, $run, $expectLock, $expectOutput, $expect, $expectExitCode)
     {
         if ($condition) {
             eval('$res = '.$condition.';');
@@ -152,7 +152,7 @@ class InstallerTest extends TestCase
         $io->expects($this->any())
             ->method('write')
             ->will($this->returnCallback(function ($text, $newline) use (&$output) {
-                $output .= $text . ($newline ? "\n":"");
+                $output .= $text . ($newline ? "\n" : "");
             }));
 
         $composer = FactoryMock::create($io, $composerConfig);
@@ -203,19 +203,21 @@ class InstallerTest extends TestCase
         $application = new Application;
         $application->get('install')->setCode(function ($input, $output) use ($installer) {
             $installer
-                ->setDevMode($input->getOption('dev'))
-                ->setDryRun($input->getOption('dry-run'));
+                ->setDevMode(!$input->getOption('no-dev'))
+                ->setDryRun($input->getOption('dry-run'))
+                ->setIgnorePlatformRequirements($input->getOption('ignore-platform-reqs'));
 
             return $installer->run();
         });
 
         $application->get('update')->setCode(function ($input, $output) use ($installer) {
             $installer
-                ->setDevMode($input->getOption('dev'))
+                ->setDevMode(!$input->getOption('no-dev'))
                 ->setUpdate(true)
                 ->setDryRun($input->getOption('dry-run'))
                 ->setUpdateWhitelist($input->getArgument('packages'))
-                ->setWhitelistDependencies($input->getOption('with-dependencies'));
+                ->setWhitelistDependencies($input->getOption('with-dependencies'))
+                ->setIgnorePlatformRequirements($input->getOption('ignore-platform-reqs'));
 
             return $installer->run();
         });
@@ -228,7 +230,7 @@ class InstallerTest extends TestCase
         $appOutput = fopen('php://memory', 'w+');
         $result = $application->run(new StringInput($run), new StreamOutput($appOutput));
         fseek($appOutput, 0);
-        $this->assertEquals(0, $result, $output . stream_get_contents($appOutput));
+        $this->assertEquals($expectExitCode, $result, $output . stream_get_contents($appOutput));
 
         if ($expectLock) {
             unset($actualLock['hash']);
@@ -266,6 +268,7 @@ class InstallerTest extends TestCase
                 --RUN--\s*(?P<run>.*?)\s*
                 (?:--EXPECT-LOCK--\s*(?P<expectLock>'.$content.'))?\s*
                 (?:--EXPECT-OUTPUT--\s*(?P<expectOutput>'.$content.'))?\s*
+                (?:--EXPECT-EXIT-CODE--\s*(?P<expectExitCode>\d+))?\s*
                 --EXPECT--\s*(?P<expect>.*?)\s*
             $}xs';
 
@@ -273,12 +276,29 @@ class InstallerTest extends TestCase
             $installedDev = array();
             $lock = array();
             $expectLock = array();
+            $expectExitCode = 0;
 
             if (preg_match($pattern, $test, $match)) {
                 try {
                     $message = $match['test'];
                     $condition = !empty($match['condition']) ? $match['condition'] : null;
                     $composer = JsonFile::parseJson($match['composer']);
+
+                    if (isset($composer['repositories'])) {
+                        foreach ($composer['repositories'] as &$repo) {
+                            if ($repo['type'] !== 'composer') {
+                                continue;
+                            }
+
+                            // Change paths like file://foobar to file:///path/to/fixtures
+                            if (preg_match('{^file://[^/]}', $repo['url'])) {
+                                $repo['url'] = 'file://' . strtr($fixturesDir, '\\', '/') . '/' . substr($repo['url'], 7);
+                            }
+
+                            unset($repo);
+                        }
+                    }
+
                     if (!empty($match['lock'])) {
                         $lock = JsonFile::parseJson($match['lock']);
                         if (!isset($lock['hash'])) {
@@ -294,6 +314,7 @@ class InstallerTest extends TestCase
                     }
                     $expectOutput = $match['expectOutput'];
                     $expect = $match['expect'];
+                    $expectExitCode = (int) $match['expectExitCode'];
                 } catch (\Exception $e) {
                     die(sprintf('Test "%s" is not valid: '.$e->getMessage(), str_replace($fixturesDir.'/', '', $file)));
                 }
@@ -301,7 +322,7 @@ class InstallerTest extends TestCase
                 die(sprintf('Test "%s" is not valid, did not match the expected format.', str_replace($fixturesDir.'/', '', $file)));
             }
 
-            $tests[] = array(str_replace($fixturesDir.'/', '', $file), $message, $condition, $composer, $lock, $installed, $run, $expectLock, $expectOutput, $expect);
+            $tests[basename($file)] = array(str_replace($fixturesDir.'/', '', $file), $message, $condition, $composer, $lock, $installed, $run, $expectLock, $expectOutput, $expect, $expectExitCode);
         }
 
         return $tests;
diff --git a/vendor/composer/composer/tests/Composer/Test/Json/JsonFileTest.php b/vendor/composer/composer/tests/Composer/Test/Json/JsonFileTest.php
index 79a1e40..9036a23 100644
--- a/vendor/composer/composer/tests/Composer/Test/Json/JsonFileTest.php
+++ b/vendor/composer/composer/tests/Composer/Test/Json/JsonFileTest.php
@@ -132,12 +132,8 @@ class JsonFileTest extends \PHPUnit_Framework_TestCase
     {
         $data = array('test' => array(), 'test2' => new \stdClass);
         $json = '{
-    "test": [
-
-    ],
-    "test2": {
-
-    }
+    "test": [],
+    "test2": {}
 }';
         $this->assertJsonFormat($json, $data);
     }
@@ -198,6 +194,18 @@ class JsonFileTest extends \PHPUnit_Framework_TestCase
         $this->assertJsonFormat('"\\u018c"', $data, 0);
     }
 
+    public function testDoubleEscapedUnicode()
+    {
+        $jsonFile = new JsonFile('composer.json');
+        $data = array("Zdjęcia","hjkjhl\\u0119kkjk");
+        $encodedData = $jsonFile->encode($data);
+        $doubleEncodedData = $jsonFile->encode(array('t' => $encodedData));
+
+        $decodedData = json_decode($doubleEncodedData, true);
+        $doubleData = json_decode($decodedData['t'], true);
+        $this->assertEquals($data, $doubleData);
+    }
+
     private function expectParseException($text, $json)
     {
         try {
@@ -218,5 +226,4 @@ class JsonFileTest extends \PHPUnit_Framework_TestCase
             $this->assertEquals($json, $file->encode($data, $options));
         }
     }
-
 }
diff --git a/vendor/composer/composer/tests/Composer/Test/Json/JsonFormatterTest.php b/vendor/composer/composer/tests/Composer/Test/Json/JsonFormatterTest.php
new file mode 100644
index 0000000..557312f
--- /dev/null
+++ b/vendor/composer/composer/tests/Composer/Test/Json/JsonFormatterTest.php
@@ -0,0 +1,49 @@
+<?php
+
+/*
+ * This file is part of Composer.
+ *
+ * (c) Nils Adermann <naderman@naderman.de>
+ *     Jordi Boggiano <j.boggiano@seld.be>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Composer\Test\Json;
+
+use Composer\Json\JsonFormatter;
+
+class JsonFormatterTest extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * Test if \u0119 (196+153) will get correctly formatted
+     * See ticket #2613
+     */
+    public function testUnicodeWithPrependedSlash()
+    {
+        if (!extension_loaded('mbstring')) {
+            $this->markTestSkipped('Test requires the mbstring extension');
+        }
+
+        $data = '"' . chr(92) . chr(92) . chr(92) . 'u0119"';
+        $encodedData = JsonFormatter::format($data, true, true);
+        $expected = '34+92+92+196+153+34';
+        $this->assertEquals($expected, $this->getCharacterCodes($encodedData));
+    }
+
+    /**
+     * Convert string to character codes split by a plus sign
+     * @param  string $string
+     * @return string
+     */
+    protected function getCharacterCodes($string)
+    {
+        $codes = array();
+        for ($i = 0; $i < strlen($string); $i++) {
+            $codes[] = ord($string[$i]);
+        }
+
+        return implode('+', $codes);
+    }
+}
diff --git a/vendor/composer/composer/tests/Composer/Test/Json/JsonManipulatorTest.php b/vendor/composer/composer/tests/Composer/Test/Json/JsonManipulatorTest.php
index 5ed6edd..1a0f976 100644
--- a/vendor/composer/composer/tests/Composer/Test/Json/JsonManipulatorTest.php
+++ b/vendor/composer/composer/tests/Composer/Test/Json/JsonManipulatorTest.php
@@ -189,6 +189,95 @@ class JsonManipulatorTest extends \PHPUnit_Framework_TestCase
 }
 '
             ),
+            array(
+                '{
+    "require": {
+        "php": "5.*"
+    }
+}',
+                'require-dev',
+                'foo',
+                'qux',
+                '{
+    "require": {
+        "php": "5.*"
+    },
+    "require-dev": {
+        "foo": "qux"
+    }
+}
+'
+            ),
+            array(
+                '{
+    "require": {
+        "php": "5.*"
+    },
+    "require-dev": {
+        "foo": "bar"
+    }
+}',
+                'require-dev',
+                'foo',
+                'qux',
+                '{
+    "require": {
+        "php": "5.*"
+    },
+    "require-dev": {
+        "foo": "qux"
+    }
+}
+'
+            ),
+            array(
+                '{
+    "repositories": [{
+        "type": "package",
+        "package": {
+            "bar": "ba[z",
+            "dist": {
+                "url": "http...",
+                "type": "zip"
+            },
+            "autoload": {
+                "classmap": [ "foo/bar" ]
+            }
+        }
+    }],
+    "require": {
+        "php": "5.*"
+    },
+    "require-dev": {
+        "foo": "bar"
+    }
+}',
+                'require-dev',
+                'foo',
+                'qux',
+                '{
+    "repositories": [{
+        "type": "package",
+        "package": {
+            "bar": "ba[z",
+            "dist": {
+                "url": "http...",
+                "type": "zip"
+            },
+            "autoload": {
+                "classmap": [ "foo/bar" ]
+            }
+        }
+    }],
+    "require": {
+        "php": "5.*"
+    },
+    "require-dev": {
+        "foo": "qux"
+    }
+}
+'
+            ),
         );
     }
 
@@ -308,6 +397,71 @@ class JsonManipulatorTest extends \PHPUnit_Framework_TestCase
 }
 '
             ),
+            'works on undefined ones' => array(
+                '{
+    "repositories": {
+        "main": {
+            "foo": "bar",
+            "bar": "baz"
+        }
+    }
+}',
+                'removenotthere',
+                true,
+                '{
+    "repositories": {
+        "main": {
+            "foo": "bar",
+            "bar": "baz"
+        }
+    }
+}
+'
+            ),
+            'works on child having unmatched name' => array(
+                '{
+    "repositories": {
+        "baz": {
+            "foo": "bar",
+            "bar": "baz"
+        }
+    }
+}',
+                'bar',
+                true,
+                '{
+    "repositories": {
+        "baz": {
+            "foo": "bar",
+            "bar": "baz"
+        }
+    }
+}
+'
+            ),
+            'works on child having duplicate name' => array(
+                '{
+    "repositories": {
+        "foo": {
+            "baz": "qux"
+        },
+        "baz": {
+            "foo": "bar",
+            "bar": "baz"
+        }
+    }
+}',
+                'baz',
+                true,
+                '{
+    "repositories": {
+        "foo": {
+            "baz": "qux"
+        }
+    }
+}
+'
+            ),
             'works on empty repos' => array(
                 '{
     "repositories": {
@@ -366,6 +520,24 @@ class JsonManipulatorTest extends \PHPUnit_Framework_TestCase
                 'bar',
                 false
             ),
+            'fails on deep arrays with borked texts' => array(
+                '{
+    "repositories": [{
+        "package": { "bar": "ba[z" }
+    }]
+}',
+                'bar',
+                false
+            ),
+            'fails on deep arrays with borked texts2' => array(
+                '{
+    "repositories": [{
+        "package": { "bar": "ba]z" }
+    }]
+}',
+                'bar',
+                false
+            ),
         );
     }
 
@@ -629,6 +801,24 @@ class JsonManipulatorTest extends \PHPUnit_Framework_TestCase
 ', $manipulator->getContents());
     }
 
+    public function testAddRootSettingDoesNotBreakDots()
+    {
+        $manipulator = new JsonManipulator('{
+    "github-oauth": {
+        "github.com": "foo"
+    }
+}');
+
+        $this->assertTrue($manipulator->addSubNode('github-oauth', 'bar', 'baz'));
+        $this->assertEquals('{
+    "github-oauth": {
+        "github.com": "foo",
+        "bar": "baz"
+    }
+}
+', $manipulator->getContents());
+    }
+
     public function testRemoveConfigSettingCanRemoveSubKeyInHash()
     {
         $manipulator = new JsonManipulator('{
@@ -725,4 +915,27 @@ class JsonManipulatorTest extends \PHPUnit_Framework_TestCase
 }
 ', $manipulator->getContents());
     }
+
+    public function testUpdateMainKey3()
+    {
+        $manipulator = new JsonManipulator('{
+    "require": {
+        "php": "5.*"
+    },
+    "require-dev": {
+        "foo": "bar"
+    }
+}');
+
+        $this->assertTrue($manipulator->addMainKey('require-dev', array('foo' => 'qux')));
+        $this->assertEquals('{
+    "require": {
+        "php": "5.*"
+    },
+    "require-dev": {
+        "foo": "qux"
+    }
+}
+', $manipulator->getContents());
+    }
 }
diff --git a/vendor/composer/composer/tests/Composer/Test/Json/JsonValidationExceptionTest.php b/vendor/composer/composer/tests/Composer/Test/Json/JsonValidationExceptionTest.php
new file mode 100644
index 0000000..76959d6
--- /dev/null
+++ b/vendor/composer/composer/tests/Composer/Test/Json/JsonValidationExceptionTest.php
@@ -0,0 +1,42 @@
+<?php
+
+/*
+ * This file is part of Composer.
+ *
+ * (c) Nils Adermann <naderman@naderman.de>
+ *     Jordi Boggiano <j.boggiano@seld.be>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Composer\Test\Json;
+
+use Composer\Json\JsonValidationException;
+
+class JsonValidationExceptionTest extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * @dataProvider errorProvider
+     */
+    public function testGetErrors($message, $errors)
+    {
+        $object = new JsonValidationException($message, $errors);
+        $this->assertEquals($message, $object->getMessage());
+        $this->assertEquals($errors, $object->getErrors());
+    }
+
+    public function testGetErrorsWhenNoErrorsProvided()
+    {
+        $object = new JsonValidationException('test message');
+        $this->assertEquals(array(), $object->getErrors());
+    }
+
+    public function errorProvider()
+    {
+        return array(
+            array('test message', array()),
+            array(null, null)
+        );
+    }
+}
diff --git a/vendor/composer/composer/tests/Composer/Test/Mock/FactoryMock.php b/vendor/composer/composer/tests/Composer/Test/Mock/FactoryMock.php
index 11b2665..75d2a23 100644
--- a/vendor/composer/composer/tests/Composer/Test/Mock/FactoryMock.php
+++ b/vendor/composer/composer/tests/Composer/Test/Mock/FactoryMock.php
@@ -21,7 +21,7 @@ use Composer\IO\IOInterface;
 
 class FactoryMock extends Factory
 {
-    public static function createConfig()
+    public static function createConfig(IOInterface $io = null)
     {
         $config = new Config();
 
diff --git a/vendor/composer/composer/tests/Composer/Test/Mock/RemoteFilesystemMock.php b/vendor/composer/composer/tests/Composer/Test/Mock/RemoteFilesystemMock.php
index caf1c5e..79a25e5 100644
--- a/vendor/composer/composer/tests/Composer/Test/Mock/RemoteFilesystemMock.php
+++ b/vendor/composer/composer/tests/Composer/Test/Mock/RemoteFilesystemMock.php
@@ -36,5 +36,4 @@ class RemoteFilesystemMock extends RemoteFilesystem
 
         throw new TransportException('The "'.$fileUrl.'" file could not be downloaded (NOT FOUND)', 404);
     }
-
 }
diff --git a/vendor/composer/composer/tests/Composer/Test/Package/Archiver/ArchivableFilesFinderTest.php b/vendor/composer/composer/tests/Composer/Test/Package/Archiver/ArchivableFilesFinderTest.php
index 536f212..bc74be1 100644
--- a/vendor/composer/composer/tests/Composer/Test/Package/Archiver/ArchivableFilesFinderTest.php
+++ b/vendor/composer/composer/tests/Composer/Test/Package/Archiver/ArchivableFilesFinderTest.php
@@ -46,6 +46,24 @@ class ArchivableFilesFinderTest extends \PHPUnit_Framework_TestCase
             'B/sub/prefixD.foo',
             'B/sub/prefixE.foo',
             'B/sub/prefixF.foo',
+            'C/prefixA.foo',
+            'C/prefixB.foo',
+            'C/prefixC.foo',
+            'C/prefixD.foo',
+            'C/prefixE.foo',
+            'C/prefixF.foo',
+            'D/prefixA',
+            'D/prefixB',
+            'D/prefixC',
+            'D/prefixD',
+            'D/prefixE',
+            'D/prefixF',
+            'E/subtestA.foo',
+            'F/subtestA.foo',
+            'G/subtestA.foo',
+            'H/subtestA.foo',
+            'I/J/subtestA.foo',
+            'K/dirJ/subtestA.foo',
             'toplevelA.foo',
             'toplevelB.foo',
             'prefixA.foo',
@@ -54,6 +72,10 @@ class ArchivableFilesFinderTest extends \PHPUnit_Framework_TestCase
             'prefixD.foo',
             'prefixE.foo',
             'prefixF.foo',
+            'parameters.yml',
+            'parameters.yml.dist',
+            '!important!.txt',
+            '!important_too!.txt'
         );
 
         foreach ($fileTree as $relativePath) {
@@ -82,6 +104,8 @@ class ArchivableFilesFinderTest extends \PHPUnit_Framework_TestCase
         $this->finder = new ArchivableFilesFinder($this->sources, $excludes);
 
         $this->assertArchivableFiles(array(
+            '/!important!.txt',
+            '/!important_too!.txt',
             '/A/prefixA.foo',
             '/A/prefixD.foo',
             '/A/prefixE.foo',
@@ -91,6 +115,24 @@ class ArchivableFilesFinderTest extends \PHPUnit_Framework_TestCase
             '/B/sub/prefixD.foo',
             '/B/sub/prefixE.foo',
             '/B/sub/prefixF.foo',
+            '/C/prefixA.foo',
+            '/C/prefixD.foo',
+            '/C/prefixE.foo',
+            '/C/prefixF.foo',
+            '/D/prefixA',
+            '/D/prefixB',
+            '/D/prefixC',
+            '/D/prefixD',
+            '/D/prefixE',
+            '/D/prefixF',
+            '/E/subtestA.foo',
+            '/F/subtestA.foo',
+            '/G/subtestA.foo',
+            '/H/subtestA.foo',
+            '/I/J/subtestA.foo',
+            '/K/dirJ/subtestA.foo',
+            '/parameters.yml',
+            '/parameters.yml.dist',
             '/prefixB.foo',
             '/prefixD.foo',
             '/prefixE.foo',
@@ -120,6 +162,15 @@ class ArchivableFilesFinderTest extends \PHPUnit_Framework_TestCase
             '!/*/*/prefixF.foo',
             '',
             'refixD.foo',
+            '/C',
+            'D/prefixA',
+            'E',
+            'F/',
+            'G/*',
+            'H/**',
+            'J/',
+            'parameters.yml',
+            '\!important!.txt'
         )));
 
         // git does not currently support negative git attributes
@@ -160,9 +211,15 @@ class ArchivableFilesFinderTest extends \PHPUnit_Framework_TestCase
             '# comments',
             '',
             '^prefixD.foo',
+            'D/prefixA',
+            'parameters.yml',
+            '\!important!.txt',
+            'E',
+            'F/',
             'syntax: glob',
             'prefixF.*',
             'B/*',
+            'H/**',
         )));
 
         $this->finder = new ArchivableFilesFinder($this->sources, array());
@@ -173,7 +230,9 @@ class ArchivableFilesFinderTest extends \PHPUnit_Framework_TestCase
             'hg archive archive.zip'
         );
 
-        array_shift($expectedFiles); // remove .hg_archival.txt
+        // Remove .hg_archival.txt from the expectedFiles
+        $archiveKey = array_search('/.hg_archival.txt', $expectedFiles);
+        array_splice($expectedFiles, $archiveKey, 1);
 
         $this->assertArchivableFiles($expectedFiles);
     }
diff --git a/vendor/composer/composer/tests/Composer/Test/Package/Archiver/ArchiveManagerTest.php b/vendor/composer/composer/tests/Composer/Test/Package/Archiver/ArchiveManagerTest.php
index 5a9f8c2..aa98a62 100644
--- a/vendor/composer/composer/tests/Composer/Test/Package/Archiver/ArchiveManagerTest.php
+++ b/vendor/composer/composer/tests/Composer/Test/Package/Archiver/ArchiveManagerTest.php
@@ -13,7 +13,6 @@
 namespace Composer\Test\Package\Archiver;
 
 use Composer\Factory;
-use Composer\Package\Archiver;
 use Composer\Package\PackageInterface;
 
 class ArchiveManagerTest extends ArchiverTest
diff --git a/vendor/composer/composer/tests/Composer/Test/Package/Archiver/GitExcludeFilterTest.php b/vendor/composer/composer/tests/Composer/Test/Package/Archiver/GitExcludeFilterTest.php
new file mode 100644
index 0000000..97c02c8
--- /dev/null
+++ b/vendor/composer/composer/tests/Composer/Test/Package/Archiver/GitExcludeFilterTest.php
@@ -0,0 +1,36 @@
+<?php
+
+/*
+ * This file is part of Composer.
+ *
+ * (c) Nils Adermann <naderman@naderman.de>
+ *     Jordi Boggiano <j.boggiano@seld.be>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Composer\Test\Package\Archiver;
+
+use Composer\Package\Archiver\GitExcludeFilter;
+
+class GitExcludeFilterTest extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * @dataProvider patterns
+     */
+    public function testPatternEscape($ignore, $expected)
+    {
+        $filter = new GitExcludeFilter('/');
+
+        $this->assertEquals($expected, $filter->parseGitIgnoreLine($ignore));
+    }
+
+    public function patterns()
+    {
+        return array(
+            array('app/config/parameters.yml', array('#(?=[^\.])app/(?=[^\.])config/(?=[^\.])parameters\.yml(?=$|/)#', false, false)),
+            array('!app/config/parameters.yml', array('#(?=[^\.])app/(?=[^\.])config/(?=[^\.])parameters\.yml(?=$|/)#', true, false)),
+        );
+    }
+}
diff --git a/vendor/composer/composer/tests/Composer/Test/Package/Dumper/ArrayDumperTest.php b/vendor/composer/composer/tests/Composer/Test/Package/Dumper/ArrayDumperTest.php
index 4b98775..f1889a1 100644
--- a/vendor/composer/composer/tests/Composer/Test/Package/Dumper/ArrayDumperTest.php
+++ b/vendor/composer/composer/tests/Composer/Test/Package/Dumper/ArrayDumperTest.php
@@ -62,12 +62,33 @@ class ArrayDumperTest extends \PHPUnit_Framework_TestCase
         $this->assertSame('dev', $config['minimum-stability']);
     }
 
+    public function testDumpAbandoned()
+    {
+        $this->packageExpects('isAbandoned', true);
+        $this->packageExpects('getReplacementPackage', true);
+
+        $config = $this->dumper->dump($this->package);
+
+        $this->assertSame(true, $config['abandoned']);
+    }
+
+    public function testDumpAbandonedReplacement()
+    {
+        $this->packageExpects('isAbandoned', true);
+        $this->packageExpects('getReplacementPackage', 'foo/bar');
+
+        $config = $this->dumper->dump($this->package);
+
+        $this->assertSame('foo/bar', $config['abandoned']);
+    }
+
     /**
      * @dataProvider getKeys
      */
     public function testKeys($key, $value, $method = null, $expectedValue = null)
     {
         $this->packageExpects('get'.ucfirst($method ?: $key), $value);
+        $this->packageExpects('isAbandoned', $value);
 
         $config = $this->dumper->dump($this->package);
 
@@ -194,6 +215,11 @@ class ArrayDumperTest extends \PHPUnit_Framework_TestCase
                 array(new Link('foo', 'foo/bar', new VersionConstraint('=', '1.0.0.0'), 'requires', '1.0.0'), new Link('bar', 'bar/baz', new VersionConstraint('=', '1.0.0.0'), 'requires', '1.0.0')),
                 'conflicts',
                 array('bar/baz' => '1.0.0', 'foo/bar' => '1.0.0')
+            ),
+            array(
+                'transport-options',
+                array('ssl' => array('local_cert' => '/opt/certs/test.pem')),
+                'transportOptions'
             )
         );
     }
diff --git a/vendor/composer/composer/tests/Composer/Test/Package/Loader/ArrayLoaderTest.php b/vendor/composer/composer/tests/Composer/Test/Package/Loader/ArrayLoaderTest.php
index 248e251..6e4e2f5 100644
--- a/vendor/composer/composer/tests/Composer/Test/Package/Loader/ArrayLoaderTest.php
+++ b/vendor/composer/composer/tests/Composer/Test/Package/Loader/ArrayLoaderTest.php
@@ -19,7 +19,7 @@ class ArrayLoaderTest extends \PHPUnit_Framework_TestCase
 {
     public function setUp()
     {
-        $this->loader = new ArrayLoader();
+        $this->loader = new ArrayLoader(null, true);
     }
 
     public function testSelfVersion()
@@ -117,6 +117,8 @@ class ArrayLoaderTest extends \PHPUnit_Framework_TestCase
             'archive' => array(
                 'exclude' => array('/foo/bar', 'baz', '!/foo/bar/baz'),
             ),
+            'transport-options' => array('ssl' => array('local_cert' => '/opt/certs/test.pem')),
+            'abandoned' => 'foo/bar'
         );
 
         $package = $this->loader->load($config);
@@ -137,4 +139,28 @@ class ArrayLoaderTest extends \PHPUnit_Framework_TestCase
         $this->assertInstanceOf('Composer\Package\AliasPackage', $package);
         $this->assertEquals('1.0.x-dev', $package->getPrettyVersion());
     }
+
+    public function testAbandoned()
+    {
+        $config = array(
+            'name' => 'A',
+            'version' => '1.2.3.4',
+            'abandoned' => 'foo/bar'
+        );
+
+        $package = $this->loader->load($config);
+        $this->assertTrue($package->isAbandoned());
+        $this->assertEquals('foo/bar', $package->getReplacementPackage());
+    }
+
+    public function testNotAbandoned()
+    {
+        $config = array(
+            'name' => 'A',
+            'version' => '1.2.3.4'
+        );
+
+        $package = $this->loader->load($config);
+        $this->assertFalse($package->isAbandoned());
+    }
 }
diff --git a/vendor/composer/composer/tests/Composer/Test/Package/Loader/RootPackageLoaderTest.php b/vendor/composer/composer/tests/Composer/Test/Package/Loader/RootPackageLoaderTest.php
index 1a6a3bf..51799d0 100644
--- a/vendor/composer/composer/tests/Composer/Test/Package/Loader/RootPackageLoaderTest.php
+++ b/vendor/composer/composer/tests/Composer/Test/Package/Loader/RootPackageLoaderTest.php
@@ -35,7 +35,7 @@ class RootPackageLoaderTest extends \PHPUnit_Framework_TestCase
         $self = $this;
 
         /* Can do away with this mock object when https://github.com/sebastianbergmann/phpunit-mock-objects/issues/81 is fixed */
-        $processExecutor = new ProcessExecutorMock(function($command, &$output = null, $cwd = null) use ($self, $commitHash) {
+        $processExecutor = new ProcessExecutorMock(function ($command, &$output = null, $cwd = null) use ($self, $commitHash) {
             if (0 === strpos($command, 'git describe')) {
                 // simulate not being on a tag
                 return 1;
@@ -69,7 +69,7 @@ class RootPackageLoaderTest extends \PHPUnit_Framework_TestCase
         $self = $this;
 
         /* Can do away with this mock object when https://github.com/sebastianbergmann/phpunit-mock-objects/issues/81 is fixed */
-        $processExecutor = new ProcessExecutorMock(function($command, &$output = null, $cwd = null) use ($self) {
+        $processExecutor = new ProcessExecutorMock(function ($command, &$output = null, $cwd = null) use ($self) {
             $self->assertEquals('git describe --exact-match --tags', $command);
 
             $output = "v2.0.5-alpha2";
@@ -98,7 +98,7 @@ class RootPackageLoaderTest extends \PHPUnit_Framework_TestCase
         $self = $this;
 
         /* Can do away with this mock object when https://github.com/sebastianbergmann/phpunit-mock-objects/issues/81 is fixed */
-        $processExecutor = new ProcessExecutorMock(function($command, &$output = null, $cwd = null) use ($self) {
+        $processExecutor = new ProcessExecutorMock(function ($command, &$output = null, $cwd = null) use ($self) {
             if ('git describe --exact-match --tags' === $command) {
                 $output = "foo-bar";
 
@@ -124,7 +124,7 @@ class RootPackageLoaderTest extends \PHPUnit_Framework_TestCase
             ->disableOriginalConstructor()
             ->getMock();
 
-        $processExecutor = new ProcessExecutorMock(function($command, &$output = null, $cwd = null) {
+        $processExecutor = new ProcessExecutorMock(function ($command, &$output = null, $cwd = null) {
             return 1;
         });
 
diff --git a/vendor/composer/composer/tests/Composer/Test/Package/Loader/ValidatingArrayLoaderTest.php b/vendor/composer/composer/tests/Composer/Test/Package/Loader/ValidatingArrayLoaderTest.php
index 9b1982b..23c47c3 100644
--- a/vendor/composer/composer/tests/Composer/Test/Package/Loader/ValidatingArrayLoaderTest.php
+++ b/vendor/composer/composer/tests/Composer/Test/Package/Loader/ValidatingArrayLoaderTest.php
@@ -29,7 +29,7 @@ class ValidatingArrayLoaderTest extends \PHPUnit_Framework_TestCase
             ->method('load')
             ->with($config);
 
-        $loader = new ValidatingArrayLoader($internalLoader);
+        $loader = new ValidatingArrayLoader($internalLoader, true, null, ValidatingArrayLoader::CHECK_ALL);
         $loader->load($config);
     }
 
@@ -73,14 +73,17 @@ class ValidatingArrayLoaderTest extends \PHPUnit_Framework_TestCase
                     ),
                     'require' => array(
                         'a/b' => '1.*',
+                        'b/c' => '~2',
                         'example' => '>2.0-dev,<2.4-dev',
                     ),
                     'require-dev' => array(
                         'a/b' => '1.*',
+                        'b/c' => '*',
                         'example' => '>2.0-dev,<2.4-dev',
                     ),
                     'conflict' => array(
                         'a/b' => '1.*',
+                        'b/c' => '>2.7',
                         'example' => '>2.0-dev,<2.4-dev',
                     ),
                     'replace' => array(
@@ -143,6 +146,7 @@ class ValidatingArrayLoaderTest extends \PHPUnit_Framework_TestCase
                         'bin/foo',
                         'bin/bar',
                     ),
+                    'transport-options' => array('ssl' => array('local_cert' => '/opt/certs/test.pem'))
                 ),
             ),
             array( // test as array
@@ -160,7 +164,7 @@ class ValidatingArrayLoaderTest extends \PHPUnit_Framework_TestCase
     public function testLoadFailureThrowsException($config, $expectedErrors)
     {
         $internalLoader = $this->getMock('Composer\Package\Loader\LoaderInterface');
-        $loader = new ValidatingArrayLoader($internalLoader);
+        $loader = new ValidatingArrayLoader($internalLoader, true, null, ValidatingArrayLoader::CHECK_ALL);
         try {
             $loader->load($config);
             $this->fail('Expected exception to be thrown');
@@ -178,7 +182,7 @@ class ValidatingArrayLoaderTest extends \PHPUnit_Framework_TestCase
     public function testLoadWarnings($config, $expectedWarnings)
     {
         $internalLoader = $this->getMock('Composer\Package\Loader\LoaderInterface');
-        $loader = new ValidatingArrayLoader($internalLoader);
+        $loader = new ValidatingArrayLoader($internalLoader, true, null, ValidatingArrayLoader::CHECK_ALL);
 
         $loader->load($config);
         $warnings = $loader->getWarnings();
@@ -190,15 +194,20 @@ class ValidatingArrayLoaderTest extends \PHPUnit_Framework_TestCase
     /**
      * @dataProvider warningProvider
      */
-    public function testLoadSkipsWarningDataWhenIgnoringErrors($config)
+    public function testLoadSkipsWarningDataWhenIgnoringErrors($config, $expectedWarnings, $mustCheck = true)
     {
+        if (!$mustCheck) {
+            $this->assertTrue(true);
+
+            return;
+        }
         $internalLoader = $this->getMock('Composer\Package\Loader\LoaderInterface');
         $internalLoader
             ->expects($this->once())
             ->method('load')
             ->with(array('name' => 'a/b'));
 
-        $loader = new ValidatingArrayLoader($internalLoader);
+        $loader = new ValidatingArrayLoader($internalLoader, true, null, ValidatingArrayLoader::CHECK_ALL);
         $config['name'] = 'a/b';
         $loader->load($config);
     }
@@ -256,6 +265,15 @@ class ValidatingArrayLoaderTest extends \PHPUnit_Framework_TestCase
                     'autoload : invalid value (psr0), must be one of psr-0, psr-4, classmap, files'
                 )
             ),
+            array(
+                array(
+                    'name' => 'foo/bar',
+                    'transport-options' => 'test',
+                ),
+                array(
+                    'transport-options : should be an array, string given'
+                )
+            ),
         );
     }
 
@@ -288,6 +306,24 @@ class ValidatingArrayLoaderTest extends \PHPUnit_Framework_TestCase
                     'support.wiki : invalid value (foo:bar), must be an http/https URL',
                 )
             ),
+            array(
+                array(
+                    'name' => 'foo/bar',
+                    'require' => array(
+                        'foo/baz' => '*',
+                        'bar/baz' => '>=1.0',
+                        'bar/foo' => 'dev-master',
+                        'bar/hacked' => '@stable',
+                    ),
+                ),
+                array(
+                    'require.foo/baz : unbound version constraints (*) should be avoided',
+                    'require.bar/baz : unbound version constraints (>=1.0) should be avoided',
+                    'require.bar/foo : unbound version constraints (dev-master) should be avoided',
+                    'require.bar/hacked : unbound version constraints (@stable) should be avoided',
+                ),
+                false
+            ),
         );
     }
 }
diff --git a/vendor/composer/composer/tests/Composer/Test/Package/LockerTest.php b/vendor/composer/composer/tests/Composer/Test/Package/LockerTest.php
index 1b879f4..7e1d2d3 100644
--- a/vendor/composer/composer/tests/Composer/Test/Package/LockerTest.php
+++ b/vendor/composer/composer/tests/Composer/Test/Package/LockerTest.php
@@ -120,7 +120,9 @@ class LockerTest extends \PHPUnit_Framework_TestCase
             ->expects($this->once())
             ->method('write')
             ->with(array(
-                '_readme' => array('This file locks the dependencies of your project to a known state', 'Read more about it at http://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file'),
+                '_readme' => array('This file locks the dependencies of your project to a known state',
+                                   'Read more about it at http://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file',
+                                   'This file is @gener'.'ated automatically'),
                 'hash' => 'md5',
                 'packages' => array(
                     array('name' => 'pkg1', 'version' => '1.0.0-beta'),
@@ -132,9 +134,10 @@ class LockerTest extends \PHPUnit_Framework_TestCase
                 'stability-flags' => array(),
                 'platform' => array(),
                 'platform-dev' => array(),
+                'prefer-stable' => false,
             ));
 
-        $locker->setLockData(array($package1, $package2), array(), array(), array(), array(), 'dev', array());
+        $locker->setLockData(array($package1, $package2), array(), array(), array(), array(), 'dev', array(), false);
     }
 
     public function testLockBadPackages()
@@ -153,7 +156,7 @@ class LockerTest extends \PHPUnit_Framework_TestCase
 
         $this->setExpectedException('LogicException');
 
-        $locker->setLockData(array($package1), array(), array(), array(), array(), 'dev', array());
+        $locker->setLockData(array($package1), array(), array(), array(), array(), 'dev', array(), false);
     }
 
     public function testIsFresh()
diff --git a/vendor/composer/composer/tests/Composer/Test/Package/Version/VersionParserTest.php b/vendor/composer/composer/tests/Composer/Test/Package/Version/VersionParserTest.php
index 18b5c49..25c2b98 100644
--- a/vendor/composer/composer/tests/Composer/Test/Package/Version/VersionParserTest.php
+++ b/vendor/composer/composer/tests/Composer/Test/Package/Version/VersionParserTest.php
@@ -54,7 +54,7 @@ class VersionParserTest extends \PHPUnit_Framework_TestCase
         );
 
         $self = $this;
-        $createPackage = function($arr) use ($self) {
+        $createPackage = function ($arr) use ($self) {
             $package = $self->getMock('\Composer\Package\PackageInterface');
             $package->expects($self->once())->method('isDev')->will($self->returnValue(true));
             $package->expects($self->once())->method('getSourceType')->will($self->returnValue('git'));
@@ -79,34 +79,36 @@ class VersionParserTest extends \PHPUnit_Framework_TestCase
     public function successfulNormalizedVersions()
     {
         return array(
-            'none'              => array('1.0.0',               '1.0.0.0'),
-            'none/2'            => array('1.2.3.4',             '1.2.3.4'),
-            'parses state'      => array('1.0.0RC1dev',         '1.0.0.0-RC1-dev'),
-            'CI parsing'        => array('1.0.0-rC15-dev',      '1.0.0.0-RC15-dev'),
-            'delimiters'        => array('1.0.0.RC.15-dev',     '1.0.0.0-RC15-dev'),
-            'RC uppercase'      => array('1.0.0-rc1',           '1.0.0.0-RC1'),
-            'patch replace'     => array('1.0.0.pl3-dev',       '1.0.0.0-patch3-dev'),
-            'forces w.x.y.z'    => array('1.0-dev',             '1.0.0.0-dev'),
-            'forces w.x.y.z/2'  => array('0',                   '0.0.0.0'),
-            'parses long'       => array('10.4.13-beta',        '10.4.13.0-beta'),
-            'expand shorthand'  => array('10.4.13-b',           '10.4.13.0-beta'),
-            'expand shorthand2' => array('10.4.13-b5',          '10.4.13.0-beta5'),
-            'strips leading v'  => array('v1.0.0',              '1.0.0.0'),
-            'strips v/datetime' => array('v20100102',           '20100102'),
-            'parses dates y-m'  => array('2010.01',             '2010-01'),
-            'parses dates w/ .' => array('2010.01.02',          '2010-01-02'),
-            'parses dates w/ -' => array('2010-01-02',          '2010-01-02'),
-            'parses numbers'    => array('2010-01-02.5',        '2010-01-02-5'),
-            'parses datetime'   => array('20100102-203040',     '20100102-203040'),
-            'parses dt+number'  => array('20100102203040-10',   '20100102203040-10'),
-            'parses dt+patch'   => array('20100102-203040-p1',  '20100102-203040-patch1'),
-            'parses master'     => array('dev-master',          '9999999-dev'),
-            'parses trunk'      => array('dev-trunk',           '9999999-dev'),
-            'parses branches'   => array('1.x-dev',             '1.9999999.9999999.9999999-dev'),
-            'parses arbitrary'  => array('dev-feature-foo',     'dev-feature-foo'),
-            'parses arbitrary2' => array('DEV-FOOBAR',          'dev-FOOBAR'),
-            'parses arbitrary3' => array('dev-feature/foo',     'dev-feature/foo'),
-            'ignores aliases'   => array('dev-master as 1.0.0', '9999999-dev'),
+            'none'               => array('1.0.0',               '1.0.0.0'),
+            'none/2'             => array('1.2.3.4',             '1.2.3.4'),
+            'parses state'       => array('1.0.0RC1dev',         '1.0.0.0-RC1-dev'),
+            'CI parsing'         => array('1.0.0-rC15-dev',      '1.0.0.0-RC15-dev'),
+            'delimiters'         => array('1.0.0.RC.15-dev',     '1.0.0.0-RC15-dev'),
+            'RC uppercase'       => array('1.0.0-rc1',           '1.0.0.0-RC1'),
+            'patch replace'      => array('1.0.0.pl3-dev',       '1.0.0.0-patch3-dev'),
+            'forces w.x.y.z'     => array('1.0-dev',             '1.0.0.0-dev'),
+            'forces w.x.y.z/2'   => array('0',                   '0.0.0.0'),
+            'parses long'        => array('10.4.13-beta',        '10.4.13.0-beta'),
+            'parses long/2'      => array('10.4.13beta2',        '10.4.13.0-beta2'),
+            'expand shorthand'   => array('10.4.13-b',           '10.4.13.0-beta'),
+            'expand shorthand2'  => array('10.4.13-b5',          '10.4.13.0-beta5'),
+            'strips leading v'   => array('v1.0.0',              '1.0.0.0'),
+            'strips v/datetime'  => array('v20100102',           '20100102'),
+            'parses dates y-m'   => array('2010.01',             '2010-01'),
+            'parses dates w/ .'  => array('2010.01.02',          '2010-01-02'),
+            'parses dates w/ -'  => array('2010-01-02',          '2010-01-02'),
+            'parses numbers'     => array('2010-01-02.5',        '2010-01-02-5'),
+            'parses dates y.m.Y' => array('2010.1.555',          '2010.1.555.0'),
+            'parses datetime'    => array('20100102-203040',     '20100102-203040'),
+            'parses dt+number'   => array('20100102203040-10',   '20100102203040-10'),
+            'parses dt+patch'    => array('20100102-203040-p1',  '20100102-203040-patch1'),
+            'parses master'      => array('dev-master',          '9999999-dev'),
+            'parses trunk'       => array('dev-trunk',           '9999999-dev'),
+            'parses branches'    => array('1.x-dev',             '1.9999999.9999999.9999999-dev'),
+            'parses arbitrary'   => array('dev-feature-foo',     'dev-feature-foo'),
+            'parses arbitrary2'  => array('DEV-FOOBAR',          'dev-FOOBAR'),
+            'parses arbitrary3'  => array('dev-feature/foo',     'dev-feature/foo'),
+            'ignores aliases'    => array('dev-master as 1.0.0', '9999999-dev'),
         );
     }
 
diff --git a/vendor/composer/composer/tests/Composer/Test/Package/Version/VersionSelectorTest.php b/vendor/composer/composer/tests/Composer/Test/Package/Version/VersionSelectorTest.php
new file mode 100644
index 0000000..2a9cb45
--- /dev/null
+++ b/vendor/composer/composer/tests/Composer/Test/Package/Version/VersionSelectorTest.php
@@ -0,0 +1,132 @@
+<?php
+
+/*
+ * This file is part of Composer.
+ *
+ * (c) Nils Adermann <naderman@naderman.de>
+ *     Jordi Boggiano <j.boggiano@seld.be>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Composer\Test\Package\Version;
+
+use Composer\Package\Version\VersionSelector;
+use Composer\Package\Version\VersionParser;
+
+class VersionSelectorTest extends \PHPUnit_Framework_TestCase
+{
+    // A) multiple versions, get the latest one
+    // B) targetPackageVersion will pass to pool
+    // C) No results, throw exception
+
+    public function testLatestVersionIsReturned()
+    {
+        $packageName = 'foobar';
+
+        $package1 = $this->createMockPackage('1.2.1');
+        $package2 = $this->createMockPackage('1.2.2');
+        $package3 = $this->createMockPackage('1.2.0');
+        $packages = array($package1, $package2, $package3);
+
+        $pool = $this->createMockPool();
+        $pool->expects($this->once())
+            ->method('whatProvides')
+            ->with($packageName, null, true)
+            ->will($this->returnValue($packages));
+
+        $versionSelector = new VersionSelector($pool);
+        $best = $versionSelector->findBestCandidate($packageName);
+
+        // 1.2.2 should be returned because it's the latest of the returned versions
+        $this->assertEquals($package2, $best, 'Latest version should be 1.2.2');
+    }
+
+    public function testFalseReturnedOnNoPackages()
+    {
+        $pool = $this->createMockPool();
+        $pool->expects($this->once())
+            ->method('whatProvides')
+            ->will($this->returnValue(array()));
+
+        $versionSelector = new VersionSelector($pool);
+        $best = $versionSelector->findBestCandidate('foobaz');
+        $this->assertFalse($best, 'No versions are available returns false');
+    }
+
+    /**
+     * @dataProvider getRecommendedRequireVersionPackages
+     */
+    public function testFindRecommendedRequireVersion($prettyVersion, $isDev, $stability, $expectedVersion, $branchAlias = null)
+    {
+        $pool = $this->createMockPool();
+        $versionSelector = new VersionSelector($pool);
+        $versionParser = new VersionParser();
+
+        $package = $this->getMock('\Composer\Package\PackageInterface');
+        $package->expects($this->any())
+            ->method('getPrettyVersion')
+            ->will($this->returnValue($prettyVersion));
+        $package->expects($this->any())
+            ->method('getVersion')
+            ->will($this->returnValue($versionParser->normalize($prettyVersion)));
+        $package->expects($this->any())
+            ->method('isDev')
+            ->will($this->returnValue($isDev));
+        $package->expects($this->any())
+            ->method('getStability')
+            ->will($this->returnValue($stability));
+
+        $branchAlias = $branchAlias === null ? array() : array('branch-alias' => array($prettyVersion => $branchAlias));
+        $package->expects($this->any())
+            ->method('getExtra')
+            ->will($this->returnValue($branchAlias));
+
+        $recommended = $versionSelector->findRecommendedRequireVersion($package);
+
+        // assert that the recommended version is what we expect
+        $this->assertEquals($expectedVersion, $recommended);
+    }
+
+    public function getRecommendedRequireVersionPackages()
+    {
+        return array(
+            // real version, is dev package, stability, expected recommendation, [branch-alias]
+            array('1.2.1', false, 'stable', '~1.2'),
+            array('1.2', false, 'stable', '~1.2'),
+            array('v1.2.1', false, 'stable', '~1.2'),
+            array('3.1.2-pl2', false, 'stable', '~3.1'),
+            array('3.1.2-patch', false, 'stable', '~3.1'),
+            // for non-stable versions, we add ~, but don't try the (1.2.1 -> 1.2) transformation
+            array('2.0-beta.1', false, 'beta', '~2.0@beta'),
+            array('3.1.2-alpha5', false, 'alpha', '~3.1@alpha'),
+            array('3.0-RC2', false, 'RC', '~3.0@RC'),
+            // date-based versions are not touched at all
+            array('v20121020', false, 'stable', 'v20121020'),
+            array('v20121020.2', false, 'stable', 'v20121020.2'),
+            // dev packages without alias are not touched at all
+            array('dev-master', true, 'dev', 'dev-master'),
+            array('3.1.2-dev', true, 'dev', '3.1.2-dev'),
+            // dev packages with alias inherit the alias
+            array('dev-master', true, 'dev', '~2.1@dev', '2.1.x-dev'),
+            array('dev-master', true, 'dev', '~2.1@dev', '2.1.3.x-dev'),
+            array('dev-master', true, 'dev', '~2.0@dev', '2.x-dev'),
+        );
+    }
+
+    private function createMockPackage($version)
+    {
+        $package = $this->getMock('\Composer\Package\PackageInterface');
+        $package->expects($this->any())
+            ->method('getVersion')
+            ->will($this->returnValue($version));
+
+        return $package;
+    }
+
+    private function createMockPool()
+    {
+        return $this->getMock('Composer\DependencyResolver\Pool', array(), array(), '', true);
+    }
+}
diff --git a/vendor/composer/composer/tests/Composer/Test/Plugin/PluginInstallerTest.php b/vendor/composer/composer/tests/Composer/Test/Plugin/PluginInstallerTest.php
index 08d0d1a..1799eb2 100644
--- a/vendor/composer/composer/tests/Composer/Test/Plugin/PluginInstallerTest.php
+++ b/vendor/composer/composer/tests/Composer/Test/Plugin/PluginInstallerTest.php
@@ -39,7 +39,7 @@ class PluginInstallerTest extends \PHPUnit_Framework_TestCase
         $this->directory = sys_get_temp_dir() . '/' . uniqid();
         for ($i = 1; $i <= 4; $i++) {
             $filename = '/Fixtures/plugin-v'.$i.'/composer.json';
-            mkdir(dirname($this->directory . $filename), 0777, TRUE);
+            mkdir(dirname($this->directory . $filename), 0777, true);
             $this->packages[] = $loader->load(__DIR__ . $filename);
         }
 
@@ -164,4 +164,21 @@ class PluginInstallerTest extends \PHPUnit_Framework_TestCase
         $plugins = $this->pm->getPlugins();
         $this->assertEquals('installer-v3', $plugins[1]->version);
     }
+
+    public function testRegisterPluginOnlyOneTime()
+    {
+        $this->repository
+            ->expects($this->exactly(2))
+            ->method('getPackages')
+            ->will($this->returnValue(array()));
+        $installer = new PluginInstaller($this->io, $this->composer);
+        $this->pm->loadInstalledPlugins();
+
+        $installer->install($this->repository, $this->packages[0]);
+        $installer->install($this->repository, clone $this->packages[0]);
+
+        $plugins = $this->pm->getPlugins();
+        $this->assertCount(1, $plugins);
+        $this->assertEquals('installer-v1', $plugins[0]->version);
+    }
 }
diff --git a/vendor/composer/composer/tests/Composer/Test/Repository/ArtifactRepositoryTest.php b/vendor/composer/composer/tests/Composer/Test/Repository/ArtifactRepositoryTest.php
index 109b53b..7d64a01 100644
--- a/vendor/composer/composer/tests/Composer/Test/Repository/ArtifactRepositoryTest.php
+++ b/vendor/composer/composer/tests/Composer/Test/Repository/ArtifactRepositoryTest.php
@@ -26,12 +26,16 @@ class ArtifactRepositoryTest extends TestCase
             'composer/composer-1.0.0-alpha6',
             'vendor1/package2-4.3.2',
             'vendor3/package1-5.4.3',
+            'test/jsonInRoot-1.0.0',
+            'test/jsonInFirstLevel-1.0.0',
+            //The files not-an-artifact.zip and jsonSecondLevel are not valid
+            //artifacts and do not get detected.
         );
 
         $coordinates = array('type' => 'artifact', 'url' => __DIR__ . '/Fixtures/artifacts');
         $repo = new ArtifactRepository($coordinates, new NullIO(), new Config());
 
-        $foundPackages = array_map(function(BasePackage $package) {
+        $foundPackages = array_map(function (BasePackage $package) {
             return "{$package->getPrettyName()}-{$package->getPrettyVersion()}";
         }, $repo->getPackages());
 
@@ -40,4 +44,64 @@ class ArtifactRepositoryTest extends TestCase
 
         $this->assertSame($expectedPackages, $foundPackages);
     }
+
+    public function testAbsoluteRepoUrlCreatesAbsoluteUrlPackages()
+    {
+        $absolutePath = __DIR__ . '/Fixtures/artifacts';
+        $coordinates = array('type' => 'artifact', 'url' => $absolutePath);
+        $repo = new ArtifactRepository($coordinates, new NullIO(), new Config());
+
+        foreach ($repo->getPackages() as $package) {
+            $this->assertTrue(strpos($package->getDistUrl(), $absolutePath) === 0);
+        }
+    }
+
+    public function testRelativeRepoUrlCreatesRelativeUrlPackages()
+    {
+        $relativePath = 'tests/Composer/Test/Repository/Fixtures/artifacts';
+        $coordinates = array('type' => 'artifact', 'url' => $relativePath);
+        $repo = new ArtifactRepository($coordinates, new NullIO(), new Config());
+
+        foreach ($repo->getPackages() as $package) {
+            $this->assertTrue(strpos($package->getDistUrl(), $relativePath) === 0);
+        }
+    }
 }
+
+//Files jsonInFirstLevel.zip, jsonInRoot.zip and jsonInSecondLevel.zip were generated with:
+//
+//$archivesToCreate = array(
+//    'jsonInRoot' => array(
+//        "extra.txt"     => "Testing testing testing",
+//        "composer.json" => '{  "name": "test/jsonInRoot", "version": "1.0.0" }',
+//        "subdir/extra.txt"     => "Testing testing testing",
+//        "subdir/extra2.txt"     => "Testing testing testing",
+//    ),
+//
+//    'jsonInFirstLevel' => array(
+//        "extra.txt"     => "Testing testing testing",
+//        "subdir/composer.json" => '{  "name": "test/jsonInFirstLevel", "version": "1.0.0" }',
+//        "subdir/extra.txt"     => "Testing testing testing",
+//        "subdir/extra2.txt"     => "Testing testing testing",
+//    ),
+//
+//    'jsonInSecondLevel' => array(
+//        "extra.txt"     => "Testing testing testing",
+//        "subdir/extra1.txt"     => "Testing testing testing",
+//        "subdir/foo/composer.json" => '{  "name": "test/jsonInSecondLevel", "version": "1.0.0" }',
+//        "subdir/foo/extra1.txt"     => "Testing testing testing",
+//        "subdir/extra2.txt"     => "Testing testing testing",
+//        "subdir/extra3.txt"     => "Testing testing testing",
+//    ),
+//);
+//
+//foreach ($archivesToCreate as $archiveName => $fileDetails) {
+//    $zipFile = new ZipArchive();
+//    $zipFile->open("$archiveName.zip", ZIPARCHIVE::CREATE);
+//
+//    foreach ($fileDetails as $filename => $fileContents) {
+//        $zipFile->addFromString($filename, $fileContents);
+//    }
+//
+//    $zipFile->close();
+//}
diff --git a/vendor/composer/composer/tests/Composer/Test/Repository/FilesystemRepositoryTest.php b/vendor/composer/composer/tests/Composer/Test/Repository/FilesystemRepositoryTest.php
index fa6214d..fa1ec6d 100644
--- a/vendor/composer/composer/tests/Composer/Test/Repository/FilesystemRepositoryTest.php
+++ b/vendor/composer/composer/tests/Composer/Test/Repository/FilesystemRepositoryTest.php
@@ -12,7 +12,6 @@
 
 namespace Composer\Repository;
 
-use Composer\Repository\FilesystemRepository;
 use Composer\TestCase;
 
 class FilesystemRepositoryTest extends TestCase
diff --git a/vendor/composer/composer/tests/Composer/Test/Repository/Fixtures/artifacts/jsonInFirstLevel.zip b/vendor/composer/composer/tests/Composer/Test/Repository/Fixtures/artifacts/jsonInFirstLevel.zip
new file mode 100644
index 0000000..4980374
Binary files /dev/null and b/vendor/composer/composer/tests/Composer/Test/Repository/Fixtures/artifacts/jsonInFirstLevel.zip differ
diff --git a/vendor/composer/composer/tests/Composer/Test/Repository/Fixtures/artifacts/jsonInRoot.zip b/vendor/composer/composer/tests/Composer/Test/Repository/Fixtures/artifacts/jsonInRoot.zip
new file mode 100644
index 0000000..7b2a87e
Binary files /dev/null and b/vendor/composer/composer/tests/Composer/Test/Repository/Fixtures/artifacts/jsonInRoot.zip differ
diff --git a/vendor/composer/composer/tests/Composer/Test/Repository/Fixtures/artifacts/jsonInSecondLevel.zip b/vendor/composer/composer/tests/Composer/Test/Repository/Fixtures/artifacts/jsonInSecondLevel.zip
new file mode 100644
index 0000000..0e5abc6
Binary files /dev/null and b/vendor/composer/composer/tests/Composer/Test/Repository/Fixtures/artifacts/jsonInSecondLevel.zip differ
diff --git a/vendor/composer/composer/tests/Composer/Test/Repository/Vcs/GitHubDriverTest.php b/vendor/composer/composer/tests/Composer/Test/Repository/Vcs/GitHubDriverTest.php
index a3cb9dd..d20da87 100644
--- a/vendor/composer/composer/tests/Composer/Test/Repository/Vcs/GitHubDriverTest.php
+++ b/vendor/composer/composer/tests/Composer/Test/Repository/Vcs/GitHubDriverTest.php
@@ -81,15 +81,22 @@ class GitHubDriverTest extends \PHPUnit_Framework_TestCase
         $remoteFilesystem->expects($this->at(1))
             ->method('getContents')
             ->with($this->equalTo('github.com'), $this->equalTo('https://api.github.com/authorizations'), $this->equalTo(false))
-            ->will($this->returnValue('{"token": "abcdef"}'));
+            ->will($this->returnValue('[]'));
 
         $remoteFilesystem->expects($this->at(2))
             ->method('getContents')
+            ->with($this->equalTo('github.com'), $this->equalTo('https://api.github.com/authorizations'), $this->equalTo(false))
+            ->will($this->returnValue('{"token": "abcdef"}'));
+
+        $remoteFilesystem->expects($this->at(3))
+            ->method('getContents')
             ->with($this->equalTo('github.com'), $this->equalTo($repoApiUrl), $this->equalTo(false))
-            ->will($this->returnValue('{"master_branch": "test_master", "private": true}'));
+            ->will($this->returnValue('{"master_branch": "test_master", "private": true, "owner": {"login": "composer"}, "name": "packagist"}'));
 
         $configSource = $this->getMock('Composer\Config\ConfigSourceInterface');
+        $authConfigSource = $this->getMock('Composer\Config\ConfigSourceInterface');
         $this->config->setConfigSource($configSource);
+        $this->config->setAuthConfigSource($authConfigSource);
 
         $repoConfig = array(
             'url' => $repoUrl,
@@ -131,7 +138,7 @@ class GitHubDriverTest extends \PHPUnit_Framework_TestCase
         $remoteFilesystem->expects($this->at(0))
             ->method('getContents')
             ->with($this->equalTo('github.com'), $this->equalTo($repoApiUrl), $this->equalTo(false))
-            ->will($this->returnValue('{"master_branch": "test_master"}'));
+            ->will($this->returnValue('{"master_branch": "test_master", "owner": {"login": "composer"}, "name": "packagist"}'));
 
         $repoConfig = array(
             'url' => $repoUrl,
@@ -174,7 +181,7 @@ class GitHubDriverTest extends \PHPUnit_Framework_TestCase
         $remoteFilesystem->expects($this->at(0))
             ->method('getContents')
             ->with($this->equalTo('github.com'), $this->equalTo($repoApiUrl), $this->equalTo(false))
-            ->will($this->returnValue('{"master_branch": "test_master"}'));
+            ->will($this->returnValue('{"master_branch": "test_master", "owner": {"login": "composer"}, "name": "packagist"}'));
 
         $remoteFilesystem->expects($this->at(1))
             ->method('getContents')
@@ -283,19 +290,16 @@ class GitHubDriverTest extends \PHPUnit_Framework_TestCase
 
         $this->assertEquals('test_master', $gitHubDriver->getRootIdentifier());
 
-        // Dist is not available for GitDriver
-        $dist = $gitHubDriver->getDist($identifier);
-        $this->assertNull($dist);
+        $dist = $gitHubDriver->getDist($sha);
+        $this->assertEquals('zip', $dist['type']);
+        $this->assertEquals('https://api.github.com/repos/composer/packagist/zipball/SOMESHA', $dist['url']);
+        $this->assertEquals($sha, $dist['reference']);
 
         $source = $gitHubDriver->getSource($identifier);
         $this->assertEquals('git', $source['type']);
         $this->assertEquals($repoSshUrl, $source['url']);
         $this->assertEquals($identifier, $source['reference']);
 
-        // Dist is not available for GitDriver
-        $dist = $gitHubDriver->getDist($sha);
-        $this->assertNull($dist);
-
         $source = $gitHubDriver->getSource($sha);
         $this->assertEquals('git', $source['type']);
         $this->assertEquals($repoSshUrl, $source['url']);
diff --git a/vendor/composer/composer/tests/Composer/Test/Repository/Vcs/PerforceDriverTest.php b/vendor/composer/composer/tests/Composer/Test/Repository/Vcs/PerforceDriverTest.php
index 36cd69e..59030f5 100644
--- a/vendor/composer/composer/tests/Composer/Test/Repository/Vcs/PerforceDriverTest.php
+++ b/vendor/composer/composer/tests/Composer/Test/Repository/Vcs/PerforceDriverTest.php
@@ -15,119 +15,143 @@ namespace Composer\Test\Repository\Vcs;
 use Composer\Repository\Vcs\PerforceDriver;
 use Composer\Util\Filesystem;
 use Composer\Config;
+use Composer\Util\Perforce;
 
 /**
  * @author Matt Whittom <Matt.Whittom@veteransunited.com>
  */
 class PerforceDriverTest extends \PHPUnit_Framework_TestCase
 {
-    private $config;
-    private $io;
-    private $process;
-    private $remoteFileSystem;
-    private $testPath;
+    protected $config;
+    protected $io;
+    protected $process;
+    protected $remoteFileSystem;
+    protected $testPath;
+    protected $driver;
+    protected $repoConfig;
 
-    public function setUp()
-    {
-        $this->testPath = sys_get_temp_dir() . '/composer-test';
-        $this->config = new Config();
-        $this->config->merge(
-            array(
-                 'config' => array(
-                     'home' => $this->testPath,
-                 ),
-            )
-        );
+    const TEST_URL    = 'TEST_PERFORCE_URL';
+    const TEST_DEPOT  = 'TEST_DEPOT_CONFIG';
+    const TEST_BRANCH = 'TEST_BRANCH_CONFIG';
 
-        $this->io = $this->getMock('Composer\IO\IOInterface');
-        $this->process = $this->getMock('Composer\Util\ProcessExecutor');
-        $this->remoteFileSystem = $this->getMockBuilder('Composer\Util\RemoteFilesystem')->disableOriginalConstructor()
-                                  ->getMock();
+    protected function setUp()
+    {
+        $this->testPath         = sys_get_temp_dir() . '/composer-test';
+        $this->config           = $this->getTestConfig($this->testPath);
+        $this->repoConfig       = $this->getTestRepoConfig();
+        $this->io               = $this->getMockIOInterface();
+        $this->process          = $this->getMockProcessExecutor();
+        $this->remoteFileSystem = $this->getMockRemoteFilesystem();
+        $this->perforce         = $this->getMockPerforce();
+        $this->driver = new PerforceDriver($this->repoConfig, $this->io, $this->config, $this->process, $this->remoteFileSystem);
+        $this->overrideDriverInternalPerforce($this->perforce);
     }
 
-    public function tearDown()
+    protected function tearDown()
     {
+        //cleanup directory under test path
         $fs = new Filesystem;
         $fs->removeDirectory($this->testPath);
+        $this->driver           = null;
+        $this->perforce         = null;
+        $this->remoteFileSystem = null;
+        $this->process          = null;
+        $this->io               = null;
+        $this->repoConfig       = null;
+        $this->config           = null;
+        $this->testPath         = null;
     }
 
-    public function testInitializeCapturesVariablesFromRepoConfig()
+    protected function overrideDriverInternalPerforce(Perforce $perforce)
     {
-        $this->setUp();
-        $repoConfig = array(
-            'url'    => 'TEST_PERFORCE_URL',
-            'depot'  => 'TEST_DEPOT_CONFIG',
-            'branch' => 'TEST_BRANCH_CONFIG'
-        );
-        $driver = new PerforceDriver($repoConfig, $this->io, $this->config, $this->process, $this->remoteFileSystem);
-        $process = $this->getMock('Composer\Util\ProcessExecutor');
-        $arguments = array(
-            array('depot' => 'TEST_DEPOT', 'branch' => 'TEST_BRANCH'),
-            'port' => 'TEST_PORT',
-            'path' => $this->testPath,
-            $process,
-            true,
-            'TEST'
+        $reflectionClass = new \ReflectionClass($this->driver);
+        $property = $reflectionClass->getProperty('perforce');
+        $property->setAccessible(true);
+        $property->setValue($this->driver, $perforce);
+    }
+
+    protected function getTestConfig($testPath)
+    {
+        $config = new Config();
+        $config->merge(array('config' => array('home' => $testPath)));
+
+        return $config;
+    }
+
+    protected function getTestRepoConfig()
+    {
+        return array(
+            'url'    => self::TEST_URL,
+            'depot'  => self::TEST_DEPOT,
+            'branch' => self::TEST_BRANCH,
         );
-        $perforce = $this->getMock('Composer\Util\Perforce', null, $arguments);
-        $driver->setPerforce($perforce);
+    }
+
+    protected function getMockIOInterface()
+    {
+        return $this->getMock('Composer\IO\IOInterface');
+    }
+
+    protected function getMockProcessExecutor()
+    {
+        return $this->getMock('Composer\Util\ProcessExecutor');
+    }
+
+    protected function getMockRemoteFilesystem()
+    {
+        return $this->getMockBuilder('Composer\Util\RemoteFilesystem')->disableOriginalConstructor()->getMock();
+    }
+
+    protected function getMockPerforce()
+    {
+        $methods = array('p4login', 'checkStream', 'writeP4ClientSpec', 'connectClient', 'getComposerInformation', 'cleanupClientSpec');
+
+        return $this->getMockBuilder('Composer\Util\Perforce', $methods)->disableOriginalConstructor()->getMock();
+    }
+
+    public function testInitializeCapturesVariablesFromRepoConfig()
+    {
+        $driver = new PerforceDriver($this->repoConfig, $this->io, $this->config, $this->process, $this->remoteFileSystem);
         $driver->initialize();
-        $this->assertEquals('TEST_PERFORCE_URL', $driver->getUrl());
-        $this->assertEquals('TEST_DEPOT_CONFIG', $driver->getDepot());
-        $this->assertEquals('TEST_BRANCH_CONFIG', $driver->getBranch());
+        $this->assertEquals(self::TEST_URL, $driver->getUrl());
+        $this->assertEquals(self::TEST_DEPOT, $driver->getDepot());
+        $this->assertEquals(self::TEST_BRANCH, $driver->getBranch());
     }
 
     public function testInitializeLogsInAndConnectsClient()
     {
-        $this->setUp();
-        $repoConfig = array(
-            'url'    => 'TEST_PERFORCE_URL',
-            'depot'  => 'TEST_DEPOT_CONFIG',
-            'branch' => 'TEST_BRANCH_CONFIG'
-        );
-        $driver = new PerforceDriver($repoConfig, $this->io, $this->config, $this->process, $this->remoteFileSystem);
-        $perforce = $this->getMockBuilder('Composer\Util\Perforce')->disableOriginalConstructor()->getMock();
-        $perforce->expects($this->at(0))
-            ->method('p4Login')
-            ->with($this->io);
-        $perforce->expects($this->at(1))
-            ->method('checkStream')
-            ->with($this->equalTo('TEST_DEPOT_CONFIG'));
-        $perforce->expects($this->at(2))
-            ->method('writeP4ClientSpec');
-        $perforce->expects($this->at(3))
-            ->method('connectClient');
-
-        $driver->setPerforce($perforce);
-        $driver->initialize();
+        $this->perforce->expects($this->at(0))->method('p4Login')->with($this->identicalTo($this->io));
+        $this->perforce->expects($this->at(1))->method('checkStream')->with($this->equalTo(self::TEST_DEPOT));
+        $this->perforce->expects($this->at(2))->method('writeP4ClientSpec');
+        $this->perforce->expects($this->at(3))->method('connectClient');
+        $this->driver->initialize();
     }
 
-    public function testHasComposerFile()
+    /**
+     * @depends testInitializeCapturesVariablesFromRepoConfig
+     * @depends testInitializeLogsInAndConnectsClient
+     */
+    public function testHasComposerFileReturnsFalseOnNoComposerFile()
     {
-        $repoConfig = array(
-            'url'    => 'TEST_PERFORCE_URL',
-            'depot'  => 'TEST_DEPOT_CONFIG',
-            'branch' => 'TEST_BRANCH_CONFIG'
-        );
-        $driver = new PerforceDriver($repoConfig, $this->io, $this->config, $this->process, $this->remoteFileSystem);
-        $process = $this->getMock('Composer\Util\ProcessExecutor');
-        $arguments = array(
-            array('depot' => 'TEST_DEPOT', 'branch' => 'TEST_BRANCH'),
-            'port' => 'TEST_PORT',
-            'path' => $this->testPath,
-            $process,
-            true,
-            'TEST'
-        );
-        $perforce = $this->getMock('Composer\Util\Perforce', array('getComposerInformation'), $arguments);
-        $perforce->expects($this->at(0))
-            ->method('getComposerInformation')
-            ->with($this->equalTo('//TEST_DEPOT_CONFIG/TEST_IDENTIFIER'))
-            ->will($this->returnValue('Some json stuff'));
-        $driver->setPerforce($perforce);
-        $driver->initialize();
         $identifier = 'TEST_IDENTIFIER';
-        $result = $driver->hasComposerFile($identifier);
+        $formatted_depot_path = '//' . self::TEST_DEPOT . '/' . $identifier;
+        $this->perforce->expects($this->any())->method('getComposerInformation')->with($this->equalTo($formatted_depot_path))->will($this->returnValue(array()));
+        $this->driver->initialize();
+        $result = $this->driver->hasComposerFile($identifier);
+        $this->assertFalse($result);
+    }
+
+    /**
+     * @depends testInitializeCapturesVariablesFromRepoConfig
+     * @depends testInitializeLogsInAndConnectsClient
+     */
+    public function testHasComposerFileReturnsTrueWithOneOrMoreComposerFiles()
+    {
+        $identifier = 'TEST_IDENTIFIER';
+        $formatted_depot_path = '//' . self::TEST_DEPOT . '/' . $identifier;
+        $this->perforce->expects($this->any())->method('getComposerInformation')->with($this->equalTo($formatted_depot_path))->will($this->returnValue(array('')));
+        $this->driver->initialize();
+        $result = $this->driver->hasComposerFile($identifier);
         $this->assertTrue($result);
     }
 
@@ -143,4 +167,10 @@ class PerforceDriverTest extends \PHPUnit_Framework_TestCase
         $this->expectOutputString('');
         $this->assertFalse(PerforceDriver::supports($this->io, $this->config, 'existing.url'));
     }
+
+    public function testCleanup()
+    {
+        $this->perforce->expects($this->once())->method('cleanupClientSpec');
+        $this->driver->cleanup();
+    }
 }
diff --git a/vendor/composer/composer/tests/Composer/Test/Repository/Vcs/SvnDriverTest.php b/vendor/composer/composer/tests/Composer/Test/Repository/Vcs/SvnDriverTest.php
index 2f69856..2ef1baa 100644
--- a/vendor/composer/composer/tests/Composer/Test/Repository/Vcs/SvnDriverTest.php
+++ b/vendor/composer/composer/tests/Composer/Test/Repository/Vcs/SvnDriverTest.php
@@ -23,9 +23,6 @@ class SvnDriverTest extends \PHPUnit_Framework_TestCase
     public function testWrongCredentialsInUrl()
     {
         $console = $this->getMock('Composer\IO\IOInterface');
-        $console->expects($this->exactly(6))
-            ->method('isInteractive')
-            ->will($this->returnValue(true));
 
         $output  = "svn: OPTIONS of 'http://corp.svn.local/repo':";
         $output .= " authorization failed: Could not authenticate to server:";
diff --git a/vendor/composer/composer/tests/Composer/Test/Util/FilesystemTest.php b/vendor/composer/composer/tests/Composer/Test/Util/FilesystemTest.php
index c74e84a..a4d1255 100644
--- a/vendor/composer/composer/tests/Composer/Test/Util/FilesystemTest.php
+++ b/vendor/composer/composer/tests/Composer/Test/Util/FilesystemTest.php
@@ -176,4 +176,65 @@ class FilesystemTest extends TestCase
             array('phar://c:../Foo', 'phar://c:../Foo'),
         );
     }
+
+    /**
+     * @link https://github.com/composer/composer/issues/3157
+     */
+    public function testUnlinkSymlinkedDirectory()
+    {
+        $tmp       = sys_get_temp_dir();
+        $basepath  = $tmp . "/composer_testdir";
+        $symlinked = $basepath . "/linked";
+        @mkdir($basepath . "/real", 0777, true);
+        touch($basepath . "/real/FILE");
+
+        $result = @symlink($basepath . "/real", $symlinked);
+
+        if (!$result) {
+            $this->markTestSkipped('Symbolic links for directories not supported on this platform');
+        }
+
+        if (!is_dir($symlinked)) {
+            $this->fail('Precondition assertion failed (is_dir is false on symbolic link to directory).');
+        }
+
+        $fs     = new Filesystem();
+        $result = $fs->unlink($symlinked);
+        $this->assertTrue($result);
+        $this->assertFalse(file_exists($symlinked));
+    }
+
+    /**
+     * @link https://github.com/composer/composer/issues/3144
+     */
+    public function testRemoveSymlinkedDirectoryWithTrailingSlash()
+    {
+        $tmp = sys_get_temp_dir();
+        $basepath = $tmp . "/composer_testdir";
+        @mkdir($basepath . "/real", 0777, true);
+        touch($basepath . "/real/FILE");
+        $symlinked              = $basepath . "/linked";
+        $symlinkedTrailingSlash = $symlinked . "/";
+
+        $result = @symlink($basepath . "/real", $symlinked);
+
+        if (!$result) {
+            $this->markTestSkipped('Symbolic links for directories not supported on this platform');
+        }
+
+        if (!is_dir($symlinked)) {
+            $this->fail('Precondition assertion failed (is_dir is false on symbolic link to directory).');
+        }
+
+        if (!is_dir($symlinkedTrailingSlash)) {
+            $this->fail('Precondition assertion failed (is_dir false w trailing slash).');
+        }
+
+        $fs = new Filesystem();
+
+        $result = $fs->removeDirectory($symlinkedTrailingSlash);
+        $this->assertTrue($result);
+        $this->assertFalse(file_exists($symlinkedTrailingSlash));
+        $this->assertFalse(file_exists($symlinked));
+    }
 }
diff --git a/vendor/composer/composer/tests/Composer/Test/Util/PerforceTest.php b/vendor/composer/composer/tests/Composer/Test/Util/PerforceTest.php
index f2eeb19..dc72709 100644
--- a/vendor/composer/composer/tests/Composer/Test/Util/PerforceTest.php
+++ b/vendor/composer/composer/tests/Composer/Test/Util/PerforceTest.php
@@ -22,17 +22,49 @@ class PerforceTest extends \PHPUnit_Framework_TestCase
 {
     protected $perforce;
     protected $processExecutor;
+    protected $io;
 
-    public function setUp()
+    const TEST_DEPOT       = 'depot';
+    const TEST_BRANCH      = 'branch';
+    const TEST_P4USER      = 'user';
+    const TEST_CLIENT_NAME = 'TEST';
+    const TEST_PORT        = 'port';
+    const TEST_PATH        = 'path';
+
+    protected function setUp()
     {
         $this->processExecutor = $this->getMock('Composer\Util\ProcessExecutor');
-        $repoConfig = array(
-            'depot'                       => 'depot',
-            'branch'                      => 'branch',
-            'p4user'                      => 'user',
-            'unique_perforce_client_name' => 'TEST'
+        $this->repoConfig = $this->getTestRepoConfig();
+        $this->io = $this->getMockIOInterface();
+        $this->createNewPerforceWithWindowsFlag(true);
+    }
+
+    protected function tearDown()
+    {
+        $this->perforce        = null;
+        $this->io              = null;
+        $this->repoConfig      = null;
+        $this->processExecutor = null;
+    }
+
+    public function getTestRepoConfig()
+    {
+        return array(
+            'depot'                       => self::TEST_DEPOT,
+            'branch'                      => self::TEST_BRANCH,
+            'p4user'                      => self::TEST_P4USER,
+            'unique_perforce_client_name' => self::TEST_CLIENT_NAME
         );
-        $this->perforce = new Perforce($repoConfig, 'port', 'path', $this->processExecutor, true);
+    }
+
+    public function getMockIOInterface()
+    {
+        return $this->getMock('Composer\IO\IOInterface');
+    }
+
+    protected function createNewPerforceWithWindowsFlag($flag)
+    {
+        $this->perforce = new Perforce($this->repoConfig, self::TEST_PORT, self::TEST_PATH, $this->processExecutor, $flag, $this->io);
     }
 
     public function testGetClientWithoutStream()
@@ -98,116 +130,90 @@ class PerforceTest extends \PHPUnit_Framework_TestCase
 
     public function testQueryP4UserWithUserAlreadySet()
     {
-        $io = $this->getMock('Composer\IO\IOInterface');
-
-        $repoConfig = array('depot' => 'depot', 'branch' => 'branch', 'p4user' => 'TEST_USER');
-        $this->perforce = new Perforce($repoConfig, 'port', 'path', $this->processExecutor, true, 'TEST');
-
-        $this->perforce->queryP4user($io);
-        $this->assertEquals('TEST_USER', $this->perforce->getUser());
+        $this->perforce->queryP4user();
+        $this->assertEquals(self::TEST_P4USER, $this->perforce->getUser());
     }
 
     public function testQueryP4UserWithUserSetInP4VariablesWithWindowsOS()
     {
-        $repoConfig = array('depot' => 'depot', 'branch' => 'branch');
-        $this->perforce = new Perforce($repoConfig, 'port', 'path', $this->processExecutor, true, 'TEST');
-
-        $io = $this->getMock('Composer\IO\IOInterface');
+        $this->createNewPerforceWithWindowsFlag(true);
+        $this->perforce->setUser(null);
         $expectedCommand = 'p4 set';
-        $this->processExecutor->expects($this->at(0))
-            ->method('execute')
-            ->with($this->equalTo($expectedCommand))
-            ->will(
-                $this->returnCallback(
-                    function ($command, &$output) {
-                        $output = 'P4USER=TEST_P4VARIABLE_USER' . PHP_EOL ;
-
-                        return true;
-                    }
-                )
-            );
+        $callback = function ($command, &$output) {
+                $output = 'P4USER=TEST_P4VARIABLE_USER' . PHP_EOL;
 
-        $this->perforce->queryP4user($io);
+                return true;
+            };
+        $this->processExecutor->expects($this->at(0))
+                            ->method('execute')
+                            ->with($this->equalTo($expectedCommand))
+                            ->will($this->returnCallback($callback));
+        $this->perforce->queryP4user();
         $this->assertEquals('TEST_P4VARIABLE_USER', $this->perforce->getUser());
     }
 
     public function testQueryP4UserWithUserSetInP4VariablesNotWindowsOS()
     {
-        $repoConfig = array('depot' => 'depot', 'branch' => 'branch');
-        $this->perforce = new Perforce($repoConfig, 'port', 'path', $this->processExecutor, false, 'TEST');
-
-        $io = $this->getMock('Composer\IO\IOInterface');
+        $this->createNewPerforceWithWindowsFlag(false);
+        $this->perforce->setUser(null);
         $expectedCommand = 'echo $P4USER';
-        $this->processExecutor->expects($this->at(0))
-            ->method('execute')
-            ->with($this->equalTo($expectedCommand))
-            ->will(
-                $this->returnCallback(
-                    function ($command, &$output) {
-                        $output = 'TEST_P4VARIABLE_USER' . PHP_EOL;
+        $callback = function ($command, &$output) {
+                $output = 'TEST_P4VARIABLE_USER' . PHP_EOL;
 
-                        return true;
-                    }
-                )
-            );
-
-        $this->perforce->queryP4user($io);
+                return true;
+            };
+        $this->processExecutor->expects($this->at(0))
+                              ->method('execute')
+                              ->with($this->equalTo($expectedCommand))
+                              ->will($this->returnCallback($callback));
+        $this->perforce->queryP4user();
         $this->assertEquals('TEST_P4VARIABLE_USER', $this->perforce->getUser());
     }
 
     public function testQueryP4UserQueriesForUser()
     {
-        $repoConfig = array('depot' => 'depot', 'branch' => 'branch');
-        $this->perforce = new Perforce($repoConfig, 'port', 'path', $this->processExecutor, false, 'TEST');
-        $io = $this->getMock('Composer\IO\IOInterface');
+        $this->perforce->setUser(null);
         $expectedQuestion = 'Enter P4 User:';
-        $io->expects($this->at(0))
-            ->method('ask')
-            ->with($this->equalTo($expectedQuestion))
-            ->will($this->returnValue('TEST_QUERY_USER'));
-
-        $this->perforce->queryP4user($io);
+        $this->io->expects($this->at(0))
+                 ->method('ask')
+                 ->with($this->equalTo($expectedQuestion))
+                 ->will($this->returnValue('TEST_QUERY_USER'));
+        $this->perforce->queryP4user();
         $this->assertEquals('TEST_QUERY_USER', $this->perforce->getUser());
     }
 
     public function testQueryP4UserStoresResponseToQueryForUserWithWindows()
     {
-        $repoConfig = array('depot' => 'depot', 'branch' => 'branch');
-        $this->perforce = new Perforce($repoConfig, 'port', 'path', $this->processExecutor, true, 'TEST');
-
-        $io = $this->getMock('Composer\IO\IOInterface');
+        $this->createNewPerforceWithWindowsFlag(true);
+        $this->perforce->setUser(null);
         $expectedQuestion = 'Enter P4 User:';
-        $io->expects($this->at(0))
-            ->method('ask')
-            ->with($this->equalTo($expectedQuestion))
-            ->will($this->returnValue('TEST_QUERY_USER'));
-        $expectedCommand = 'p4 set P4USER=TEST_QUERY_USER';
+        $expectedCommand  = 'p4 set P4USER=TEST_QUERY_USER';
+        $this->io->expects($this->at(0))
+                 ->method('ask')
+                 ->with($this->equalTo($expectedQuestion))
+                 ->will($this->returnValue('TEST_QUERY_USER'));
         $this->processExecutor->expects($this->at(1))
-            ->method('execute')
-            ->with($this->equalTo($expectedCommand))
-            ->will($this->returnValue(0));
-
-        $this->perforce->queryP4user($io);
+                              ->method('execute')
+                              ->with($this->equalTo($expectedCommand))
+                              ->will($this->returnValue(0));
+        $this->perforce->queryP4user();
     }
 
     public function testQueryP4UserStoresResponseToQueryForUserWithoutWindows()
     {
-        $repoConfig = array('depot' => 'depot', 'branch' => 'branch');
-        $this->perforce = new Perforce($repoConfig, 'port', 'path', $this->processExecutor, false, 'TEST');
-
-        $io = $this->getMock('Composer\IO\IOInterface');
+        $this->createNewPerforceWithWindowsFlag(false);
+        $this->perforce->setUser(null);
         $expectedQuestion = 'Enter P4 User:';
-        $io->expects($this->at(0))
-            ->method('ask')
-            ->with($this->equalTo($expectedQuestion))
-            ->will($this->returnValue('TEST_QUERY_USER'));
-        $expectedCommand = 'export P4USER=TEST_QUERY_USER';
+        $expectedCommand  = 'export P4USER=TEST_QUERY_USER';
+        $this->io->expects($this->at(0))
+                 ->method('ask')
+                 ->with($this->equalTo($expectedQuestion))
+                 ->will($this->returnValue('TEST_QUERY_USER'));
         $this->processExecutor->expects($this->at(1))
-            ->method('execute')
-            ->with($this->equalTo($expectedCommand))
-            ->will($this->returnValue(0));
-
-        $this->perforce->queryP4user($io);
+                              ->method('execute')
+                              ->with($this->equalTo($expectedCommand))
+                              ->will($this->returnValue(0));
+        $this->perforce->queryP4user();
     }
 
     public function testQueryP4PasswordWithPasswordAlreadySet()
@@ -218,69 +224,55 @@ class PerforceTest extends \PHPUnit_Framework_TestCase
             'p4user'     => 'user',
             'p4password' => 'TEST_PASSWORD'
         );
-        $this->perforce = new Perforce($repoConfig, 'port', 'path', $this->processExecutor, false, 'TEST');
-        $io = $this->getMock('Composer\IO\IOInterface');
-
-        $password = $this->perforce->queryP4Password($io);
+        $this->perforce = new Perforce($repoConfig, 'port', 'path', $this->processExecutor, false,  $this->getMockIOInterface(), 'TEST');
+        $password = $this->perforce->queryP4Password();
         $this->assertEquals('TEST_PASSWORD', $password);
     }
 
     public function testQueryP4PasswordWithPasswordSetInP4VariablesWithWindowsOS()
     {
-        $io = $this->getMock('Composer\IO\IOInterface');
-
+        $this->createNewPerforceWithWindowsFlag(true);
         $expectedCommand = 'p4 set';
-        $this->processExecutor->expects($this->at(0))
-            ->method('execute')
-            ->with($this->equalTo($expectedCommand))
-            ->will(
-                $this->returnCallback(
-                    function ($command, &$output) {
-                        $output = 'P4PASSWD=TEST_P4VARIABLE_PASSWORD' . PHP_EOL;
-
-                        return true;
-                    }
-                )
-            );
+        $callback = function ($command, &$output) {
+                $output = 'P4PASSWD=TEST_P4VARIABLE_PASSWORD' . PHP_EOL;
 
-        $password = $this->perforce->queryP4Password($io);
+                return true;
+            };
+        $this->processExecutor->expects($this->at(0))
+                              ->method('execute')
+                              ->with($this->equalTo($expectedCommand))
+                              ->will($this->returnCallback($callback));
+        $password = $this->perforce->queryP4Password();
         $this->assertEquals('TEST_P4VARIABLE_PASSWORD', $password);
     }
 
     public function testQueryP4PasswordWithPasswordSetInP4VariablesNotWindowsOS()
     {
-        $repoConfig = array('depot' => 'depot', 'branch' => 'branch', 'p4user' => 'user');
-        $this->perforce = new Perforce($repoConfig, 'port', 'path', $this->processExecutor, false, 'TEST');
-
-        $io = $this->getMock('Composer\IO\IOInterface');
+        $this->createNewPerforceWithWindowsFlag(false);
         $expectedCommand = 'echo $P4PASSWD';
-        $this->processExecutor->expects($this->at(0))
-            ->method('execute')
-            ->with($this->equalTo($expectedCommand))
-            ->will(
-                $this->returnCallback(
-                    function ($command, &$output) {
-                        $output = 'TEST_P4VARIABLE_PASSWORD' . PHP_EOL;
+        $callback = function ($command, &$output) {
+                $output = 'TEST_P4VARIABLE_PASSWORD' . PHP_EOL;
 
-                        return true;
-                    }
-                )
-            );
+                return true;
+            };
+        $this->processExecutor->expects($this->at(0))
+                              ->method('execute')
+                              ->with($this->equalTo($expectedCommand))
+                              ->will($this->returnCallback($callback));
 
-        $password = $this->perforce->queryP4Password($io);
+        $password = $this->perforce->queryP4Password();
         $this->assertEquals('TEST_P4VARIABLE_PASSWORD', $password);
     }
 
     public function testQueryP4PasswordQueriesForPassword()
     {
-        $io = $this->getMock('Composer\IO\IOInterface');
         $expectedQuestion = 'Enter password for Perforce user user: ';
-        $io->expects($this->at(0))
+        $this->io->expects($this->at(0))
             ->method('askAndHideAnswer')
             ->with($this->equalTo($expectedQuestion))
             ->will($this->returnValue('TEST_QUERY_PASSWORD'));
 
-        $password = $this->perforce->queryP4Password($io);
+        $password = $this->perforce->queryP4Password();
         $this->assertEquals('TEST_QUERY_PASSWORD', $password);
     }
 
@@ -364,15 +356,35 @@ class PerforceTest extends \PHPUnit_Framework_TestCase
                     }
                 )
             );
+        $expectedCommand2 = 'p4 -u user -p port changes //depot/branch/...';
+        $expectedCallback = function ($command, &$output) {
+                $output = 'Change 1234 on 2014/03/19 by Clark.Stuth@Clark.Stuth_test_client \'test changelist\'';
+
+                return true;
+            };
+        $this->processExecutor->expects($this->at(1))
+                              ->method('execute')
+                              ->with($this->equalTo($expectedCommand2))
+                              ->will($this->returnCallback($expectedCallback));
 
         $branches = $this->perforce->getBranches();
-        $this->assertEquals('//depot/branch', $branches['master']);
+        $this->assertEquals('//depot/branch@1234', $branches['master']);
     }
 
     public function testGetBranchesWithoutStream()
     {
+        $expectedCommand = 'p4 -u user -p port changes //depot/...';
+        $expectedCallback = function ($command, &$output) {
+                $output = 'Change 5678 on 2014/03/19 by Clark.Stuth@Clark.Stuth_test_client \'test changelist\'';
+
+                return true;
+            };
+        $this->processExecutor->expects($this->once())
+            ->method('execute')
+            ->with($this->equalTo($expectedCommand))
+            ->will($this->returnCallback($expectedCallback));
         $branches = $this->perforce->getBranches();
-        $this->assertEquals('//depot', $branches['master']);
+        $this->assertEquals('//depot@5678', $branches['master']);
     }
 
     public function testGetTagsWithoutStream()
@@ -617,12 +629,12 @@ class PerforceTest extends \PHPUnit_Framework_TestCase
         $result = $this->perforce->checkServerExists('perforce.does.exist:port', $processExecutor);
         $this->assertTrue($result);
     }
-    
+
     /**
      * Test if "p4" command is missing.
-     * 
+     *
      * @covers \Composer\Util\Perforce::checkServerExists
-     * 
+     *
      * @return void
      */
     public function testCheckServerClientError()
@@ -634,7 +646,7 @@ class PerforceTest extends \PHPUnit_Framework_TestCase
             ->method('execute')
             ->with($this->equalTo($expectedCommand), $this->equalTo(null))
             ->will($this->returnValue(127));
-        
+
         $result = $this->perforce->checkServerExists('perforce.does.exist:port', $processExecutor);
         $this->assertFalse($result);
     }
@@ -692,4 +704,18 @@ class PerforceTest extends \PHPUnit_Framework_TestCase
     {
         $this->perforce->setStream('//depot/branch');
     }
+
+    public function testCleanupClientSpecShouldDeleteClient()
+    {
+        $fs = $this->getMock('Composer\Util\Filesystem');
+        $this->perforce->setFilesystem($fs);
+
+        $testClient = $this->perforce->getClient();
+        $expectedCommand = 'p4 -u ' . self::TEST_P4USER . ' -p ' . self::TEST_PORT . ' client -d ' . $testClient;
+        $this->processExecutor->expects($this->once())->method('execute')->with($this->equalTo($expectedCommand));
+
+        $fs->expects($this->once())->method('remove')->with($this->perforce->getP4ClientSpec());
+
+        $this->perforce->cleanupClientSpec();
+    }
 }
diff --git a/vendor/composer/composer/tests/Composer/Test/Util/RemoteFilesystemTest.php b/vendor/composer/composer/tests/Composer/Test/Util/RemoteFilesystemTest.php
index eabfe9e..bbeba90 100644
--- a/vendor/composer/composer/tests/Composer/Test/Util/RemoteFilesystemTest.php
+++ b/vendor/composer/composer/tests/Composer/Test/Util/RemoteFilesystemTest.php
@@ -130,18 +130,11 @@ class RemoteFilesystemTest extends \PHPUnit_Framework_TestCase
         $this->assertAttributeEquals(50, 'lastProgress', $fs);
     }
 
-    public function testCallbackGetNotifyFailure404()
+    public function testCallbackGetPassesThrough404()
     {
         $fs = new RemoteFilesystem($this->getMock('Composer\IO\IOInterface'));
 
-        try {
-            $this->callCallbackGet($fs, STREAM_NOTIFY_FAILURE, 0, 'HTTP/1.1 404 Not Found', 404, 0, 0);
-            $this->fail();
-        } catch (\Exception $e) {
-            $this->assertInstanceOf('Composer\Downloader\TransportException', $e);
-            $this->assertEquals(404, $e->getCode());
-            $this->assertContains('HTTP/1.1 404 Not Found', $e->getMessage());
-        }
+        $this->assertNull($this->callCallbackGet($fs, STREAM_NOTIFY_FAILURE, 0, 'HTTP/1.1 404 Not Found', 404, 0, 0));
     }
 
     public function testCaptureAuthenticationParamsFromUrl()
@@ -180,7 +173,7 @@ class RemoteFilesystemTest extends \PHPUnit_Framework_TestCase
 
     protected function callGetOptionsForUrl($io, array $args = array(), array $options = array())
     {
-        $fs = new RemoteFilesystem($io, $options);
+        $fs = new RemoteFilesystem($io, null, $options);
         $ref = new \ReflectionMethod($fs, 'getOptionsForUrl');
         $ref->setAccessible(true);
 
diff --git a/vendor/composer/composer/tests/Composer/Test/Util/StreamContextFactoryTest.php b/vendor/composer/composer/tests/Composer/Test/Util/StreamContextFactoryTest.php
index b0923e6..5415a8c 100644
--- a/vendor/composer/composer/tests/Composer/Test/Util/StreamContextFactoryTest.php
+++ b/vendor/composer/composer/tests/Composer/Test/Util/StreamContextFactoryTest.php
@@ -52,7 +52,7 @@ class StreamContextFactoryTest extends \PHPUnit_Framework_TestCase
             ),
             array(
                 $a = array('http' => array('method' => 'GET', 'max_redirects' => 20, 'follow_location' => 1)), array('http' => array('method' => 'GET')),
-                array('options' => $a, 'notification' => $f = function() {}), array('notification' => $f)
+                array('options' => $a, 'notification' => $f = function () {}), array('notification' => $f)
             ),
         );
     }
diff --git a/vendor/composer/composer/tests/Composer/Test/Util/SvnTest.php b/vendor/composer/composer/tests/Composer/Test/Util/SvnTest.php
index fb938d7..b1f19ca 100644
--- a/vendor/composer/composer/tests/Composer/Test/Util/SvnTest.php
+++ b/vendor/composer/composer/tests/Composer/Test/Util/SvnTest.php
@@ -1,6 +1,7 @@
 <?php
 namespace Composer\Test\Util;
 
+use Composer\Config;
 use Composer\IO\NullIO;
 use Composer\Util\Svn;
 
@@ -16,7 +17,7 @@ class SvnTest extends \PHPUnit_Framework_TestCase
      */
     public function testCredentials($url, $expect)
     {
-        $svn = new Svn($url, new NullIO);
+        $svn = new Svn($url, new NullIO, new Config());
         $reflMethod = new \ReflectionMethod('Composer\\Util\\Svn', 'getCredentialString');
         $reflMethod->setAccessible(true);
 
@@ -41,7 +42,7 @@ class SvnTest extends \PHPUnit_Framework_TestCase
     {
         $url = 'http://svn.example.org';
 
-        $svn = new Svn($url, new NullIO());
+        $svn = new Svn($url, new NullIO(), new Config());
         $reflMethod = new \ReflectionMethod('Composer\\Util\\Svn', 'getCommand');
         $reflMethod->setAccessible(true);
 
@@ -51,6 +52,72 @@ class SvnTest extends \PHPUnit_Framework_TestCase
         );
     }
 
+    public function testCredentialsFromConfig()
+    {
+        $url = 'http://svn.apache.org';
+
+        $config = new Config();
+        $config->merge(array(
+            'config' => array(
+                'http-basic' => array(
+                    'svn.apache.org' => array('username' => 'foo', 'password' => 'bar')
+                )
+            )
+        ));
+
+        $svn = new Svn($url, new NullIO, $config);
+        $reflMethod = new \ReflectionMethod('Composer\\Util\\Svn', 'getCredentialString');
+        $reflMethod->setAccessible(true);
+
+        $this->assertEquals($this->getCmd(" --username 'foo' --password 'bar' "), $reflMethod->invoke($svn));
+    }
+
+    public function testCredentialsFromConfigWithCacheCredentialsTrue()
+    {
+        $url = 'http://svn.apache.org';
+
+        $config = new Config();
+        $config->merge(
+            array(
+                'config' => array(
+                    'http-basic' => array(
+                        'svn.apache.org' => array('username' => 'foo', 'password' => 'bar')
+                    )
+                )
+            )
+        );
+
+        $svn = new Svn($url, new NullIO, $config);
+        $svn->setCacheCredentials(true);
+        $reflMethod = new \ReflectionMethod('Composer\\Util\\Svn', 'getCredentialString');
+        $reflMethod->setAccessible(true);
+
+        $this->assertEquals($this->getCmd(" --username 'foo' --password 'bar' "), $reflMethod->invoke($svn));
+    }
+
+    public function testCredentialsFromConfigWithCacheCredentialsFalse()
+    {
+        $url = 'http://svn.apache.org';
+
+        $config = new Config();
+        $config->merge(
+            array(
+                'config' => array(
+                    'http-basic' => array(
+                        'svn.apache.org' => array('username' => 'foo', 'password' => 'bar')
+                    )
+                )
+            )
+        );
+
+        $svn = new Svn($url, new NullIO, $config);
+        $svn->setCacheCredentials(false);
+        $reflMethod = new \ReflectionMethod('Composer\\Util\\Svn', 'getCredentialString');
+        $reflMethod->setAccessible(true);
+
+        $this->assertEquals($this->getCmd(" --no-auth-cache --username 'foo' --password 'bar' "), $reflMethod->invoke($svn));
+    }
+
     private function getCmd($cmd)
     {
         if (defined('PHP_WINDOWS_VERSION_BUILD')) {
diff --git a/vendor/composer/composer/tests/bootstrap.php b/vendor/composer/composer/tests/bootstrap.php
index c5e16d6..908861c 100644
--- a/vendor/composer/composer/tests/bootstrap.php
+++ b/vendor/composer/composer/tests/bootstrap.php
@@ -12,7 +12,9 @@
 
 error_reporting(E_ALL);
 
-$loader = require __DIR__.'/../src/bootstrap.php';
-$loader->add('Composer\Test', __DIR__);
+if (function_exists('date_default_timezone_set') && function_exists('date_default_timezone_get')) {
+    date_default_timezone_set(@date_default_timezone_get());
+}
 
+require __DIR__.'/../src/bootstrap.php';
 require __DIR__.'/Composer/TestCase.php';
diff --git a/vendor/composer/installed.json b/vendor/composer/installed.json
index 06b299f..cf1e9ca 100644
--- a/vendor/composer/installed.json
+++ b/vendor/composer/installed.json
@@ -1,105 +1,142 @@
 [
     {
-        "name": "justinrainbow/json-schema",
-        "version": "1.1.0",
-        "version_normalized": "1.1.0.0",
+        "name": "symfony/process",
+        "version": "v2.6.4",
+        "version_normalized": "2.6.4.0",
+        "target-dir": "Symfony/Component/Process",
         "source": {
             "type": "git",
-            "url": "https://github.com/justinrainbow/json-schema.git",
-            "reference": "05ff6d8d79fe3ad190b0663d80d3f9deee79416c"
+            "url": "https://github.com/symfony/Process.git",
+            "reference": "ecfc23e89d9967999fa5f60a1e9af7384396e9ae"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/justinrainbow/json-schema/zipball/05ff6d8d79fe3ad190b0663d80d3f9deee79416c",
-            "reference": "05ff6d8d79fe3ad190b0663d80d3f9deee79416c",
+            "url": "https://api.github.com/repos/symfony/Process/zipball/ecfc23e89d9967999fa5f60a1e9af7384396e9ae",
+            "reference": "ecfc23e89d9967999fa5f60a1e9af7384396e9ae",
             "shasum": ""
         },
         "require": {
-            "php": ">=5.3.0"
+            "php": ">=5.3.3"
         },
-        "time": "2012-01-03 00:33:17",
+        "time": "2015-01-25 04:39:26",
         "type": "library",
+        "extra": {
+            "branch-alias": {
+                "dev-master": "2.6-dev"
+            }
+        },
         "installation-source": "dist",
         "autoload": {
             "psr-0": {
-                "JsonSchema": "src/"
+                "Symfony\\Component\\Process\\": ""
             }
         },
         "notification-url": "https://packagist.org/downloads/",
         "license": [
-            "NewBSD"
+            "MIT"
         ],
         "authors": [
             {
-                "name": "Igor Wiedler",
-                "email": "igor@wiedler.ch",
-                "homepage": "http://wiedler.ch/igor/"
+                "name": "Symfony Community",
+                "homepage": "http://symfony.com/contributors"
             },
             {
-                "name": "Bruno Prieto Reis",
-                "email": "bruno.p.reis@gmail.com"
-            },
+                "name": "Fabien Potencier",
+                "email": "fabien@symfony.com"
+            }
+        ],
+        "description": "Symfony Process Component",
+        "homepage": "http://symfony.com"
+    },
+    {
+        "name": "symfony/finder",
+        "version": "v2.6.4",
+        "version_normalized": "2.6.4.0",
+        "target-dir": "Symfony/Component/Finder",
+        "source": {
+            "type": "git",
+            "url": "https://github.com/symfony/Finder.git",
+            "reference": "16513333bca64186c01609961a2bb1b95b5e1355"
+        },
+        "dist": {
+            "type": "zip",
+            "url": "https://api.github.com/repos/symfony/Finder/zipball/16513333bca64186c01609961a2bb1b95b5e1355",
+            "reference": "16513333bca64186c01609961a2bb1b95b5e1355",
+            "shasum": ""
+        },
+        "require": {
+            "php": ">=5.3.3"
+        },
+        "time": "2015-01-03 08:01:59",
+        "type": "library",
+        "extra": {
+            "branch-alias": {
+                "dev-master": "2.6-dev"
+            }
+        },
+        "installation-source": "dist",
+        "autoload": {
+            "psr-0": {
+                "Symfony\\Component\\Finder\\": ""
+            }
+        },
+        "notification-url": "https://packagist.org/downloads/",
+        "license": [
+            "MIT"
+        ],
+        "authors": [
             {
-                "name": "Justin Rainbow",
-                "email": "justin.rainbow@gmail.com"
+                "name": "Symfony Community",
+                "homepage": "http://symfony.com/contributors"
             },
             {
-                "name": "Robert Schönthal",
-                "email": "seroscho@googlemail.com",
-                "homepage": "http://digitalkaoz.net"
+                "name": "Fabien Potencier",
+                "email": "fabien@symfony.com"
             }
         ],
-        "description": "A library to validate a json schema.",
-        "homepage": "https://github.com/justinrainbow/json-schema",
-        "keywords": [
-            "json",
-            "schema"
-        ]
+        "description": "Symfony Finder Component",
+        "homepage": "http://symfony.com"
     },
     {
-        "name": "composer/composer",
-        "version": "1.0.0-alpha8",
-        "version_normalized": "1.0.0.0-alpha8",
+        "name": "symfony/console",
+        "version": "v2.6.4",
+        "version_normalized": "2.6.4.0",
+        "target-dir": "Symfony/Component/Console",
         "source": {
             "type": "git",
-            "url": "https://github.com/composer/composer.git",
-            "reference": "1eb1df44a97fb2daca1bb8b007f3bee012f0aa46"
+            "url": "https://github.com/symfony/Console.git",
+            "reference": "e44154bfe3e41e8267d7a3794cd9da9a51cfac34"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/composer/composer/zipball/1eb1df44a97fb2daca1bb8b007f3bee012f0aa46",
-            "reference": "1eb1df44a97fb2daca1bb8b007f3bee012f0aa46",
+            "url": "https://api.github.com/repos/symfony/Console/zipball/e44154bfe3e41e8267d7a3794cd9da9a51cfac34",
+            "reference": "e44154bfe3e41e8267d7a3794cd9da9a51cfac34",
             "shasum": ""
         },
         "require": {
-            "justinrainbow/json-schema": "1.1.*",
-            "php": ">=5.3.2",
-            "seld/jsonlint": "1.*",
-            "symfony/console": "~2.3",
-            "symfony/finder": "~2.2",
-            "symfony/process": "~2.1"
+            "php": ">=5.3.3"
         },
         "require-dev": {
-            "phpunit/phpunit": "~3.7.10"
+            "psr/log": "~1.0",
+            "symfony/event-dispatcher": "~2.1",
+            "symfony/process": "~2.1"
         },
         "suggest": {
-            "ext-openssl": "Enabling the openssl extension allows you to access https URLs for repositories and packages",
-            "ext-zip": "Enabling the zip extension allows you to unzip archives, and allows gzip compression of all internet traffic"
+            "psr/log": "For using the console logger",
+            "symfony/event-dispatcher": "",
+            "symfony/process": ""
         },
-        "time": "2014-01-06 18:39:59",
-        "bin": [
-            "bin/composer"
-        ],
+        "time": "2015-01-25 04:39:26",
         "type": "library",
         "extra": {
             "branch-alias": {
-                "dev-master": "1.0-dev"
+                "dev-master": "2.6-dev"
             }
         },
         "installation-source": "dist",
         "autoload": {
             "psr-0": {
-                "Composer": "src/"
+                "Symfony\\Component\\Console\\": ""
             }
         },
         "notification-url": "https://packagist.org/downloads/",
@@ -108,44 +145,36 @@
         ],
         "authors": [
             {
-                "name": "Jordi Boggiano",
-                "email": "j.boggiano@seld.be",
-                "homepage": "http://seld.be",
-                "role": "Developer"
+                "name": "Symfony Community",
+                "homepage": "http://symfony.com/contributors"
             },
             {
-                "name": "Nils Adermann",
-                "email": "naderman@naderman.de",
-                "homepage": "http://www.naderman.de"
+                "name": "Fabien Potencier",
+                "email": "fabien@symfony.com"
             }
         ],
-        "description": "Dependency Manager",
-        "homepage": "http://getcomposer.org/",
-        "keywords": [
-            "autoload",
-            "dependency",
-            "package"
-        ]
+        "description": "Symfony Console Component",
+        "homepage": "http://symfony.com"
     },
     {
         "name": "seld/jsonlint",
-        "version": "1.2.0",
-        "version_normalized": "1.2.0.0",
+        "version": "1.3.1",
+        "version_normalized": "1.3.1.0",
         "source": {
             "type": "git",
             "url": "https://github.com/Seldaek/jsonlint.git",
-            "reference": "9cae56dbe34f4392e7d0f559474df33749a39f8d"
+            "reference": "863ae85c6d3ef60ca49cb12bd051c4a0648c40c4"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/Seldaek/jsonlint/zipball/9cae56dbe34f4392e7d0f559474df33749a39f8d",
-            "reference": "9cae56dbe34f4392e7d0f559474df33749a39f8d",
+            "url": "https://api.github.com/repos/Seldaek/jsonlint/zipball/863ae85c6d3ef60ca49cb12bd051c4a0648c40c4",
+            "reference": "863ae85c6d3ef60ca49cb12bd051c4a0648c40c4",
             "shasum": ""
         },
         "require": {
             "php": ">=5.3.0"
         },
-        "time": "2014-07-20 17:36:11",
+        "time": "2015-01-04 21:18:15",
         "bin": [
             "bin/jsonlint"
         ],
@@ -176,141 +205,117 @@
         ]
     },
     {
-        "name": "symfony/console",
-        "version": "v2.5.3",
-        "version_normalized": "2.5.3.0",
-        "target-dir": "Symfony/Component/Console",
+        "name": "justinrainbow/json-schema",
+        "version": "1.3.7",
+        "version_normalized": "1.3.7.0",
         "source": {
             "type": "git",
-            "url": "https://github.com/symfony/Console.git",
-            "reference": "cd2d1e4bac2206b337326b0140ff475fe9ad5f63"
+            "url": "https://github.com/justinrainbow/json-schema.git",
+            "reference": "87b54b460febed69726c781ab67462084e97a105"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/symfony/Console/zipball/cd2d1e4bac2206b337326b0140ff475fe9ad5f63",
-            "reference": "cd2d1e4bac2206b337326b0140ff475fe9ad5f63",
+            "url": "https://api.github.com/repos/justinrainbow/json-schema/zipball/87b54b460febed69726c781ab67462084e97a105",
+            "reference": "87b54b460febed69726c781ab67462084e97a105",
             "shasum": ""
         },
         "require": {
-            "php": ">=5.3.3"
+            "php": ">=5.3.0"
         },
         "require-dev": {
-            "psr/log": "~1.0",
-            "symfony/event-dispatcher": "~2.1"
-        },
-        "suggest": {
-            "psr/log": "For using the console logger",
-            "symfony/event-dispatcher": ""
+            "json-schema/json-schema-test-suite": "1.1.0",
+            "phpdocumentor/phpdocumentor": "~2",
+            "phpunit/phpunit": "~3.7"
         },
-        "time": "2014-08-05 09:00:40",
+        "time": "2014-08-25 02:48:14",
+        "bin": [
+            "bin/validate-json"
+        ],
         "type": "library",
         "extra": {
             "branch-alias": {
-                "dev-master": "2.5-dev"
+                "dev-master": "1.4.x-dev"
             }
         },
         "installation-source": "dist",
         "autoload": {
             "psr-0": {
-                "Symfony\\Component\\Console\\": ""
+                "JsonSchema": "src/"
             }
         },
         "notification-url": "https://packagist.org/downloads/",
         "license": [
-            "MIT"
+            "BSD-3-Clause"
         ],
         "authors": [
             {
-                "name": "Symfony Community",
-                "homepage": "http://symfony.com/contributors"
+                "name": "Bruno Prieto Reis",
+                "email": "bruno.p.reis@gmail.com"
             },
             {
-                "name": "Fabien Potencier",
-                "email": "fabien@symfony.com"
-            }
-        ],
-        "description": "Symfony Console Component",
-        "homepage": "http://symfony.com"
-    },
-    {
-        "name": "symfony/finder",
-        "version": "v2.5.3",
-        "version_normalized": "2.5.3.0",
-        "target-dir": "Symfony/Component/Finder",
-        "source": {
-            "type": "git",
-            "url": "https://github.com/symfony/Finder.git",
-            "reference": "090fe4eaff414d8f2171c7a4748ea868d530775f"
-        },
-        "dist": {
-            "type": "zip",
-            "url": "https://api.github.com/repos/symfony/Finder/zipball/090fe4eaff414d8f2171c7a4748ea868d530775f",
-            "reference": "090fe4eaff414d8f2171c7a4748ea868d530775f",
-            "shasum": ""
-        },
-        "require": {
-            "php": ">=5.3.3"
-        },
-        "time": "2014-07-28 13:20:46",
-        "type": "library",
-        "extra": {
-            "branch-alias": {
-                "dev-master": "2.5-dev"
-            }
-        },
-        "installation-source": "dist",
-        "autoload": {
-            "psr-0": {
-                "Symfony\\Component\\Finder\\": ""
-            }
-        },
-        "notification-url": "https://packagist.org/downloads/",
-        "license": [
-            "MIT"
-        ],
-        "authors": [
+                "name": "Justin Rainbow",
+                "email": "justin.rainbow@gmail.com"
+            },
             {
-                "name": "Symfony Community",
-                "homepage": "http://symfony.com/contributors"
+                "name": "Igor Wiedler",
+                "email": "igor@wiedler.ch"
             },
             {
-                "name": "Fabien Potencier",
-                "email": "fabien@symfony.com"
+                "name": "Robert Schönthal",
+                "email": "seroscho@googlemail.com"
             }
         ],
-        "description": "Symfony Finder Component",
-        "homepage": "http://symfony.com"
+        "description": "A library to validate a json schema.",
+        "homepage": "https://github.com/justinrainbow/json-schema",
+        "keywords": [
+            "json",
+            "schema"
+        ]
     },
     {
-        "name": "symfony/process",
-        "version": "v2.5.3",
-        "version_normalized": "2.5.3.0",
-        "target-dir": "Symfony/Component/Process",
+        "name": "composer/composer",
+        "version": "1.0.0-alpha9",
+        "version_normalized": "1.0.0.0-alpha9",
         "source": {
             "type": "git",
-            "url": "https://github.com/symfony/Process.git",
-            "reference": "e0997d2a9a1a763484b34b989900b61322a9b056"
+            "url": "https://github.com/composer/composer.git",
+            "reference": "eb1ce550ca51134ee619ad3e37f5a0b7e980dd24"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/symfony/Process/zipball/e0997d2a9a1a763484b34b989900b61322a9b056",
-            "reference": "e0997d2a9a1a763484b34b989900b61322a9b056",
+            "url": "https://api.github.com/repos/composer/composer/zipball/eb1ce550ca51134ee619ad3e37f5a0b7e980dd24",
+            "reference": "eb1ce550ca51134ee619ad3e37f5a0b7e980dd24",
             "shasum": ""
         },
         "require": {
-            "php": ">=5.3.3"
+            "justinrainbow/json-schema": "~1.1",
+            "php": ">=5.3.2",
+            "seld/jsonlint": "~1.0",
+            "symfony/console": "~2.3",
+            "symfony/finder": "~2.2",
+            "symfony/process": "~2.1"
+        },
+        "require-dev": {
+            "phpunit/phpunit": "~4.0"
         },
-        "time": "2014-08-05 09:00:40",
+        "suggest": {
+            "ext-openssl": "Enabling the openssl extension allows you to access https URLs for repositories and packages",
+            "ext-zip": "Enabling the zip extension allows you to unzip archives, and allows gzip compression of all internet traffic"
+        },
+        "time": "2014-12-07 17:15:20",
+        "bin": [
+            "bin/composer"
+        ],
         "type": "library",
         "extra": {
             "branch-alias": {
-                "dev-master": "2.5-dev"
+                "dev-master": "1.0-dev"
             }
         },
         "installation-source": "dist",
         "autoload": {
             "psr-0": {
-                "Symfony\\Component\\Process\\": ""
+                "Composer": "src/"
             }
         },
         "notification-url": "https://packagist.org/downloads/",
@@ -319,15 +324,22 @@
         ],
         "authors": [
             {
-                "name": "Symfony Community",
-                "homepage": "http://symfony.com/contributors"
+                "name": "Nils Adermann",
+                "email": "naderman@naderman.de",
+                "homepage": "http://www.naderman.de"
             },
             {
-                "name": "Fabien Potencier",
-                "email": "fabien@symfony.com"
+                "name": "Jordi Boggiano",
+                "email": "j.boggiano@seld.be",
+                "homepage": "http://seld.be"
             }
         ],
-        "description": "Symfony Process Component",
-        "homepage": "http://symfony.com"
+        "description": "Composer helps you declare, manage and install dependencies of PHP projects, ensuring you have the right stack everywhere.",
+        "homepage": "http://getcomposer.org/",
+        "keywords": [
+            "autoload",
+            "dependency",
+            "package"
+        ]
     }
 ]
diff --git a/vendor/justinrainbow/json-schema/.gitignore b/vendor/justinrainbow/json-schema/.gitignore
index 0133df9..3530a93 100644
--- a/vendor/justinrainbow/json-schema/.gitignore
+++ b/vendor/justinrainbow/json-schema/.gitignore
@@ -1,3 +1,7 @@
-/composer.lock
-/vendor/*
-!/vendor/symfony
+/vendor
+/bin
+!/bin/validate-json
+coverage
+.buildpath
+.project
+.settings
diff --git a/vendor/justinrainbow/json-schema/.gitmodules b/vendor/justinrainbow/json-schema/.gitmodules
deleted file mode 100644
index 4f4d135..0000000
--- a/vendor/justinrainbow/json-schema/.gitmodules
+++ /dev/null
@@ -1,3 +0,0 @@
-[submodule "vendor/symfony/Component/ClassLoader"]
-	path = vendor/symfony/Component/ClassLoader
-	url = https://github.com/symfony/ClassLoader.git
diff --git a/vendor/justinrainbow/json-schema/.scrutinizer.yml b/vendor/justinrainbow/json-schema/.scrutinizer.yml
new file mode 100644
index 0000000..730b1fd
--- /dev/null
+++ b/vendor/justinrainbow/json-schema/.scrutinizer.yml
@@ -0,0 +1,5 @@
+before_commands:
+  - composer install --dev
+
+tools:
+  php_analyzer: true
diff --git a/vendor/justinrainbow/json-schema/.travis.yml b/vendor/justinrainbow/json-schema/.travis.yml
index 483f340..040bfb9 100644
--- a/vendor/justinrainbow/json-schema/.travis.yml
+++ b/vendor/justinrainbow/json-schema/.travis.yml
@@ -1,7 +1,23 @@
 language: php
 
 php:
+  - 5.3.3
   - 5.3
   - 5.4
+  - 5.5
+  - 5.6
+  - hhvm
+ 
+matrix:
+    allow_failures:
+        - php: hhvm
 
-before_script: git submodule update --init
\ No newline at end of file
+before_script:
+  - sudo apt-get -y install pypy python-sphinx graphviz
+  - composer selfupdate
+  - composer install --prefer-source
+
+script:
+  - cd docs && make linkcheck && cd ..
+  - vendor/bin/phpdoc.php -d src -t docs-api
+  - vendor/bin/phpunit --coverage-text
diff --git a/vendor/justinrainbow/json-schema/README.md b/vendor/justinrainbow/json-schema/README.md
index b165098..e573aa6 100644
--- a/vendor/justinrainbow/json-schema/README.md
+++ b/vendor/justinrainbow/json-schema/README.md
@@ -1,4 +1,8 @@
-# JSON Schema for PHP [![Build Status](https://secure.travis-ci.org/justinrainbow/json-schema.png)](http://travis-ci.org/justinrainbow/json-schema)
+# JSON Schema for PHP
+
+[![Build Status](https://secure.travis-ci.org/justinrainbow/json-schema.png)](http://travis-ci.org/justinrainbow/json-schema)
+[![Latest Stable Version](https://poser.pugx.org/justinrainbow/json-schema/v/stable.png)](https://packagist.org/packages/justinrainbow/json-schema)
+[![Total Downloads](https://poser.pugx.org/justinrainbow/json-schema/downloads.png)](https://packagist.org/packages/justinrainbow/json-schema)
 
 A PHP Implementation for validating `JSON` Structures against a given `Schema`.
 
@@ -12,29 +16,36 @@ See [json-schema](http://json-schema.org/) for more details.
 
 ### Dependencies
 
-#### via `submodules` (*will use the Symfony ClassLoader Component*)
-
-    $ git submodule update --init
-
-#### via [`composer`](https://github.com/composer/composer) (*will use the Composer ClassLoader*)
+#### [`Composer`](https://github.com/composer/composer) (*will use the Composer ClassLoader*)
 
     $ wget http://getcomposer.org/composer.phar
-    $ php composer.phar install
+    $ php composer.phar require justinrainbow/json-schema:~1.3
 
 ## Usage
 
 ```php
 <?php
 
+// Get the schema and data as objects
+$retriever = new JsonSchema\Uri\UriRetriever;
+$schema = $retriever->retrieve('file://' . realpath('schema.json'));
+$data = json_decode(file_get_contents('data.json'));
+
+// If you use $ref or if you are unsure, resolve those references here
+// This modifies the $schema object
+$refResolver = new JsonSchema\RefResolver($retriever);
+$refResolver->resolve($schema, 'file://' . __DIR__);
+
+// Validate
 $validator = new JsonSchema\Validator();
-$validator->check(json_decode($json), json_decode($schema));
+$validator->check($data, $schema);
 
 if ($validator->isValid()) {
     echo "The supplied JSON validates against the schema.\n";
 } else {
     echo "JSON does not validate. Violations:\n";
     foreach ($validator->getErrors() as $error) {
-        echo sprintf("[%s] %s\n",$error['property'], $error['message']);
+        echo sprintf("[%s] %s\n", $error['property'], $error['message']);
     }
 }
 ```
diff --git a/vendor/justinrainbow/json-schema/composer.json b/vendor/justinrainbow/json-schema/composer.json
index dbf8c50..b28b3b9 100644
--- a/vendor/justinrainbow/json-schema/composer.json
+++ b/vendor/justinrainbow/json-schema/composer.json
@@ -4,8 +4,7 @@
     "keywords": ["json", "schema"],
     "homepage": "https://github.com/justinrainbow/json-schema",
     "type": "library",
-    "license": "NewBSD",
-    "version": "1.1.0",
+    "license": "BSD-3-Clause",
     "authors": [
         {
             "name": "Bruno Prieto Reis",
@@ -24,10 +23,33 @@
             "email": "seroscho@googlemail.com"
         }
     ],
+    "repositories": [{
+        "type": "package",
+        "package": {
+            "name": "json-schema/JSON-Schema-Test-Suite",
+            "version": "1.1.0",
+            "source": {
+                "url": "https://github.com/json-schema/JSON-Schema-Test-Suite",
+                "type": "git",
+                "reference": "1.1.0"
+            }
+        }
+    }],
     "require": {
         "php": ">=5.3.0"
     },
+    "require-dev": {
+        "json-schema/JSON-Schema-Test-Suite": "1.1.0",
+        "phpunit/phpunit": "~3.7",
+        "phpdocumentor/phpdocumentor": "~2"
+    },
     "autoload": {
         "psr-0": { "JsonSchema": "src/" }
+    },
+    "bin": ["bin/validate-json"],
+    "extra": {
+        "branch-alias": {
+            "dev-master": "1.4.x-dev"
+        }
     }
 }
diff --git a/vendor/justinrainbow/json-schema/composer.lock b/vendor/justinrainbow/json-schema/composer.lock
new file mode 100644
index 0000000..54cdcf6
--- /dev/null
+++ b/vendor/justinrainbow/json-schema/composer.lock
@@ -0,0 +1,2853 @@
+{
+    "_readme": [
+        "This file locks the dependencies of your project to a known state",
+        "Read more about it at http://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file"
+    ],
+    "hash": "89ebd85edb5e70d4d203051b4c70bddf",
+    "packages": [
+
+    ],
+    "packages-dev": [
+        {
+            "name": "cilex/cilex",
+            "version": "1.0.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/Cilex/Cilex.git",
+                "reference": "89ff6b821885b3f060d77de4d55ac8b4b9b42162"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/Cilex/Cilex/zipball/89ff6b821885b3f060d77de4d55ac8b4b9b42162",
+                "reference": "89ff6b821885b3f060d77de4d55ac8b4b9b42162",
+                "shasum": ""
+            },
+            "require": {
+                "cilex/console-service-provider": "1.*",
+                "php": ">=5.3.3",
+                "pimple/pimple": "1.0.*",
+                "symfony/finder": "~2.1",
+                "symfony/process": "~2.1"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "3.7.*",
+                "symfony/validator": "~2.1"
+            },
+            "suggest": {
+                "monolog/monolog": ">=1.0.0",
+                "symfony/validator": ">=1.0.0",
+                "symfony/yaml": ">=1.0.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.0-dev"
+                }
+            },
+            "autoload": {
+                "psr-0": {
+                    "Cilex": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Mike van Riel",
+                    "email": "mike.vanriel@naenius.com"
+                }
+            ],
+            "description": "The PHP micro-framework for Command line tools based on the Symfony2 Components",
+            "homepage": "http://cilex.github.com",
+            "keywords": [
+                "cli",
+                "microframework"
+            ],
+            "time": "2013-08-01 15:19:34"
+        },
+        {
+            "name": "cilex/console-service-provider",
+            "version": "1.0.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/Cilex/console-service-provider.git",
+                "reference": "25ee3d1875243d38e1a3448ff94bdf944f70d24e"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/Cilex/console-service-provider/zipball/25ee3d1875243d38e1a3448ff94bdf944f70d24e",
+                "reference": "25ee3d1875243d38e1a3448ff94bdf944f70d24e",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3",
+                "pimple/pimple": "1.*@dev",
+                "symfony/console": "~2.1"
+            },
+            "require-dev": {
+                "cilex/cilex": "1.*@dev",
+                "silex/silex": "1.*@dev"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.0-dev"
+                }
+            },
+            "autoload": {
+                "psr-0": {
+                    "Cilex\\Provider\\Console": "src"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Beau Simensen",
+                    "email": "beau@dflydev.com",
+                    "homepage": "http://beausimensen.com"
+                },
+                {
+                    "name": "Mike van Riel",
+                    "email": "mike.vanriel@naenius.com"
+                }
+            ],
+            "description": "Console Service Provider",
+            "keywords": [
+                "cilex",
+                "console",
+                "pimple",
+                "service-provider",
+                "silex"
+            ],
+            "time": "2012-12-19 10:50:58"
+        },
+        {
+            "name": "doctrine/annotations",
+            "version": "v1.1.2",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/doctrine/annotations.git",
+                "reference": "40db0c96985aab2822edbc4848b3bd2429e02670"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/doctrine/annotations/zipball/40db0c96985aab2822edbc4848b3bd2429e02670",
+                "reference": "40db0c96985aab2822edbc4848b3bd2429e02670",
+                "shasum": ""
+            },
+            "require": {
+                "doctrine/lexer": "1.*",
+                "php": ">=5.3.2"
+            },
+            "require-dev": {
+                "doctrine/cache": "1.*"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.0.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-0": {
+                    "Doctrine\\Common\\Annotations\\": "lib/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Jonathan Wage",
+                    "email": "jonwage@gmail.com",
+                    "homepage": "http://www.jwage.com/",
+                    "role": "Creator"
+                },
+                {
+                    "name": "Guilherme Blanco",
+                    "email": "guilhermeblanco@gmail.com",
+                    "homepage": "http://www.instaclick.com"
+                },
+                {
+                    "name": "Roman Borschel",
+                    "email": "roman@code-factory.org"
+                },
+                {
+                    "name": "Benjamin Eberlei",
+                    "email": "kontakt@beberlei.de"
+                },
+                {
+                    "name": "Johannes Schmitt",
+                    "email": "schmittjoh@gmail.com",
+                    "homepage": "http://jmsyst.com",
+                    "role": "Developer of wrapped JMSSerializerBundle"
+                }
+            ],
+            "description": "Docblock Annotations Parser",
+            "homepage": "http://www.doctrine-project.org",
+            "keywords": [
+                "annotations",
+                "docblock",
+                "parser"
+            ],
+            "time": "2013-06-16 21:33:03"
+        },
+        {
+            "name": "doctrine/lexer",
+            "version": "v1.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/doctrine/lexer.git",
+                "reference": "2f708a85bb3aab5d99dab8be435abd73e0b18acb"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/doctrine/lexer/zipball/2f708a85bb3aab5d99dab8be435abd73e0b18acb",
+                "reference": "2f708a85bb3aab5d99dab8be435abd73e0b18acb",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.2"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-0": {
+                    "Doctrine\\Common\\Lexer\\": "lib/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Guilherme Blanco",
+                    "email": "guilhermeblanco@gmail.com",
+                    "homepage": "http://www.instaclick.com"
+                },
+                {
+                    "name": "Roman Borschel",
+                    "email": "roman@code-factory.org"
+                },
+                {
+                    "name": "Johannes Schmitt",
+                    "email": "schmittjoh@gmail.com",
+                    "homepage": "http://jmsyst.com",
+                    "role": "Developer of wrapped JMSSerializerBundle"
+                }
+            ],
+            "description": "Base library for a lexer that can be used in Top-Down, Recursive Descent Parsers.",
+            "homepage": "http://www.doctrine-project.org",
+            "keywords": [
+                "lexer",
+                "parser"
+            ],
+            "time": "2013-01-12 18:59:04"
+        },
+        {
+            "name": "erusev/parsedown",
+            "version": "0.9.4",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/erusev/parsedown.git",
+                "reference": "d29ff18299210b52a75a631a70963e7c8b35b04f"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/erusev/parsedown/zipball/d29ff18299210b52a75a631a70963e7c8b35b04f",
+                "reference": "d29ff18299210b52a75a631a70963e7c8b35b04f",
+                "shasum": ""
+            },
+            "type": "library",
+            "autoload": {
+                "psr-0": {
+                    "Parsedown": ""
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Emanuil Rusev",
+                    "email": "hello@erusev.com",
+                    "homepage": "http://erusev.com"
+                }
+            ],
+            "description": "Parser for Markdown.",
+            "homepage": "http://parsedown.org",
+            "keywords": [
+                "markdown",
+                "parser"
+            ],
+            "time": "2014-02-06 12:16:14"
+        },
+        {
+            "name": "jms/metadata",
+            "version": "1.5.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/schmittjoh/metadata.git",
+                "reference": "88ffa28bc987e4c26229fc84a2e541b6ed4e1459"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/schmittjoh/metadata/zipball/88ffa28bc987e4c26229fc84a2e541b6ed4e1459",
+                "reference": "88ffa28bc987e4c26229fc84a2e541b6ed4e1459",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.0"
+            },
+            "require-dev": {
+                "doctrine/cache": "~1.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.5.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-0": {
+                    "Metadata\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "Apache"
+            ],
+            "authors": [
+                {
+                    "name": "Johannes M. Schmitt",
+                    "email": "schmittjoh@gmail.com",
+                    "homepage": "http://jmsyst.com",
+                    "role": "Developer of wrapped JMSSerializerBundle"
+                }
+            ],
+            "description": "Class/method/property metadata management in PHP",
+            "keywords": [
+                "annotations",
+                "metadata",
+                "xml",
+                "yaml"
+            ],
+            "time": "2013-11-05 23:02:36"
+        },
+        {
+            "name": "jms/parser-lib",
+            "version": "1.0.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/schmittjoh/parser-lib.git",
+                "reference": "c509473bc1b4866415627af0e1c6cc8ac97fa51d"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/schmittjoh/parser-lib/zipball/c509473bc1b4866415627af0e1c6cc8ac97fa51d",
+                "reference": "c509473bc1b4866415627af0e1c6cc8ac97fa51d",
+                "shasum": ""
+            },
+            "require": {
+                "phpoption/phpoption": ">=0.9,<2.0-dev"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.0-dev"
+                }
+            },
+            "autoload": {
+                "psr-0": {
+                    "JMS\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "Apache2"
+            ],
+            "description": "A library for easily creating recursive-descent parsers.",
+            "time": "2012-11-18 18:08:43"
+        },
+        {
+            "name": "jms/serializer",
+            "version": "0.15.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/schmittjoh/serializer.git",
+                "reference": "4a49caf0a20babcf8040fb1cf84f26faff6e7d85"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/schmittjoh/serializer/zipball/4a49caf0a20babcf8040fb1cf84f26faff6e7d85",
+                "reference": "4a49caf0a20babcf8040fb1cf84f26faff6e7d85",
+                "shasum": ""
+            },
+            "require": {
+                "doctrine/annotations": "1.*",
+                "jms/metadata": "~1.1",
+                "jms/parser-lib": "1.*",
+                "php": ">=5.3.2",
+                "phpcollection/phpcollection": ">=0.1,<0.3-dev"
+            },
+            "require-dev": {
+                "doctrine/orm": ">=2.1,<2.4-dev",
+                "doctrine/phpcr-odm": "~1.0.1",
+                "jackalope/jackalope-doctrine-dbal": "1.0.*",
+                "propel/propel1": "~1.7",
+                "symfony/filesystem": "2.*",
+                "symfony/form": ">=2.1,<=2.4-dev",
+                "symfony/translation": ">=2.0,<2.2-dev",
+                "symfony/validator": ">=2.0,<2.2-dev",
+                "symfony/yaml": "2.*",
+                "twig/twig": ">=1.8,<2.0-dev"
+            },
+            "suggest": {
+                "symfony/yaml": "Required if you'd like to serialize data to YAML format."
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "0.14-dev"
+                }
+            },
+            "autoload": {
+                "psr-0": {
+                    "JMS\\Serializer": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "Apache2"
+            ],
+            "authors": [
+                {
+                    "name": "Johannes M. Schmitt",
+                    "email": "schmittjoh@gmail.com",
+                    "homepage": "http://jmsyst.com",
+                    "role": "Developer of wrapped JMSSerializerBundle"
+                }
+            ],
+            "description": "Library for (de-)serializing data of any complexity; supports XML, JSON, and YAML.",
+            "homepage": "http://jmsyst.com/libs/serializer",
+            "keywords": [
+                "deserialization",
+                "jaxb",
+                "json",
+                "serialization",
+                "xml"
+            ],
+            "time": "2014-02-10 11:00:05"
+        },
+        {
+            "name": "json-schema/JSON-Schema-Test-Suite",
+            "version": "1.1.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/json-schema/JSON-Schema-Test-Suite",
+                "reference": "1.1.0"
+            },
+            "type": "library"
+        },
+        {
+            "name": "monolog/monolog",
+            "version": "1.7.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/Seldaek/monolog.git",
+                "reference": "6225b22de9dcf36546be3a0b2fa8e3d986153f57"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/Seldaek/monolog/zipball/6225b22de9dcf36546be3a0b2fa8e3d986153f57",
+                "reference": "6225b22de9dcf36546be3a0b2fa8e3d986153f57",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.0",
+                "psr/log": "~1.0"
+            },
+            "require-dev": {
+                "aws/aws-sdk-php": "~2.4.8",
+                "doctrine/couchdb": "dev-master",
+                "mlehner/gelf-php": "1.0.*",
+                "phpunit/phpunit": "~3.7.0",
+                "raven/raven": "0.5.*",
+                "ruflin/elastica": "0.90.*"
+            },
+            "suggest": {
+                "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB",
+                "doctrine/couchdb": "Allow sending log messages to a CouchDB server",
+                "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)",
+                "ext-mongo": "Allow sending log messages to a MongoDB server",
+                "mlehner/gelf-php": "Allow sending log messages to a GrayLog2 server",
+                "raven/raven": "Allow sending log messages to a Sentry server",
+                "ruflin/elastica": "Allow sending log messages to an Elastic Search server"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.7.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-0": {
+                    "Monolog": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Jordi Boggiano",
+                    "email": "j.boggiano@seld.be",
+                    "homepage": "http://seld.be",
+                    "role": "Developer"
+                }
+            ],
+            "description": "Sends your logs to files, sockets, inboxes, databases and various web services",
+            "homepage": "http://github.com/Seldaek/monolog",
+            "keywords": [
+                "log",
+                "logging",
+                "psr-3"
+            ],
+            "time": "2013-11-14 19:48:31"
+        },
+        {
+            "name": "nikic/php-parser",
+            "version": "v0.9.4",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/nikic/PHP-Parser.git",
+                "reference": "1e5e280ae88a27effa2ae4aa2bd088494ed8594f"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/1e5e280ae88a27effa2ae4aa2bd088494ed8594f",
+                "reference": "1e5e280ae88a27effa2ae4aa2bd088494ed8594f",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.2"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "0.9-dev"
+                }
+            },
+            "autoload": {
+                "psr-0": {
+                    "PHPParser": "lib/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Nikita Popov"
+                }
+            ],
+            "description": "A PHP parser written in PHP",
+            "keywords": [
+                "parser",
+                "php"
+            ],
+            "time": "2013-08-25 17:11:40"
+        },
+        {
+            "name": "phpcollection/phpcollection",
+            "version": "0.2.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/schmittjoh/php-collection.git",
+                "reference": "acb02a921bb364f360ce786b13455345063c4a07"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/schmittjoh/php-collection/zipball/acb02a921bb364f360ce786b13455345063c4a07",
+                "reference": "acb02a921bb364f360ce786b13455345063c4a07",
+                "shasum": ""
+            },
+            "require": {
+                "phpoption/phpoption": "1.*"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "0.2-dev"
+                }
+            },
+            "autoload": {
+                "psr-0": {
+                    "PhpCollection": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "Apache2"
+            ],
+            "authors": [
+                {
+                    "name": "Johannes M. Schmitt",
+                    "email": "schmittjoh@gmail.com",
+                    "homepage": "http://jmsyst.com",
+                    "role": "Developer of wrapped JMSSerializerBundle"
+                }
+            ],
+            "description": "General-Purpose Collection Library for PHP",
+            "keywords": [
+                "collection",
+                "list",
+                "map",
+                "sequence",
+                "set"
+            ],
+            "time": "2013-01-23 15:16:14"
+        },
+        {
+            "name": "phpdocumentor/fileset",
+            "version": "1.0.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/phpDocumentor/Fileset.git",
+                "reference": "bfa78d8fa9763dfce6d0e5d3730c1d8ab25d34b0"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/phpDocumentor/Fileset/zipball/bfa78d8fa9763dfce6d0e5d3730c1d8ab25d34b0",
+                "reference": "bfa78d8fa9763dfce6d0e5d3730c1d8ab25d34b0",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3",
+                "symfony/finder": "~2.1"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "~3.7"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-0": {
+                    "phpDocumentor": [
+                        "src/",
+                        "tests/unit/"
+                    ]
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "description": "Fileset component for collecting a set of files given directories and file paths",
+            "homepage": "http://www.phpdoc.org",
+            "keywords": [
+                "files",
+                "fileset",
+                "phpdoc"
+            ],
+            "time": "2013-08-06 21:07:42"
+        },
+        {
+            "name": "phpdocumentor/graphviz",
+            "version": "1.0.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/phpDocumentor/GraphViz.git",
+                "reference": "24e7d2f285a5972dbdce6a36f26d499b144eb1b1"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/phpDocumentor/GraphViz/zipball/24e7d2f285a5972dbdce6a36f26d499b144eb1b1",
+                "reference": "24e7d2f285a5972dbdce6a36f26d499b144eb1b1",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "~3.7"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-0": {
+                    "phpDocumentor": [
+                        "src/",
+                        "tests/unit"
+                    ]
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Mike van Riel",
+                    "email": "mike.vanriel@naenius.com"
+                }
+            ],
+            "time": "2014-02-16 07:54:39"
+        },
+        {
+            "name": "phpdocumentor/phpdocumentor",
+            "version": "v2.2.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/phpDocumentor/phpDocumentor2.git",
+                "reference": "62caf732d9dba96666e410899913e0fe18fd7027"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/phpDocumentor/phpDocumentor2/zipball/62caf732d9dba96666e410899913e0fe18fd7027",
+                "reference": "62caf732d9dba96666e410899913e0fe18fd7027",
+                "shasum": ""
+            },
+            "require": {
+                "cilex/cilex": "~1.0",
+                "erusev/parsedown": "~0.7",
+                "jms/serializer": "~0.12",
+                "monolog/monolog": "~1.6",
+                "php": ">=5.3.3",
+                "phpdocumentor/fileset": "~1.0",
+                "phpdocumentor/graphviz": "~1.0",
+                "phpdocumentor/reflection": "~1.0",
+                "phpdocumentor/reflection-docblock": "~2.0",
+                "phpdocumentor/template-abstract": "~1.2",
+                "phpdocumentor/template-checkstyle": "~1.2",
+                "phpdocumentor/template-clean": "~1.0",
+                "phpdocumentor/template-new-black": "~1.3",
+                "phpdocumentor/template-old-ocean": "~1.3",
+                "phpdocumentor/template-responsive": "~1.3",
+                "phpdocumentor/template-responsive-twig": "~1.2",
+                "phpdocumentor/template-xml": "~1.0",
+                "phpdocumentor/template-zend": "~1.3",
+                "symfony/config": "~2.3",
+                "symfony/event-dispatcher": "~2.1",
+                "symfony/stopwatch": "~2.3",
+                "symfony/validator": "~2.2",
+                "twig/twig": "~1.3",
+                "zendframework/zend-cache": "2.*",
+                "zendframework/zend-config": "2.*",
+                "zendframework/zend-filter": "2.*",
+                "zendframework/zend-i18n": "2.*",
+                "zendframework/zend-serializer": "2.*",
+                "zendframework/zend-servicemanager": "2.*",
+                "zendframework/zend-stdlib": "2.*"
+            },
+            "require-dev": {
+                "behat/behat": "~2.4",
+                "mikey179/vfsstream": "~1.2",
+                "mockery/mockery": ">=0.8.0",
+                "phpunit/phpunit": "~3.7",
+                "squizlabs/php_codesniffer": "~1.4"
+            },
+            "bin": [
+                "bin/phpdoc.php"
+            ],
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.1-dev"
+                }
+            },
+            "autoload": {
+                "psr-0": {
+                    "phpDocumentor": [
+                        "src/",
+                        "tests/unit/"
+                    ]
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "description": "Documentation Generator for PHP",
+            "homepage": "http://www.phpdoc.org",
+            "keywords": [
+                "api",
+                "application",
+                "dga",
+                "documentation",
+                "phpdoc"
+            ],
+            "time": "2013-12-05 12:32:57"
+        },
+        {
+            "name": "phpdocumentor/reflection",
+            "version": "1.0.3",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/phpDocumentor/Reflection.git",
+                "reference": "7fa71b389e718ea5c33fa0cf0eb45280a4513b7d"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/phpDocumentor/Reflection/zipball/7fa71b389e718ea5c33fa0cf0eb45280a4513b7d",
+                "reference": "7fa71b389e718ea5c33fa0cf0eb45280a4513b7d",
+                "shasum": ""
+            },
+            "require": {
+                "nikic/php-parser": ">=0.9",
+                "php": ">=5.3.3",
+                "phpdocumentor/reflection-docblock": "2.*@dev",
+                "psr/log": "~1.0"
+            },
+            "require-dev": {
+                "behat/behat": "~2.4",
+                "mockery/mockery": ">=0.7.0",
+                "phpunit/phpunit": "~3.7"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-0": {
+                    "phpDocumentor": [
+                        "src/",
+                        "tests/unit/",
+                        "tests/mocks/"
+                    ]
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "description": "Reflection library to do Static Analysis for PHP Projects",
+            "homepage": "http://www.phpdoc.org",
+            "keywords": [
+                "phpDocumentor",
+                "phpdoc",
+                "reflection",
+                "static analysis"
+            ],
+            "time": "2014-02-16 15:05:27"
+        },
+        {
+            "name": "phpdocumentor/reflection-docblock",
+            "version": "2.0.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git",
+                "reference": "cfb3ebea556b24df8f8f3745d61478293cb5a166"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/cfb3ebea556b24df8f8f3745d61478293cb5a166",
+                "reference": "cfb3ebea556b24df8f8f3745d61478293cb5a166",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "3.7.*@stable"
+            },
+            "suggest": {
+                "dflydev/markdown": "1.0.*",
+                "erusev/parsedown": "~0.7"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.0.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-0": {
+                    "phpDocumentor": [
+                        "src/"
+                    ]
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Mike van Riel",
+                    "email": "mike.vanriel@naenius.com"
+                }
+            ],
+            "time": "2013-12-05 08:16:55"
+        },
+        {
+            "name": "phpdocumentor/template-abstract",
+            "version": "1.2.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/phpDocumentor/template.abstract.git",
+                "reference": "43fa2db351d7a150803397721e778f9dd8a20b47"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/phpDocumentor/template.abstract/zipball/43fa2db351d7a150803397721e778f9dd8a20b47",
+                "reference": "43fa2db351d7a150803397721e778f9dd8a20b47",
+                "shasum": ""
+            },
+            "require": {
+                "ext-xsl": "*",
+                "phpdocumentor/unified-asset-installer": "~1.1"
+            },
+            "type": "phpdocumentor-template",
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "description": "Simple bright template for phpDocumentor",
+            "homepage": "http://www.phpdoc.org",
+            "keywords": [
+                "documentation",
+                "phpdoc",
+                "template"
+            ],
+            "time": "2013-08-02 06:11:13"
+        },
+        {
+            "name": "phpdocumentor/template-checkstyle",
+            "version": "1.2.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/phpDocumentor/template.checkstyle.git",
+                "reference": "22a45684e737c8c3ec3f1a12edb7743b7a82ac8b"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/phpDocumentor/template.checkstyle/zipball/22a45684e737c8c3ec3f1a12edb7743b7a82ac8b",
+                "reference": "22a45684e737c8c3ec3f1a12edb7743b7a82ac8b",
+                "shasum": ""
+            },
+            "require": {
+                "ext-xsl": "*",
+                "phpdocumentor/unified-asset-installer": "~1.1"
+            },
+            "type": "phpdocumentor-template",
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "description": "Checkstyle XML output template for phpDocumentor2",
+            "homepage": "http://www.phpdoc.org",
+            "keywords": [
+                "documentation",
+                "phpdoc",
+                "template"
+            ],
+            "time": "2013-08-01 19:43:19"
+        },
+        {
+            "name": "phpdocumentor/template-clean",
+            "version": "1.0.2",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/phpDocumentor/template.clean.git",
+                "reference": "9b7db5988447f901bfd04b1e2ff1adba951d4374"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/phpDocumentor/template.clean/zipball/9b7db5988447f901bfd04b1e2ff1adba951d4374",
+                "reference": "9b7db5988447f901bfd04b1e2ff1adba951d4374",
+                "shasum": ""
+            },
+            "require": {
+                "phpdocumentor/unified-asset-installer": "~1.1"
+            },
+            "type": "phpdocumentor-template",
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "description": "A clean, responsive modern template for phpDocumentor for Twig aimed at usability",
+            "homepage": "http://www.phpdoc.org",
+            "keywords": [
+                "documentation",
+                "phpdoc",
+                "responsive",
+                "template"
+            ],
+            "time": "2013-11-06 21:30:35"
+        },
+        {
+            "name": "phpdocumentor/template-new-black",
+            "version": "1.3.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/phpDocumentor/template.new_black.git",
+                "reference": "be38beba2b2674be292f32f88efe8a60c658a139"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/phpDocumentor/template.new_black/zipball/be38beba2b2674be292f32f88efe8a60c658a139",
+                "reference": "be38beba2b2674be292f32f88efe8a60c658a139",
+                "shasum": ""
+            },
+            "require": {
+                "ext-xsl": "*",
+                "phpdocumentor/template-abstract": "1.*",
+                "phpdocumentor/unified-asset-installer": "~1.1"
+            },
+            "type": "phpdocumentor-template",
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "description": "Web 2.0 template with dark sidebar for phpDocumentor",
+            "homepage": "http://www.phpdoc.org",
+            "keywords": [
+                "documentation",
+                "phpdoc",
+                "template"
+            ],
+            "time": "2013-08-02 06:16:30"
+        },
+        {
+            "name": "phpdocumentor/template-old-ocean",
+            "version": "1.3.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/phpDocumentor/template.old_ocean.git",
+                "reference": "3a0e2bcced4045a694d53b4607aad04e99d78489"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/phpDocumentor/template.old_ocean/zipball/3a0e2bcced4045a694d53b4607aad04e99d78489",
+                "reference": "3a0e2bcced4045a694d53b4607aad04e99d78489",
+                "shasum": ""
+            },
+            "require": {
+                "ext-xsl": "*",
+                "phpdocumentor/unified-asset-installer": "~1.1"
+            },
+            "type": "phpdocumentor-template",
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "description": "Blue template with high contrast for the foreground",
+            "homepage": "http://www.phpdoc.org",
+            "keywords": [
+                "documentation",
+                "phpdoc",
+                "template"
+            ],
+            "time": "2013-08-02 06:21:07"
+        },
+        {
+            "name": "phpdocumentor/template-responsive",
+            "version": "1.3.2",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/phpDocumentor/template.responsive.git",
+                "reference": "5cc453d7946ca76eb3f1b0a9ceff775d4a40f093"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/phpDocumentor/template.responsive/zipball/5cc453d7946ca76eb3f1b0a9ceff775d4a40f093",
+                "reference": "5cc453d7946ca76eb3f1b0a9ceff775d4a40f093",
+                "shasum": ""
+            },
+            "require": {
+                "ext-xsl": "*",
+                "phpdocumentor/unified-asset-installer": "~1.1"
+            },
+            "type": "phpdocumentor-template",
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "description": "Responsive modern template for phpDocumentor",
+            "homepage": "http://www.phpdoc.org",
+            "keywords": [
+                "documentation",
+                "phpdoc",
+                "template"
+            ],
+            "time": "2013-12-05 08:50:30"
+        },
+        {
+            "name": "phpdocumentor/template-responsive-twig",
+            "version": "1.2.2",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/phpDocumentor/template.responsive-twig.git",
+                "reference": "1f2a3ef331594fe463f698bca6c474634a127cd6"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/phpDocumentor/template.responsive-twig/zipball/1f2a3ef331594fe463f698bca6c474634a127cd6",
+                "reference": "1f2a3ef331594fe463f698bca6c474634a127cd6",
+                "shasum": ""
+            },
+            "require": {
+                "phpdocumentor/unified-asset-installer": "~1.1"
+            },
+            "type": "phpdocumentor-template",
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "description": "Responsive modern template for phpDocumentor for Twig",
+            "homepage": "http://www.phpdoc.org",
+            "keywords": [
+                "documentation",
+                "phpdoc",
+                "template"
+            ],
+            "time": "2013-11-02 08:25:22"
+        },
+        {
+            "name": "phpdocumentor/template-xml",
+            "version": "1.2.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/mvriel/template.xml.git",
+                "reference": "a372713be8ee99b16497e2580592e474ff51190c"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/mvriel/template.xml/zipball/a372713be8ee99b16497e2580592e474ff51190c",
+                "reference": "a372713be8ee99b16497e2580592e474ff51190c",
+                "shasum": ""
+            },
+            "require": {
+                "phpdocumentor/unified-asset-installer": "~1.1"
+            },
+            "type": "phpdocumentor-template",
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "description": "Generates an XML representation of the project's structure",
+            "homepage": "http://www.phpdoc.org",
+            "keywords": [
+                "documentation",
+                "phpdoc",
+                "template"
+            ],
+            "time": "2013-08-01 20:23:32"
+        },
+        {
+            "name": "phpdocumentor/template-zend",
+            "version": "1.3.2",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/phpDocumentor/template.zend.git",
+                "reference": "75913288bfd73d3bf4c1b1179c3963f3431e7a9d"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/phpDocumentor/template.zend/zipball/75913288bfd73d3bf4c1b1179c3963f3431e7a9d",
+                "reference": "75913288bfd73d3bf4c1b1179c3963f3431e7a9d",
+                "shasum": ""
+            },
+            "require": {
+                "ext-xsl": "*",
+                "phpdocumentor/template-abstract": "1.*",
+                "phpdocumentor/unified-asset-installer": "~1.1"
+            },
+            "type": "phpdocumentor-template",
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "description": "Official Zend Framework Template for phpDocumentor2",
+            "homepage": "http://www.phpdoc.org",
+            "keywords": [
+                "ZendFramework",
+                "documentation",
+                "phpdoc",
+                "template",
+                "zend",
+                "zf"
+            ],
+            "time": "2013-12-05 08:51:57"
+        },
+        {
+            "name": "phpdocumentor/unified-asset-installer",
+            "version": "1.1.2",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/phpDocumentor/UnifiedAssetInstaller.git",
+                "reference": "241fb036268cd9da7d76da3db66e3eda66259c52"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/phpDocumentor/UnifiedAssetInstaller/zipball/241fb036268cd9da7d76da3db66e3eda66259c52",
+                "reference": "241fb036268cd9da7d76da3db66e3eda66259c52",
+                "shasum": ""
+            },
+            "require": {
+                "composer-plugin-api": "1.0.0"
+            },
+            "require-dev": {
+                "composer/composer": "~1.0@dev",
+                "phpunit/phpunit": "~3.7"
+            },
+            "type": "composer-installer",
+            "extra": {
+                "class": "\\phpDocumentor\\Composer\\UnifiedAssetInstaller"
+            },
+            "autoload": {
+                "psr-0": {
+                    "phpDocumentor\\Composer": [
+                        "src/",
+                        "test/unit/"
+                    ]
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "description": "Asset installer for phpDocumentor",
+            "homepage": "http://www.phpdoc.org",
+            "keywords": [
+                "assets",
+                "installer",
+                "plugins",
+                "templates"
+            ],
+            "time": "2013-09-09 06:13:02"
+        },
+        {
+            "name": "phpoption/phpoption",
+            "version": "1.4.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/schmittjoh/php-option.git",
+                "reference": "5d099bcf0393908bf4ad69cc47dafb785d51f7f5"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/5d099bcf0393908bf4ad69cc47dafb785d51f7f5",
+                "reference": "5d099bcf0393908bf4ad69cc47dafb785d51f7f5",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.3-dev"
+                }
+            },
+            "autoload": {
+                "psr-0": {
+                    "PhpOption\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "Apache2"
+            ],
+            "authors": [
+                {
+                    "name": "Johannes M. Schmitt",
+                    "email": "schmittjoh@gmail.com",
+                    "homepage": "http://jmsyst.com",
+                    "role": "Developer of wrapped JMSSerializerBundle"
+                }
+            ],
+            "description": "Option Type for PHP",
+            "keywords": [
+                "language",
+                "option",
+                "php",
+                "type"
+            ],
+            "time": "2014-01-09 22:37:17"
+        },
+        {
+            "name": "phpunit/php-code-coverage",
+            "version": "1.2.16",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/php-code-coverage.git",
+                "reference": "69e55e68481cf708a6db43aff0b504e31402fe27"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/69e55e68481cf708a6db43aff0b504e31402fe27",
+                "reference": "69e55e68481cf708a6db43aff0b504e31402fe27",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3",
+                "phpunit/php-file-iterator": ">=1.3.0@stable",
+                "phpunit/php-text-template": ">=1.2.0@stable",
+                "phpunit/php-token-stream": ">=1.1.3@stable"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "3.7.*@dev"
+            },
+            "suggest": {
+                "ext-dom": "*",
+                "ext-xdebug": ">=2.0.5"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.2.x-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "PHP/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "include-path": [
+                ""
+            ],
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sb@sebastian-bergmann.de",
+                    "role": "lead"
+                }
+            ],
+            "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.",
+            "homepage": "https://github.com/sebastianbergmann/php-code-coverage",
+            "keywords": [
+                "coverage",
+                "testing",
+                "xunit"
+            ],
+            "time": "2014-02-25 03:34:05"
+        },
+        {
+            "name": "phpunit/php-file-iterator",
+            "version": "1.3.4",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/php-file-iterator.git",
+                "reference": "acd690379117b042d1c8af1fafd61bde001bf6bb"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/acd690379117b042d1c8af1fafd61bde001bf6bb",
+                "reference": "acd690379117b042d1c8af1fafd61bde001bf6bb",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3"
+            },
+            "type": "library",
+            "autoload": {
+                "classmap": [
+                    "File/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "include-path": [
+                ""
+            ],
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sb@sebastian-bergmann.de",
+                    "role": "lead"
+                }
+            ],
+            "description": "FilterIterator implementation that filters files based on a list of suffixes.",
+            "homepage": "https://github.com/sebastianbergmann/php-file-iterator/",
+            "keywords": [
+                "filesystem",
+                "iterator"
+            ],
+            "time": "2013-10-10 15:34:57"
+        },
+        {
+            "name": "phpunit/php-text-template",
+            "version": "1.2.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/php-text-template.git",
+                "reference": "206dfefc0ffe9cebf65c413e3d0e809c82fbf00a"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/206dfefc0ffe9cebf65c413e3d0e809c82fbf00a",
+                "reference": "206dfefc0ffe9cebf65c413e3d0e809c82fbf00a",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3"
+            },
+            "type": "library",
+            "autoload": {
+                "classmap": [
+                    "Text/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "include-path": [
+                ""
+            ],
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sb@sebastian-bergmann.de",
+                    "role": "lead"
+                }
+            ],
+            "description": "Simple template engine.",
+            "homepage": "https://github.com/sebastianbergmann/php-text-template/",
+            "keywords": [
+                "template"
+            ],
+            "time": "2014-01-30 17:20:04"
+        },
+        {
+            "name": "phpunit/php-timer",
+            "version": "1.0.5",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/php-timer.git",
+                "reference": "19689d4354b295ee3d8c54b4f42c3efb69cbc17c"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/19689d4354b295ee3d8c54b4f42c3efb69cbc17c",
+                "reference": "19689d4354b295ee3d8c54b4f42c3efb69cbc17c",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3"
+            },
+            "type": "library",
+            "autoload": {
+                "classmap": [
+                    "PHP/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "include-path": [
+                ""
+            ],
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sb@sebastian-bergmann.de",
+                    "role": "lead"
+                }
+            ],
+            "description": "Utility class for timing",
+            "homepage": "https://github.com/sebastianbergmann/php-timer/",
+            "keywords": [
+                "timer"
+            ],
+            "time": "2013-08-02 07:42:54"
+        },
+        {
+            "name": "phpunit/php-token-stream",
+            "version": "1.2.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/php-token-stream.git",
+                "reference": "5220af2a7929aa35cf663d97c89ad3d50cf5fa3e"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/5220af2a7929aa35cf663d97c89ad3d50cf5fa3e",
+                "reference": "5220af2a7929aa35cf663d97c89ad3d50cf5fa3e",
+                "shasum": ""
+            },
+            "require": {
+                "ext-tokenizer": "*",
+                "php": ">=5.3.3"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.2-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "PHP/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "include-path": [
+                ""
+            ],
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sb@sebastian-bergmann.de",
+                    "role": "lead"
+                }
+            ],
+            "description": "Wrapper around PHP's tokenizer extension.",
+            "homepage": "https://github.com/sebastianbergmann/php-token-stream/",
+            "keywords": [
+                "tokenizer"
+            ],
+            "time": "2013-09-13 04:58:23"
+        },
+        {
+            "name": "phpunit/phpunit",
+            "version": "3.7.32",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/phpunit.git",
+                "reference": "2752cbb9ea5bd84c2811b34b6953f76965ec7a2f"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/2752cbb9ea5bd84c2811b34b6953f76965ec7a2f",
+                "reference": "2752cbb9ea5bd84c2811b34b6953f76965ec7a2f",
+                "shasum": ""
+            },
+            "require": {
+                "ext-dom": "*",
+                "ext-pcre": "*",
+                "ext-reflection": "*",
+                "ext-spl": "*",
+                "php": ">=5.3.3",
+                "phpunit/php-code-coverage": "~1.2.1",
+                "phpunit/php-file-iterator": ">=1.3.1",
+                "phpunit/php-text-template": ">=1.1.1",
+                "phpunit/php-timer": ">=1.0.4",
+                "phpunit/phpunit-mock-objects": "~1.2.0",
+                "symfony/yaml": "~2.0"
+            },
+            "require-dev": {
+                "pear-pear.php.net/pear": "1.9.4"
+            },
+            "suggest": {
+                "ext-json": "*",
+                "ext-simplexml": "*",
+                "ext-tokenizer": "*",
+                "phpunit/php-invoker": ">=1.1.0,<1.2.0"
+            },
+            "bin": [
+                "composer/bin/phpunit"
+            ],
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "3.7.x-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "PHPUnit/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "include-path": [
+                "",
+                "../../symfony/yaml/"
+            ],
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de",
+                    "role": "lead"
+                }
+            ],
+            "description": "The PHP Unit Testing framework.",
+            "homepage": "http://www.phpunit.de/",
+            "keywords": [
+                "phpunit",
+                "testing",
+                "xunit"
+            ],
+            "time": "2014-02-25 03:47:29"
+        },
+        {
+            "name": "phpunit/phpunit-mock-objects",
+            "version": "1.2.3",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git",
+                "reference": "5794e3c5c5ba0fb037b11d8151add2a07fa82875"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/5794e3c5c5ba0fb037b11d8151add2a07fa82875",
+                "reference": "5794e3c5c5ba0fb037b11d8151add2a07fa82875",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3",
+                "phpunit/php-text-template": ">=1.1.1@stable"
+            },
+            "suggest": {
+                "ext-soap": "*"
+            },
+            "type": "library",
+            "autoload": {
+                "classmap": [
+                    "PHPUnit/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "include-path": [
+                ""
+            ],
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sb@sebastian-bergmann.de",
+                    "role": "lead"
+                }
+            ],
+            "description": "Mock Object library for PHPUnit",
+            "homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/",
+            "keywords": [
+                "mock",
+                "xunit"
+            ],
+            "time": "2013-01-13 10:24:48"
+        },
+        {
+            "name": "pimple/pimple",
+            "version": "v1.0.2",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/fabpot/Pimple.git",
+                "reference": "ae11e57e8c2bb414b2ff93396dbbfc0eb92feb94"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/fabpot/Pimple/zipball/ae11e57e8c2bb414b2ff93396dbbfc0eb92feb94",
+                "reference": "ae11e57e8c2bb414b2ff93396dbbfc0eb92feb94",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.0.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-0": {
+                    "Pimple": "lib/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com",
+                    "homepage": "http://fabien.potencier.org",
+                    "role": "Lead Developer"
+                }
+            ],
+            "description": "Pimple is a simple Dependency Injection Container for PHP 5.3",
+            "homepage": "http://pimple.sensiolabs.org",
+            "keywords": [
+                "container",
+                "dependency injection"
+            ],
+            "time": "2013-03-08 08:21:40"
+        },
+        {
+            "name": "psr/log",
+            "version": "1.0.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/php-fig/log.git",
+                "reference": "fe0936ee26643249e916849d48e3a51d5f5e278b"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/php-fig/log/zipball/fe0936ee26643249e916849d48e3a51d5f5e278b",
+                "reference": "fe0936ee26643249e916849d48e3a51d5f5e278b",
+                "shasum": ""
+            },
+            "type": "library",
+            "autoload": {
+                "psr-0": {
+                    "Psr\\Log\\": ""
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "PHP-FIG",
+                    "homepage": "http://www.php-fig.org/"
+                }
+            ],
+            "description": "Common interface for logging libraries",
+            "keywords": [
+                "log",
+                "psr",
+                "psr-3"
+            ],
+            "time": "2012-12-21 11:40:51"
+        },
+        {
+            "name": "symfony/config",
+            "version": "v2.4.2",
+            "target-dir": "Symfony/Component/Config",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/Config.git",
+                "reference": "d81bd01eac1514c10dcb3b11eaa9048d6b87dd1f"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/Config/zipball/d81bd01eac1514c10dcb3b11eaa9048d6b87dd1f",
+                "reference": "d81bd01eac1514c10dcb3b11eaa9048d6b87dd1f",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3",
+                "symfony/filesystem": "~2.3"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.4-dev"
+                }
+            },
+            "autoload": {
+                "psr-0": {
+                    "Symfony\\Component\\Config\\": ""
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com",
+                    "homepage": "http://fabien.potencier.org",
+                    "role": "Lead Developer"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "http://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony Config Component",
+            "homepage": "http://symfony.com",
+            "time": "2014-01-07 13:28:54"
+        },
+        {
+            "name": "symfony/console",
+            "version": "v2.4.2",
+            "target-dir": "Symfony/Component/Console",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/Console.git",
+                "reference": "940f217cbc3c8a33e5403e7c595495c4884400fe"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/Console/zipball/940f217cbc3c8a33e5403e7c595495c4884400fe",
+                "reference": "940f217cbc3c8a33e5403e7c595495c4884400fe",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3"
+            },
+            "require-dev": {
+                "symfony/event-dispatcher": "~2.1"
+            },
+            "suggest": {
+                "symfony/event-dispatcher": ""
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.4-dev"
+                }
+            },
+            "autoload": {
+                "psr-0": {
+                    "Symfony\\Component\\Console\\": ""
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com",
+                    "homepage": "http://fabien.potencier.org",
+                    "role": "Lead Developer"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "http://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony Console Component",
+            "homepage": "http://symfony.com",
+            "time": "2014-02-11 13:52:09"
+        },
+        {
+            "name": "symfony/event-dispatcher",
+            "version": "v2.4.2",
+            "target-dir": "Symfony/Component/EventDispatcher",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/EventDispatcher.git",
+                "reference": "4708b8cd41984a5ba29fe7dd40716f7f761ac501"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/EventDispatcher/zipball/4708b8cd41984a5ba29fe7dd40716f7f761ac501",
+                "reference": "4708b8cd41984a5ba29fe7dd40716f7f761ac501",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3"
+            },
+            "require-dev": {
+                "symfony/dependency-injection": "~2.0"
+            },
+            "suggest": {
+                "symfony/dependency-injection": "",
+                "symfony/http-kernel": ""
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.4-dev"
+                }
+            },
+            "autoload": {
+                "psr-0": {
+                    "Symfony\\Component\\EventDispatcher\\": ""
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com",
+                    "homepage": "http://fabien.potencier.org",
+                    "role": "Lead Developer"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "http://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony EventDispatcher Component",
+            "homepage": "http://symfony.com",
+            "time": "2014-02-11 13:52:09"
+        },
+        {
+            "name": "symfony/filesystem",
+            "version": "v2.4.2",
+            "target-dir": "Symfony/Component/Filesystem",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/Filesystem.git",
+                "reference": "7e65abb06d3b38f4be89266fe3fb4a759544e713"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/Filesystem/zipball/7e65abb06d3b38f4be89266fe3fb4a759544e713",
+                "reference": "7e65abb06d3b38f4be89266fe3fb4a759544e713",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.4-dev"
+                }
+            },
+            "autoload": {
+                "psr-0": {
+                    "Symfony\\Component\\Filesystem\\": ""
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com",
+                    "homepage": "http://fabien.potencier.org",
+                    "role": "Lead Developer"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "http://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony Filesystem Component",
+            "homepage": "http://symfony.com",
+            "time": "2014-01-07 13:28:54"
+        },
+        {
+            "name": "symfony/finder",
+            "version": "v2.4.2",
+            "target-dir": "Symfony/Component/Finder",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/Finder.git",
+                "reference": "b6735d1fc16da13c4c7dddfe78366a4a098cf011"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/Finder/zipball/b6735d1fc16da13c4c7dddfe78366a4a098cf011",
+                "reference": "b6735d1fc16da13c4c7dddfe78366a4a098cf011",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.4-dev"
+                }
+            },
+            "autoload": {
+                "psr-0": {
+                    "Symfony\\Component\\Finder\\": ""
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com",
+                    "homepage": "http://fabien.potencier.org",
+                    "role": "Lead Developer"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "http://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony Finder Component",
+            "homepage": "http://symfony.com",
+            "time": "2014-01-07 13:28:54"
+        },
+        {
+            "name": "symfony/process",
+            "version": "v2.4.2",
+            "target-dir": "Symfony/Component/Process",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/Process.git",
+                "reference": "c175448bac997556f8ab972908a4e14c7291fb03"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/Process/zipball/c175448bac997556f8ab972908a4e14c7291fb03",
+                "reference": "c175448bac997556f8ab972908a4e14c7291fb03",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.4-dev"
+                }
+            },
+            "autoload": {
+                "psr-0": {
+                    "Symfony\\Component\\Process\\": ""
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com",
+                    "homepage": "http://fabien.potencier.org",
+                    "role": "Lead Developer"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "http://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony Process Component",
+            "homepage": "http://symfony.com",
+            "time": "2014-02-11 13:52:09"
+        },
+        {
+            "name": "symfony/property-access",
+            "version": "v2.4.2",
+            "target-dir": "Symfony/Component/PropertyAccess",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/PropertyAccess.git",
+                "reference": "37fe0c2dc494b47db4b0850e9dcba3a27cc45c0c"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/PropertyAccess/zipball/37fe0c2dc494b47db4b0850e9dcba3a27cc45c0c",
+                "reference": "37fe0c2dc494b47db4b0850e9dcba3a27cc45c0c",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.4-dev"
+                }
+            },
+            "autoload": {
+                "psr-0": {
+                    "Symfony\\Component\\PropertyAccess\\": ""
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com",
+                    "homepage": "http://fabien.potencier.org",
+                    "role": "Lead Developer"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "http://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony PropertyAccess Component",
+            "homepage": "http://symfony.com",
+            "keywords": [
+                "access",
+                "array",
+                "extraction",
+                "index",
+                "injection",
+                "object",
+                "property",
+                "property path",
+                "reflection"
+            ],
+            "time": "2014-02-11 15:39:28"
+        },
+        {
+            "name": "symfony/stopwatch",
+            "version": "v2.4.2",
+            "target-dir": "Symfony/Component/Stopwatch",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/Stopwatch.git",
+                "reference": "bffad325e36a3e71fba6d5dcce6e2f4b4637b91a"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/Stopwatch/zipball/bffad325e36a3e71fba6d5dcce6e2f4b4637b91a",
+                "reference": "bffad325e36a3e71fba6d5dcce6e2f4b4637b91a",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.4-dev"
+                }
+            },
+            "autoload": {
+                "psr-0": {
+                    "Symfony\\Component\\Stopwatch\\": ""
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com",
+                    "homepage": "http://fabien.potencier.org",
+                    "role": "Lead Developer"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "http://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony Stopwatch Component",
+            "homepage": "http://symfony.com",
+            "time": "2014-02-11 13:52:09"
+        },
+        {
+            "name": "symfony/translation",
+            "version": "v2.4.2",
+            "target-dir": "Symfony/Component/Translation",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/Translation.git",
+                "reference": "b00fd07417e493e08488e87bcebeb9681fc7323b"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/Translation/zipball/b00fd07417e493e08488e87bcebeb9681fc7323b",
+                "reference": "b00fd07417e493e08488e87bcebeb9681fc7323b",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3"
+            },
+            "require-dev": {
+                "symfony/config": "~2.0",
+                "symfony/yaml": "~2.2"
+            },
+            "suggest": {
+                "symfony/config": "",
+                "symfony/yaml": ""
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.4-dev"
+                }
+            },
+            "autoload": {
+                "psr-0": {
+                    "Symfony\\Component\\Translation\\": ""
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com",
+                    "homepage": "http://fabien.potencier.org",
+                    "role": "Lead Developer"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "http://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony Translation Component",
+            "homepage": "http://symfony.com",
+            "time": "2014-02-03 17:15:33"
+        },
+        {
+            "name": "symfony/validator",
+            "version": "v2.4.2",
+            "target-dir": "Symfony/Component/Validator",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/Validator.git",
+                "reference": "64d7a54f97a5f53a98864a7461822e341f9416b5"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/Validator/zipball/64d7a54f97a5f53a98864a7461822e341f9416b5",
+                "reference": "64d7a54f97a5f53a98864a7461822e341f9416b5",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3",
+                "symfony/property-access": "~2.2",
+                "symfony/translation": "~2.0"
+            },
+            "require-dev": {
+                "doctrine/annotations": "~1.0",
+                "doctrine/cache": "~1.0",
+                "symfony/config": "~2.2",
+                "symfony/http-foundation": "~2.1",
+                "symfony/intl": "~2.3",
+                "symfony/yaml": "~2.0"
+            },
+            "suggest": {
+                "doctrine/annotations": "For using the annotation mapping. You will also need doctrine/cache.",
+                "doctrine/cache": "For using the default cached annotation reader",
+                "symfony/config": "",
+                "symfony/http-foundation": "",
+                "symfony/intl": "",
+                "symfony/yaml": ""
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.4-dev"
+                }
+            },
+            "autoload": {
+                "psr-0": {
+                    "Symfony\\Component\\Validator\\": ""
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com",
+                    "homepage": "http://fabien.potencier.org",
+                    "role": "Lead Developer"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "http://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony Validator Component",
+            "homepage": "http://symfony.com",
+            "time": "2014-02-11 13:52:09"
+        },
+        {
+            "name": "symfony/yaml",
+            "version": "v2.4.2",
+            "target-dir": "Symfony/Component/Yaml",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/Yaml.git",
+                "reference": "bb6ddaf8956139d1b8c360b4b713ed0138e876b3"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/Yaml/zipball/bb6ddaf8956139d1b8c360b4b713ed0138e876b3",
+                "reference": "bb6ddaf8956139d1b8c360b4b713ed0138e876b3",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.4-dev"
+                }
+            },
+            "autoload": {
+                "psr-0": {
+                    "Symfony\\Component\\Yaml\\": ""
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com",
+                    "homepage": "http://fabien.potencier.org",
+                    "role": "Lead Developer"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "http://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony Yaml Component",
+            "homepage": "http://symfony.com",
+            "time": "2014-01-07 13:28:54"
+        },
+        {
+            "name": "twig/twig",
+            "version": "v1.15.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/fabpot/Twig.git",
+                "reference": "1fb5784662f438d7d96a541e305e28b812e2eeed"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/fabpot/Twig/zipball/1fb5784662f438d7d96a541e305e28b812e2eeed",
+                "reference": "1fb5784662f438d7d96a541e305e28b812e2eeed",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.2.4"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.15-dev"
+                }
+            },
+            "autoload": {
+                "psr-0": {
+                    "Twig_": "lib/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com",
+                    "homepage": "http://fabien.potencier.org",
+                    "role": "Lead Developer"
+                },
+                {
+                    "name": "Armin Ronacher",
+                    "email": "armin.ronacher@active-4.com",
+                    "role": "Project Founder"
+                },
+                {
+                    "name": "Twig Team",
+                    "homepage": "https://github.com/fabpot/Twig/graphs/contributors",
+                    "role": "Contributors"
+                }
+            ],
+            "description": "Twig, the flexible, fast, and secure template language for PHP",
+            "homepage": "http://twig.sensiolabs.org",
+            "keywords": [
+                "templating"
+            ],
+            "time": "2014-02-13 10:19:29"
+        },
+        {
+            "name": "zendframework/zend-cache",
+            "version": "2.2.5",
+            "target-dir": "Zend/Cache",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/zendframework/Component_ZendCache.git",
+                "reference": "49e5c3a59c4acb3e3e0a5b251f31b274889b1f97"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/zendframework/Component_ZendCache/zipball/49e5c3a59c4acb3e3e0a5b251f31b274889b1f97",
+                "reference": "49e5c3a59c4acb3e3e0a5b251f31b274889b1f97",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3",
+                "zendframework/zend-eventmanager": "self.version",
+                "zendframework/zend-servicemanager": "self.version",
+                "zendframework/zend-stdlib": "self.version"
+            },
+            "require-dev": {
+                "zendframework/zend-serializer": "self.version"
+            },
+            "suggest": {
+                "ext-apc": "APC >= 3.1.6 to use the APC storage adapter",
+                "ext-dba": "DBA, to use the DBA storage adapter",
+                "ext-memcached": "Memcached >= 1.0.0 to use the Memcached storage adapter",
+                "ext-wincache": "WinCache, to use the WinCache storage adapter",
+                "zendframework/zend-serializer": "Zend\\Serializer component",
+                "zendframework/zend-session": "Zend\\Session component"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.2-dev",
+                    "dev-develop": "2.3-dev"
+                }
+            },
+            "autoload": {
+                "psr-0": {
+                    "Zend\\Cache\\": ""
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "description": "provides a generic way to cache any data",
+            "keywords": [
+                "cache",
+                "zf2"
+            ],
+            "time": "2013-10-26 10:00:05"
+        },
+        {
+            "name": "zendframework/zend-config",
+            "version": "2.2.5",
+            "target-dir": "Zend/Config",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/zendframework/Component_ZendConfig.git",
+                "reference": "e3457e088f641bfd5b02d9985c1ef504a571bc62"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/zendframework/Component_ZendConfig/zipball/e3457e088f641bfd5b02d9985c1ef504a571bc62",
+                "reference": "e3457e088f641bfd5b02d9985c1ef504a571bc62",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3",
+                "zendframework/zend-stdlib": "self.version"
+            },
+            "suggest": {
+                "zendframework/zend-json": "Zend\\Json to use the Json reader or writer classes",
+                "zendframework/zend-servicemanager": "Zend\\ServiceManager for use with the Config Factory to retrieve reader and writer instances"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.2-dev",
+                    "dev-develop": "2.3-dev"
+                }
+            },
+            "autoload": {
+                "psr-0": {
+                    "Zend\\Config\\": ""
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "description": "provides a nested object property based user interface for accessing this configuration data within application code",
+            "keywords": [
+                "config",
+                "zf2"
+            ],
+            "time": "2013-10-02 08:00:13"
+        },
+        {
+            "name": "zendframework/zend-eventmanager",
+            "version": "2.2.5",
+            "target-dir": "Zend/EventManager",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/zendframework/Component_ZendEventManager.git",
+                "reference": "f325feef4e1a19b873936e5b116980fbe88dd176"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/zendframework/Component_ZendEventManager/zipball/f325feef4e1a19b873936e5b116980fbe88dd176",
+                "reference": "f325feef4e1a19b873936e5b116980fbe88dd176",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3",
+                "zendframework/zend-stdlib": "self.version"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.2-dev",
+                    "dev-develop": "2.3-dev"
+                }
+            },
+            "autoload": {
+                "psr-0": {
+                    "Zend\\EventManager\\": ""
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "keywords": [
+                "eventmanager",
+                "zf2"
+            ],
+            "time": "2013-06-12 19:45:10"
+        },
+        {
+            "name": "zendframework/zend-filter",
+            "version": "2.2.5",
+            "target-dir": "Zend/Filter",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/zendframework/Component_ZendFilter.git",
+                "reference": "0dbe1c10822a340a253a99147bb004978915f641"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/zendframework/Component_ZendFilter/zipball/0dbe1c10822a340a253a99147bb004978915f641",
+                "reference": "0dbe1c10822a340a253a99147bb004978915f641",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3",
+                "zendframework/zend-stdlib": "self.version"
+            },
+            "require-dev": {
+                "zendframework/zend-crypt": "self.version"
+            },
+            "suggest": {
+                "zendframework/zend-crypt": "Zend\\Crypt component",
+                "zendframework/zend-i18n": "Zend\\I18n component",
+                "zendframework/zend-stdlib": "Zend\\Stdlib component",
+                "zendframework/zend-uri": "Zend\\Uri component for UriNormalize filter",
+                "zendframework/zend-validator": "Zend\\Validator component"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.2-dev",
+                    "dev-develop": "2.3-dev"
+                }
+            },
+            "autoload": {
+                "psr-0": {
+                    "Zend\\Filter\\": ""
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "description": "provides a set of commonly needed data filters",
+            "keywords": [
+                "filter",
+                "zf2"
+            ],
+            "time": "2013-10-20 06:00:14"
+        },
+        {
+            "name": "zendframework/zend-i18n",
+            "version": "2.2.5",
+            "target-dir": "Zend/I18n",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/zendframework/Component_ZendI18n.git",
+                "reference": "d69eda2fc0e137412eeca3340952eb94345a5c25"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/zendframework/Component_ZendI18n/zipball/d69eda2fc0e137412eeca3340952eb94345a5c25",
+                "reference": "d69eda2fc0e137412eeca3340952eb94345a5c25",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3",
+                "zendframework/zend-stdlib": "self.version"
+            },
+            "suggest": {
+                "ext-intl": "Required for most features of Zend\\I18n; included in default builds of PHP",
+                "zendframework/zend-eventmanager": "You should install this package to use the events in the translator",
+                "zendframework/zend-filter": "You should install this package to use the provided filters",
+                "zendframework/zend-resources": "Translation resources",
+                "zendframework/zend-validator": "You should install this package to use the provided validators",
+                "zendframework/zend-view": "You should install this package to use the provided view helpers"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.2-dev",
+                    "dev-develop": "2.3-dev"
+                }
+            },
+            "autoload": {
+                "psr-0": {
+                    "Zend\\I18n\\": ""
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "keywords": [
+                "i18n",
+                "zf2"
+            ],
+            "time": "2013-10-23 20:00:09"
+        },
+        {
+            "name": "zendframework/zend-json",
+            "version": "2.2.5",
+            "target-dir": "Zend/Json",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/zendframework/Component_ZendJson.git",
+                "reference": "f4394103c3db6052de75bbfcf6613888b0a63d9b"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/zendframework/Component_ZendJson/zipball/f4394103c3db6052de75bbfcf6613888b0a63d9b",
+                "reference": "f4394103c3db6052de75bbfcf6613888b0a63d9b",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3",
+                "zendframework/zend-stdlib": "self.version"
+            },
+            "suggest": {
+                "zendframework/zend-server": "Zend\\Server component"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.2-dev",
+                    "dev-develop": "2.3-dev"
+                }
+            },
+            "autoload": {
+                "psr-0": {
+                    "Zend\\Json\\": ""
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "description": "provides convenience methods for serializing native PHP to JSON and decoding JSON to native PHP",
+            "keywords": [
+                "json",
+                "zf2"
+            ],
+            "time": "2013-10-20 06:00:16"
+        },
+        {
+            "name": "zendframework/zend-math",
+            "version": "2.2.5",
+            "target-dir": "Zend/Math",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/zendframework/Component_ZendMath.git",
+                "reference": "7cba0957e916b705ba280f31919e6acfa3d983fd"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/zendframework/Component_ZendMath/zipball/7cba0957e916b705ba280f31919e6acfa3d983fd",
+                "reference": "7cba0957e916b705ba280f31919e6acfa3d983fd",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3"
+            },
+            "suggest": {
+                "ircmaxell/random-lib": "Fallback random byte generator for Zend\\Math\\Rand if OpenSSL/Mcrypt extensions are unavailable"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.2-dev",
+                    "dev-develop": "2.3-dev"
+                }
+            },
+            "autoload": {
+                "psr-0": {
+                    "Zend\\Math\\": ""
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "keywords": [
+                "math",
+                "zf2"
+            ],
+            "time": "2013-10-02 08:00:14"
+        },
+        {
+            "name": "zendframework/zend-serializer",
+            "version": "2.2.5",
+            "target-dir": "Zend/Serializer",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/zendframework/Component_ZendSerializer.git",
+                "reference": "ba5a28e04c6f933f01248357021486042a7d5fb7"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/zendframework/Component_ZendSerializer/zipball/ba5a28e04c6f933f01248357021486042a7d5fb7",
+                "reference": "ba5a28e04c6f933f01248357021486042a7d5fb7",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3",
+                "zendframework/zend-json": "self.version",
+                "zendframework/zend-math": "self.version",
+                "zendframework/zend-stdlib": "self.version"
+            },
+            "suggest": {
+                "zendframework/zend-servicemanager": "To support plugin manager support"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.2-dev",
+                    "dev-develop": "2.3-dev"
+                }
+            },
+            "autoload": {
+                "psr-0": {
+                    "Zend\\Serializer\\": ""
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "description": "provides an adapter based interface to simply generate storable representation of PHP types by different facilities, and recover",
+            "keywords": [
+                "serializer",
+                "zf2"
+            ],
+            "time": "2013-10-02 08:00:15"
+        },
+        {
+            "name": "zendframework/zend-servicemanager",
+            "version": "2.2.5",
+            "target-dir": "Zend/ServiceManager",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/zendframework/Component_ZendServiceManager.git",
+                "reference": "064bb1d0441529aded2f213a10002cc4523f328c"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/zendframework/Component_ZendServiceManager/zipball/064bb1d0441529aded2f213a10002cc4523f328c",
+                "reference": "064bb1d0441529aded2f213a10002cc4523f328c",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3"
+            },
+            "suggest": {
+                "zendframework/zend-di": "Zend\\Di component"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.2-dev",
+                    "dev-develop": "2.3-dev"
+                }
+            },
+            "autoload": {
+                "psr-0": {
+                    "Zend\\ServiceManager\\": ""
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "keywords": [
+                "servicemanager",
+                "zf2"
+            ],
+            "time": "2013-10-23 20:00:05"
+        },
+        {
+            "name": "zendframework/zend-stdlib",
+            "version": "2.2.5",
+            "target-dir": "Zend/Stdlib",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/zendframework/Component_ZendStdlib.git",
+                "reference": "f440ecfc828d61d620662a03987c8287e1e4801e"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/zendframework/Component_ZendStdlib/zipball/f440ecfc828d61d620662a03987c8287e1e4801e",
+                "reference": "f440ecfc828d61d620662a03987c8287e1e4801e",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3"
+            },
+            "suggest": {
+                "zendframework/zend-eventmanager": "To support aggregate hydrator usage",
+                "zendframework/zend-servicemanager": "To support hydrator plugin manager usage"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.2-dev",
+                    "dev-develop": "2.3-dev"
+                }
+            },
+            "autoload": {
+                "psr-0": {
+                    "Zend\\Stdlib\\": ""
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "keywords": [
+                "stdlib",
+                "zf2"
+            ],
+            "time": "2013-10-20 06:00:20"
+        }
+    ],
+    "aliases": [
+
+    ],
+    "minimum-stability": "stable",
+    "stability-flags": [
+
+    ],
+    "platform": {
+        "php": ">=5.3.0"
+    },
+    "platform-dev": [
+
+    ]
+}
diff --git a/vendor/justinrainbow/json-schema/docs/index.rst b/vendor/justinrainbow/json-schema/docs/index.rst
index 86f2662..32cddb6 100644
--- a/vendor/justinrainbow/json-schema/docs/index.rst
+++ b/vendor/justinrainbow/json-schema/docs/index.rst
@@ -17,7 +17,7 @@ Installation
 
 .. code-block:: console
 
-   git clone --recursive https://github.com/justinrainbow/json-schema.git
+   git clone https://github.com/justinrainbow/json-schema.git
 
 Composer method
 ^^^^^^^^^^^^^^^
@@ -28,7 +28,7 @@ Add the `justinrainbow/json-schema` package to your `composer.json` file.
    
    {
        "require": {
-           "justinrainbow/json-schema": ">=1.0.0-dev"
+           "justinrainbow/json-schema": "1.1.*"
        }
    }
 
diff --git a/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/Collection.php b/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/Collection.php
index a3d9953..079617c 100644
--- a/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/Collection.php
+++ b/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/Collection.php
@@ -1,5 +1,12 @@
 <?php
 
+/*
+ * This file is part of the JsonSchema package.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
 namespace JsonSchema\Constraints;
 
 /**
@@ -11,84 +18,94 @@ namespace JsonSchema\Constraints;
 class Collection extends Constraint
 {
     /**
-     * {inheritDoc}
+     * {@inheritDoc}
      */
     public function check($value, $schema = null, $path = null, $i = null)
     {
-        // verify minItems
+        // Verify minItems
         if (isset($schema->minItems) && count($value) < $schema->minItems) {
             $this->addError($path, "There must be a minimum of " . $schema->minItems . " in the array");
         }
-        // verify maxItems
+
+        // Verify maxItems
         if (isset($schema->maxItems) && count($value) > $schema->maxItems) {
             $this->addError($path, "There must be a maximum of " . $schema->maxItems . " in the array");
         }
-        // verify uniqueItems
-        //TODO array_unique doesnt work with objects
-        if (isset($schema->uniqueItems) && array_unique($value) != $value) {
-            $this->addError($path, "There are no duplicates allowed in the array");
+
+        // Verify uniqueItems
+        if (isset($schema->uniqueItems)) {
+            $unique = $value;
+            if (is_array($value) && count($value)) {
+                $unique = array_map(function($e) { return var_export($e, true); }, $value);
+            }
+            if (count(array_unique($unique)) != count($value)) {
+                $this->addError($path, "There are no duplicates allowed in the array");
+            }
         }
 
-        //verify items
+        // Verify items
         if (isset($schema->items)) {
             $this->validateItems($value, $schema, $path, $i);
         }
     }
 
     /**
-     * validates the items
+     * Validates the items
      *
-     * @param array $value
+     * @param array     $value
      * @param \stdClass $schema
-     * @param string $path
-     * @param string $i
+     * @param string    $path
+     * @param string    $i
      */
     protected function validateItems($value, $schema = null, $path = null, $i = null)
     {
-        if (!is_array($schema->items)) {
+        if (is_object($schema->items)) {
             // just one type definition for the whole array
             foreach ($value as $k => $v) {
                 $initErrors = $this->getErrors();
 
-                //first check if its defined in "items"
-                if (!isset($schema->additionalItems) || $schema->additionalItems === false) {
-                    $this->checkUndefined($v, $schema->items, $path, $k);
-                }
+                // First check if its defined in "items"
+                $this->checkUndefined($v, $schema->items, $path, $k);
 
-                //recheck with "additionalItems" if the first test fails
+                // Recheck with "additionalItems" if the first test fails
                 if (count($initErrors) < count($this->getErrors()) && (isset($schema->additionalItems) && $schema->additionalItems !== false)) {
                     $secondErrors = $this->getErrors();
                     $this->checkUndefined($v, $schema->additionalItems, $path, $k);
                 }
 
-                //reset errors if needed
-                if (isset($secondErrors) && count($secondErrors) < $this->getErrors()) {
+                // Reset errors if needed
+                if (isset($secondErrors) && count($secondErrors) < count($this->getErrors())) {
                     $this->errors = $secondErrors;
-                } elseif (isset($secondErrors) && count($secondErrors) == count($this->getErrors())) {
+                } else if (isset($secondErrors) && count($secondErrors) === count($this->getErrors())) {
                     $this->errors = $initErrors;
                 }
             }
         } else {
-            //defined item type definitions
+            // Defined item type definitions
             foreach ($value as $k => $v) {
                 if (array_key_exists($k, $schema->items)) {
                     $this->checkUndefined($v, $schema->items[$k], $path, $k);
                 } else {
-                    // additional items
-                    if (array_key_exists('additionalItems', $schema) && $schema->additionalItems !== false) {
-                        $this->checkUndefined($v, $schema->additionalItems, $path, $k);
+                    // Additional items
+                    if (property_exists($schema, 'additionalItems')) {
+                        if ($schema->additionalItems !== false) {
+                            $this->checkUndefined($v, $schema->additionalItems, $path, $k);
+                        } else {
+                            $this->addError(
+                                $path, 'The item ' . $i . '[' . $k . '] is not defined and the definition does not allow additional items');
+                        }
                     } else {
-                        $this->addError(
-                            $path,
-                            'The item ' . $i . '[' . $k . '] is not defined in the objTypeDef and the objTypeDef does not allow additional properties'
-                        );
+                        // Should be valid against an empty schema
+                        $this->checkUndefined($v, new \stdClass(), $path, $k);
                     }
                 }
             }
 
-            // treat when we have more schema definitions than values
-            for ($k = count($value); $k < count($schema->items); $k++) {
-                $this->checkUndefined(new Undefined(), $schema->items[$k], $path, $k);
+            // Treat when we have more schema definitions than values, not for empty arrays
+            if(count($value) > 0) {
+                for ($k = count($value); $k < count($schema->items); $k++) {
+                    $this->checkUndefined(new Undefined(), $schema->items[$k], $path, $k);
+                }
             }
         }
     }
diff --git a/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/Constraint.php b/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/Constraint.php
index a6f57ae..889e4ec 100644
--- a/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/Constraint.php
+++ b/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/Constraint.php
@@ -1,7 +1,16 @@
 <?php
 
+/*
+ * This file is part of the JsonSchema package.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
 namespace JsonSchema\Constraints;
 
+use JsonSchema\Uri\UriRetriever;
+
 /**
  * The Base Constraints, all Validators should extend this class
  *
@@ -11,6 +20,7 @@ namespace JsonSchema\Constraints;
 abstract class Constraint implements ConstraintInterface
 {
     protected $checkMode = self::CHECK_MODE_NORMAL;
+    protected $uriRetriever;
     protected $errors = array();
     protected $inlineSchemaProperty = '$schema';
 
@@ -18,15 +28,38 @@ abstract class Constraint implements ConstraintInterface
     const CHECK_MODE_TYPE_CAST = 2;
 
     /**
-     * @param int $checkMode
+     * @param int          $checkMode
+     * @param UriRetriever $uriRetriever
+     */
+    public function __construct($checkMode = self::CHECK_MODE_NORMAL, UriRetriever $uriRetriever = null)
+    {
+        $this->checkMode    = $checkMode;
+        $this->uriRetriever = $uriRetriever;
+    }
+
+    /**
+     * @return UriRetriever $uriRetriever
+     */
+    public function getUriRetriever()
+    {
+        if (is_null($this->uriRetriever))
+        {
+            $this->setUriRetriever(new UriRetriever);
+        }
+
+        return $this->uriRetriever;
+    }
+
+    /**
+     * @param UriRetriever $uriRetriever
      */
-    public function __construct($checkMode = self::CHECK_MODE_NORMAL)
+    public function setUriRetriever(UriRetriever $uriRetriever)
     {
-        $this->checkMode = $checkMode;
+        $this->uriRetriever = $uriRetriever;
     }
 
     /**
-     * {inheritDoc}
+     * {@inheritDoc}
      */
     public function addError($path, $message)
     {
@@ -37,7 +70,7 @@ abstract class Constraint implements ConstraintInterface
     }
 
     /**
-     * {inheritDoc}
+     * {@inheritDoc}
      */
     public function addErrors(array $errors)
     {
@@ -45,18 +78,36 @@ abstract class Constraint implements ConstraintInterface
     }
 
     /**
-     * {inheritDoc}
+     * {@inheritDoc}
      */
     public function getErrors()
     {
-        return array_unique($this->errors, SORT_REGULAR);
+        return $this->errors;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public function isValid()
+    {
+        return !$this->getErrors();
+    }
+
+    /**
+     * Clears any reported errors.  Should be used between
+     * multiple validation checks.
+     */
+    public function reset()
+    {
+        $this->errors = array();
     }
 
     /**
-     * bubble down the path
+     * Bubble down the path
+     *
+     * @param string $path Current path
+     * @param mixed  $i    What to append to the path
      *
-     * @param string $path
-     * @param mixed $i
      * @return string
      */
     protected function incrementPath($path, $i)
@@ -64,7 +115,7 @@ abstract class Constraint implements ConstraintInterface
         if ($path !== '') {
             if (is_int($i)) {
                 $path .= '[' . $i . ']';
-            } else if ($i == '') {
+            } elseif ($i == '') {
                 $path .= '';
             } else {
                 $path .= '.' . $i;
@@ -77,7 +128,7 @@ abstract class Constraint implements ConstraintInterface
     }
 
     /**
-     * validates an array
+     * Validates an array
      *
      * @param mixed $value
      * @param mixed $schema
@@ -86,30 +137,31 @@ abstract class Constraint implements ConstraintInterface
      */
     protected function checkArray($value, $schema = null, $path = null, $i = null)
     {
-        $validator = new Collection($this->checkMode);
+        $validator = new Collection($this->checkMode, $this->uriRetriever);
         $validator->check($value, $schema, $path, $i);
 
         $this->addErrors($validator->getErrors());
     }
 
     /**
-     * validates an object
+     * Validates an object
      *
      * @param mixed $value
      * @param mixed $schema
      * @param mixed $path
      * @param mixed $i
+     * @param mixed $patternProperties
      */
-    protected function checkObject($value, $schema = null, $path = null, $i = null)
+    protected function checkObject($value, $schema = null, $path = null, $i = null, $patternProperties = null)
     {
-        $validator = new Object($this->checkMode);
-        $validator->check($value, $schema, $path, $i);
+        $validator = new Object($this->checkMode, $this->uriRetriever);
+        $validator->check($value, $schema, $path, $i, $patternProperties);
 
         $this->addErrors($validator->getErrors());
     }
 
     /**
-     * validates the type of a property
+     * Validates the type of a property
      *
      * @param mixed $value
      * @param mixed $schema
@@ -118,14 +170,14 @@ abstract class Constraint implements ConstraintInterface
      */
     protected function checkType($value, $schema = null, $path = null, $i = null)
     {
-        $validator = new Type($this->checkMode);
+        $validator = new Type($this->checkMode, $this->uriRetriever);
         $validator->check($value, $schema, $path, $i);
 
         $this->addErrors($validator->getErrors());
     }
 
     /**
-     * checks a undefined element
+     * Checks a undefined element
      *
      * @param mixed $value
      * @param mixed $schema
@@ -134,14 +186,14 @@ abstract class Constraint implements ConstraintInterface
      */
     protected function checkUndefined($value, $schema = null, $path = null, $i = null)
     {
-        $validator = new Undefined($this->checkMode);
+        $validator = new Undefined($this->checkMode, $this->uriRetriever);
         $validator->check($value, $schema, $path, $i);
 
         $this->addErrors($validator->getErrors());
     }
 
     /**
-     * checks a string element
+     * Checks a string element
      *
      * @param mixed $value
      * @param mixed $schema
@@ -150,14 +202,14 @@ abstract class Constraint implements ConstraintInterface
      */
     protected function checkString($value, $schema = null, $path = null, $i = null)
     {
-        $validator = new String($this->checkMode);
+        $validator = new String($this->checkMode, $this->uriRetriever);
         $validator->check($value, $schema, $path, $i);
 
         $this->addErrors($validator->getErrors());
     }
 
     /**
-     * checks a number element
+     * Checks a number element
      *
      * @param mixed $value
      * @param mixed $schema
@@ -166,14 +218,14 @@ abstract class Constraint implements ConstraintInterface
      */
     protected function checkNumber($value, $schema = null, $path = null, $i = null)
     {
-        $validator = new Number($this->checkMode);
+        $validator = new Number($this->checkMode, $this->uriRetriever);
         $validator->check($value, $schema, $path, $i);
 
         $this->addErrors($validator->getErrors());
     }
 
     /**
-     * checks a enum element
+     * Checks a enum element
      *
      * @param mixed $value
      * @param mixed $schema
@@ -182,17 +234,31 @@ abstract class Constraint implements ConstraintInterface
      */
     protected function checkEnum($value, $schema = null, $path = null, $i = null)
     {
-        $validator = new Enum($this->checkMode);
+        $validator = new Enum($this->checkMode, $this->uriRetriever);
+        $validator->check($value, $schema, $path, $i);
+
+        $this->addErrors($validator->getErrors());
+    }
+
+    protected function checkFormat($value, $schema = null, $path = null, $i = null)
+    {
+        $validator = new Format($this->checkMode, $this->uriRetriever);
         $validator->check($value, $schema, $path, $i);
 
         $this->addErrors($validator->getErrors());
     }
 
     /**
-     * {inheritDoc}
+     * @param string $uri JSON Schema URI
+     * @return string JSON Schema contents
      */
-    public function isValid()
+    protected function retrieveUri($uri)
     {
-        return !$this->getErrors();
+        if (null === $this->uriRetriever) {
+            $this->setUriRetriever(new UriRetriever);
+        }
+        $jsonSchema = $this->uriRetriever->retrieve($uri);
+        // TODO validate using schema
+        return $jsonSchema;
     }
-}
\ No newline at end of file
+}
diff --git a/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/ConstraintInterface.php b/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/ConstraintInterface.php
index 97c533c..7f65c8e 100644
--- a/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/ConstraintInterface.php
+++ b/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/ConstraintInterface.php
@@ -1,5 +1,12 @@
 <?php
 
+/*
+ * This file is part of the JsonSchema package.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
 namespace JsonSchema\Constraints;
 
 /**
@@ -14,14 +21,14 @@ interface ConstraintInterface
      *
      * @return array
      */
-    function getErrors();
+    public function getErrors();
 
     /**
      * adds errors to this validator
      *
      * @param array $errors
      */
-    function addErrors(array $errors);
+    public function addErrors(array $errors);
 
     /**
      * adds an error
@@ -29,23 +36,23 @@ interface ConstraintInterface
      * @param $path
      * @param $message
      */
-    function addError($path, $message);
+    public function addError($path, $message);
 
     /**
      * checks if the validator has not raised errors
      *
      * @return boolean
      */
-    function isValid();
+    public function isValid();
 
     /**
      * invokes the validation of an element
      *
      * @abstract
      * @param mixed $value
-     * @param null $schema
-     * @param null $path
-     * @param null $i
+     * @param mixed $schema
+     * @param mixed $path
+     * @param mixed $i
      */
-    function check($value, $schema = null, $path = null, $i = null);
+    public function check($value, $schema = null, $path = null, $i = null);
 }
\ No newline at end of file
diff --git a/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/Enum.php b/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/Enum.php
index ba0d55c..c80a2d5 100644
--- a/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/Enum.php
+++ b/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/Enum.php
@@ -1,5 +1,12 @@
 <?php
 
+/*
+ * This file is part of the JsonSchema package.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
 namespace JsonSchema\Constraints;
 
 /**
@@ -11,19 +18,21 @@ namespace JsonSchema\Constraints;
 class Enum extends Constraint
 {
     /**
-     * {inheritDoc}
+     * {@inheritDoc}
      */
     public function check($element, $schema = null, $path = null, $i = null)
     {
-        foreach ($schema->enum as $possibleValue) {
-            if ($possibleValue == $element) {
-                $found = true;
-                break;
-            }
+        // Only validate enum if the attribute exists
+        if ($element instanceof Undefined && (!isset($schema->required) || !$schema->required))  {
+            return;
         }
 
-        if (!isset($found)) {
-            $this->addError($path, "does not have a value in the enumeration " . implode(', ', $schema->enum));
+        foreach ($schema->enum as $enum) {
+            if ((gettype($element) === gettype($enum)) && ($element == $enum)) {
+                return;
+            }
         }
+
+        $this->addError($path, "does not have a value in the enumeration " . print_r($schema->enum, true));
     }
 }
\ No newline at end of file
diff --git a/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/Format.php b/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/Format.php
new file mode 100644
index 0000000..9bcab3e
--- /dev/null
+++ b/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/Format.php
@@ -0,0 +1,164 @@
+<?php
+
+/*
+ * This file is part of the JsonSchema package.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace JsonSchema\Constraints;
+
+/**
+ * Validates against the "format" property
+ *
+ * @author Justin Rainbow <justin.rainbow@gmail.com>
+ * @link   http://tools.ietf.org/html/draft-zyp-json-schema-03#section-5.23
+ */
+class Format extends Constraint
+{
+    /**
+     * {@inheritDoc}
+     */
+    public function check($element, $schema = null, $path = null, $i = null)
+    {
+        if (!isset($schema->format)) {
+            return;
+        }
+
+        switch ($schema->format) {
+            case 'date':
+                if (!$date = $this->validateDateTime($element, 'Y-m-d')) {
+                    $this->addError($path, sprintf('Invalid date %s, expected format YYYY-MM-DD', json_encode($element)));
+                }
+                break;
+
+            case 'time':
+                if (!$this->validateDateTime($element, 'H:i:s')) {
+                    $this->addError($path, sprintf('Invalid time %s, expected format hh:mm:ss', json_encode($element)));
+                }
+                break;
+
+            case 'date-time':
+                if (!$this->validateDateTime($element, 'Y-m-d\TH:i:s\Z') &&
+                    !$this->validateDateTime($element, 'Y-m-d\TH:i:s.u\Z') &&
+                    !$this->validateDateTime($element, 'Y-m-d\TH:i:sP') &&
+                    !$this->validateDateTime($element, 'Y-m-d\TH:i:sO')
+                ) {
+                    $this->addError($path, sprintf('Invalid date-time %s, expected format YYYY-MM-DDThh:mm:ssZ or YYYY-MM-DDThh:mm:ss+hh:mm', json_encode($element)));
+                }
+                break;
+
+            case 'utc-millisec':
+                if (!$this->validateDateTime($element, 'U')) {
+                    $this->addError($path, sprintf('Invalid time %s, expected integer of milliseconds since Epoch', json_encode($element)));
+                }
+                break;
+
+            case 'regex':
+                if (!$this->validateRegex($element)) {
+                    $this->addError($path, 'Invalid regex format ' . $element);
+                }
+                break;
+
+            case 'color':
+                if (!$this->validateColor($element)) {
+                    $this->addError($path, "Invalid color");
+                }
+                break;
+
+            case 'style':
+                if (!$this->validateStyle($element)) {
+                    $this->addError($path, "Invalid style");
+                }
+                break;
+
+            case 'phone':
+                if (!$this->validatePhone($element)) {
+                    $this->addError($path, "Invalid phone number");
+                }
+                break;
+
+            case 'uri':
+                if (null === filter_var($element, FILTER_VALIDATE_URL, FILTER_NULL_ON_FAILURE)) {
+                    $this->addError($path, "Invalid URL format");
+                }
+                break;
+
+            case 'email':
+                if (null === filter_var($element, FILTER_VALIDATE_EMAIL, FILTER_NULL_ON_FAILURE)) {
+                    $this->addError($path, "Invalid email");
+                }
+                break;
+
+            case 'ip-address':
+            case 'ipv4':
+                if (null === filter_var($element, FILTER_VALIDATE_IP, FILTER_NULL_ON_FAILURE | FILTER_FLAG_IPV4)) {
+                    $this->addError($path, "Invalid IP address");
+                }
+                break;
+
+            case 'ipv6':
+                if (null === filter_var($element, FILTER_VALIDATE_IP, FILTER_NULL_ON_FAILURE | FILTER_FLAG_IPV6)) {
+                    $this->addError($path, "Invalid IP address");
+                }
+                break;
+
+            case 'host-name':
+            case 'hostname':
+                if (!$this->validateHostname($element)) {
+                    $this->addError($path, "Invalid hostname");
+                }
+                break;
+
+            default:
+                $this->addError($path, "Unknown format: " . json_encode($schema->format));
+                break;
+        }
+    }
+
+    protected function validateDateTime($datetime, $format)
+    {
+        $dt = \DateTime::createFromFormat($format, $datetime);
+
+        if (!$dt) {
+            return false;
+        }
+
+        return $datetime === $dt->format($format);
+    }
+
+    protected function validateRegex($regex)
+    {
+        return false !== @preg_match('/' . $regex . '/', '');
+    }
+
+    protected function validateColor($color)
+    {
+        if (in_array(strtolower($color), array('aqua', 'black', 'blue', 'fuchsia',
+            'gray', 'green', 'lime', 'maroon', 'navy', 'olive', 'orange', 'purple',
+            'red', 'silver', 'teal', 'white', 'yellow'))) {
+            return true;
+        }
+
+        return preg_match('/^#([a-f0-9]{3}|[a-f0-9]{6})$/i', $color);
+    }
+
+    protected function validateStyle($style)
+    {
+        $properties     = explode(';', rtrim($style, ';'));
+        $invalidEntries = preg_grep('/^\s*[-a-z]+\s*:\s*.+$/i', $properties, PREG_GREP_INVERT);
+
+        return empty($invalidEntries);
+    }
+
+    protected function validatePhone($phone)
+    {
+        return preg_match('/^\+?(\(\d{3}\)|\d{3}) \d{3} \d{4}$/', $phone);
+    }
+
+    protected function validateHostname($host)
+    {
+        return preg_match('/^[_a-z]+\.([_a-z]+\.?)+$/i', $host);
+    }
+}
diff --git a/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/Number.php b/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/Number.php
index 00331cd..b5a7d83 100644
--- a/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/Number.php
+++ b/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/Number.php
@@ -1,5 +1,12 @@
 <?php
 
+/*
+ * This file is part of the JsonSchema package.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
 namespace JsonSchema\Constraints;
 
 /**
@@ -11,23 +18,66 @@ namespace JsonSchema\Constraints;
 class Number extends Constraint
 {
     /**
-     * {inheritDoc}
+     * {@inheritDoc}
      */
     public function check($element, $schema = null, $path = null, $i = null)
     {
-        //verify minimum
-        if (isset($schema->minimum) && $element < $schema->minimum) {
+        // Verify minimum
+        if (isset($schema->exclusiveMinimum)) {
+            if (isset($schema->minimum)) {
+                if ($schema->exclusiveMinimum && $element === $schema->minimum) {
+                    $this->addError($path, "must have a minimum value greater than boundary value of " . $schema->minimum);
+                } else if ($element < $schema->minimum) {
+                    $this->addError($path, "must have a minimum value of " . $schema->minimum);
+                }
+            } else {
+                $this->addError($path, "use of exclusiveMinimum requires presence of minimum");
+            }
+        } else if (isset($schema->minimum) && $element < $schema->minimum) {
             $this->addError($path, "must have a minimum value of " . $schema->minimum);
         }
 
-        //verify maximum
-        if (isset($schema->maximum) && $element > $schema->maximum) {
+        // Verify maximum
+        if (isset($schema->exclusiveMaximum)) {
+            if (isset($schema->maximum)) {
+                if ($schema->exclusiveMaximum && $element === $schema->maximum) {
+                    $this->addError($path, "must have a maximum value less than boundary value of " . $schema->maximum);
+                } else if ($element > $schema->maximum) {
+                    $this->addError($path, "must have a maximum value of " . $schema->maximum);
+                }
+            } else {
+                $this->addError($path, "use of exclusiveMaximum requires presence of maximum");
+            }
+        } else if (isset($schema->maximum) && $element > $schema->maximum) {
             $this->addError($path, "must have a maximum value of " . $schema->maximum);
         }
 
-        //verify divisibleBy
-        if (isset($schema->divisibleBy) && $element % $schema->divisibleBy != 0) {
+        // Verify divisibleBy - Draft v3
+        if (isset($schema->divisibleBy) && $this->fmod($element, $schema->divisibleBy) != 0) {
             $this->addError($path, "is not divisible by " . $schema->divisibleBy);
         }
+
+        // Verify multipleOf - Draft v4
+        if (isset($schema->multipleOf) && $this->fmod($element, $schema->multipleOf) != 0) {
+            $this->addError($path, "must be a multiple of " . $schema->multipleOf);
+        }
+
+        $this->checkFormat($element, $schema, $path, $i);
+    }
+
+    private function fmod($number1, $number2)
+    {
+        $modulus = fmod($number1, $number2);
+        $precision = abs(0.0000000001);
+        $diff = (float)($modulus - $number2);
+
+        if (-$precision < $diff && $diff < $precision) {
+            return 0.0;
+        }
+
+        $decimals1 = mb_strpos($number1, ".") ? mb_strlen($number1) - mb_strpos($number1, ".") - 1 : 0;
+        $decimals2 = mb_strpos($number2, ".") ? mb_strlen($number2) - mb_strpos($number2, ".") - 1 : 0;
+
+        return (float)round($modulus, max($decimals1, $decimals2));
     }
-}
\ No newline at end of file
+}
diff --git a/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/Object.php b/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/Object.php
index 12456d2..e9fc29e 100644
--- a/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/Object.php
+++ b/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/Object.php
@@ -1,5 +1,12 @@
 <?php
 
+/*
+ * This file is part of the JsonSchema package.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
 namespace JsonSchema\Constraints;
 
 /**
@@ -11,45 +18,75 @@ namespace JsonSchema\Constraints;
 class Object extends Constraint
 {
     /**
-     * {inheritDoc}
+     * {@inheritDoc}
      */
-    function check($element, $definition = null, $path = null, $additionalProp = null)
+    function check($element, $definition = null, $path = null, $additionalProp = null, $patternProperties = null)
     {
-        // validate the definition properties
-        $this->validateDefinition($element, $definition, $path);
+        if ($element instanceof Undefined) {
+            return;
+        }
+
+        $matches = array();
+        if ($patternProperties) {
+            $matches = $this->validatePatternProperties($element, $path, $patternProperties);
+        }
+
+        if ($definition) {
+            // validate the definition properties
+            $this->validateDefinition($element, $definition, $path);
+        }
 
         // additional the element properties
-        $this->validateElement($element, $definition, $path, $additionalProp);
+        $this->validateElement($element, $matches, $definition, $path, $additionalProp);
+    }
+
+    public function validatePatternProperties($element, $path, $patternProperties)
+    {
+        $matches = array();
+        foreach ($patternProperties as $pregex => $schema) {
+            // Validate the pattern before using it to test for matches
+            if (@preg_match('/'. $pregex . '/', '') === false) {
+                $this->addError($path, 'The pattern "' . $pregex . '" is invalid');
+                continue;
+            }
+            foreach ($element as $i => $value) {
+                if (preg_match('/' . $pregex . '/', $i)) {
+                    $matches[] = $i;
+                    $this->checkUndefined($value, $schema ? : new \stdClass(), $path, $i);
+                }
+            }
+        }
+        return $matches;
     }
 
     /**
-     * validates the element properties
+     * Validates the element properties
      *
-     * @param \stdClass $element
-     * @param \stdClass $objectDefinition
-     * @param string $path
-     * @param mixed $additionalProp
+     * @param \stdClass $element          Element to validate
+     * @param array     $matches          Matches from patternProperties (if any)
+     * @param \stdClass $objectDefinition Object definition
+     * @param string    $path             Path to test?
+     * @param mixed     $additionalProp   Additional properties
      */
-    public function validateElement($element, $objectDefinition = null, $path = null, $additionalProp = null)
+    public function validateElement($element, $matches, $objectDefinition = null, $path = null, $additionalProp = null)
     {
         foreach ($element as $i => $value) {
 
             $property = $this->getProperty($element, $i, new Undefined());
             $definition = $this->getProperty($objectDefinition, $i);
 
-            //required property
-            if ($this->getProperty($definition, 'required') && !$property) {
-                $this->addError($path, "the property " . $i . " is required");
-            }
-
-            //no additional properties allowed
-            if ($additionalProp === false && $this->inlineSchemaProperty !== $i && !$definition) {
+            // no additional properties allowed
+            if (!in_array($i, $matches) && $additionalProp === false && $this->inlineSchemaProperty !== $i && !$definition) {
                 $this->addError($path, "The property " . $i . " is not defined and the definition does not allow additional properties");
             }
 
             // additional properties defined
-            if ($additionalProp && !$definition) {
-                $this->checkUndefined($value, $additionalProp, $path, $i);
+            if (!in_array($i, $matches) && $additionalProp && !$definition) {
+                if ($additionalProp === true) {
+                    $this->checkUndefined($value, null, $path, $i);
+                } else {
+                    $this->checkUndefined($value, $additionalProp, $path, $i);
+                }
             }
 
             // property requires presence of another
@@ -58,17 +95,19 @@ class Object extends Constraint
                 $this->addError($path, "the presence of the property " . $i . " requires that " . $require . " also be present");
             }
 
-            //normal property verification
-            $this->checkUndefined($value, $definition ? : new \stdClass(), $path, $i);
+            if (!$definition) {
+                // normal property verification
+                $this->checkUndefined($value, new \stdClass(), $path, $i);
+            }
         }
     }
 
     /**
-     * validates the definition properties
+     * Validates the definition properties
      *
-     * @param \stdClass $element
-     * @param \stdClass $objectDefinition
-     * @param string $path
+     * @param \stdClass $element          Element to validate
+     * @param \stdClass $objectDefinition Object definition
+     * @param string    $path             Path?
      */
     public function validateDefinition($element, $objectDefinition = null, $path = null)
     {
@@ -82,17 +121,20 @@ class Object extends Constraint
     /**
      * retrieves a property from an object or array
      *
-     * @param mixed $element
-     * @param string $property
-     * @param mixed $fallback
+     * @param mixed  $element  Element to validate
+     * @param string $property Property to retrieve
+     * @param mixed  $fallback Default value if property is not found
+     *
      * @return mixed
      */
     protected function getProperty($element, $property, $fallback = null)
     {
         if (is_array($element) /*$this->checkMode == self::CHECK_MODE_TYPE_CAST*/) {
             return array_key_exists($property, $element) ? $element[$property] : $fallback;
-        } else {
-            return isset($element->$property) ? $element->$property : $fallback;
+        } elseif (is_object($element)) {
+            return property_exists($element, $property) ? $element->$property : $fallback;
         }
+
+        return $fallback;
     }
 }
\ No newline at end of file
diff --git a/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/Schema.php b/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/Schema.php
index 20800fd..595ca43 100644
--- a/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/Schema.php
+++ b/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/Schema.php
@@ -1,7 +1,16 @@
 <?php
 
+/*
+ * This file is part of the JsonSchema package.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
 namespace JsonSchema\Constraints;
 
+use JsonSchema\Exception\InvalidArgumentException;
+
 /**
  * The Schema Constraints, validates an element against a given schema
  *
@@ -11,18 +20,18 @@ namespace JsonSchema\Constraints;
 class Schema extends Constraint
 {
     /**
-     * {inheritDoc}
+     * {@inheritDoc}
      */
     public function check($element, $schema = null, $path = null, $i = null)
     {
         if ($schema !== null) {
             // passed schema
             $this->checkUndefined($element, $schema, '', '');
-        } elseif (isset($element->{$this->inlineSchemaProperty})) {
+        } elseif (property_exists($element, $this->inlineSchemaProperty)) {
             // inline schema
             $this->checkUndefined($element, $element->{$this->inlineSchemaProperty}, '', '');
         } else {
-            throw new \InvalidArgumentException('no schema found to verify against');
+            throw new InvalidArgumentException('no schema found to verify against');
         }
     }
 }
\ No newline at end of file
diff --git a/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/String.php b/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/String.php
index a9c25dc..246c06b 100644
--- a/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/String.php
+++ b/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/String.php
@@ -1,5 +1,12 @@
 <?php
 
+/*
+ * This file is part of the JsonSchema package.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
 namespace JsonSchema\Constraints;
 
 /**
@@ -11,23 +18,34 @@ namespace JsonSchema\Constraints;
 class String extends Constraint
 {
     /**
-     * {inheritDoc}
+     * {@inheritDoc}
      */
     public function check($element, $schema = null, $path = null, $i = null)
     {
-        // verify maxLength
-        if (isset($schema->maxLength) && strlen($element) > $schema->maxLength) {
+        // Verify maxLength
+        if (isset($schema->maxLength) && $this->strlen($element) > $schema->maxLength) {
             $this->addError($path, "must be at most " . $schema->maxLength . " characters long");
         }
 
         //verify minLength
-        if (isset($schema->minLength) && strlen($element) < $schema->minLength) {
+        if (isset($schema->minLength) && $this->strlen($element) < $schema->minLength) {
             $this->addError($path, "must be at least " . $schema->minLength . " characters long");
         }
 
-        // verify a regex pattern
-        if (isset($schema->pattern) && !preg_match('/' . $schema->pattern . '/', $element)) {
+        // Verify a regex pattern
+        if (isset($schema->pattern) && !preg_match('#' . str_replace('#', '\\#', $schema->pattern) . '#', $element)) {
             $this->addError($path, "does not match the regex pattern " . $schema->pattern);
         }
+
+        $this->checkFormat($element, $schema, $path, $i);
+    }
+
+    private function strlen($string)
+    {
+        if (extension_loaded('mbstring')) {
+            return mb_strlen($string, mb_detect_encoding($string));
+        } else {
+            return strlen($string);
+        }
     }
-}
\ No newline at end of file
+}
diff --git a/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/Type.php b/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/Type.php
index 7e3f70c..5fc80a4 100644
--- a/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/Type.php
+++ b/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/Type.php
@@ -1,7 +1,17 @@
 <?php
 
+/*
+ * This file is part of the JsonSchema package.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
 namespace JsonSchema\Constraints;
 
+use JsonSchema\Exception\InvalidArgumentException;
+use UnexpectedValueException as StandardUnexpectedValueException;
+
 /**
  * The Type Constraints, validates an element against a given type
  *
@@ -11,15 +21,30 @@ namespace JsonSchema\Constraints;
 class Type extends Constraint
 {
     /**
-     * {inheritDoc}
+     * @var array|string[] type wordings for validation error messages
+     */
+    static $wording = array(
+        'integer' => 'an integer',
+        'number'  => 'a number',
+        'boolean' => 'a boolean',
+        'object'  => 'an object',
+        'array'   => 'an array',
+        'string'  => 'a string',
+        'null'    => 'a null',
+        'any'     => NULL, // validation of 'any' is always true so is not needed in message wording
+        0         => NULL, // validation of a false-y value is always true, so not needed as well
+    );
+
+    /**
+     * {@inheritDoc}
      */
-    function check($value = null, $schema = null, $path = null, $i = null)
+    public function check($value = null, $schema = null, $path = null, $i = null)
     {
         $type = isset($schema->type) ? $schema->type : null;
         $isValid = true;
 
         if (is_array($type)) {
-            //TODO refactor
+            // @TODO refactor
             $validatedOneType = false;
             $errors = array();
             foreach ($type as $tp) {
@@ -32,10 +57,11 @@ class Type extends Constraint
                 if (!count($error)) {
                     $validatedOneType = true;
                     break;
-                } else {
-                    $errors = $error;
                 }
+
+                $errors = $error;
             }
+
             if (!$validatedOneType) {
                 return $this->addErrors($errors);
             }
@@ -46,17 +72,27 @@ class Type extends Constraint
         }
 
         if ($isValid === false) {
-            $this->addError($path, gettype($value) . " value found, but a " . $type . " is required");
+            if (!isset(self::$wording[$type])) {
+                throw new StandardUnexpectedValueException(
+                    sprintf(
+                        "No wording for %s available, expected wordings are: [%s]",
+                        var_export($type, true),
+                        implode(', ', array_filter(self::$wording)))
+                );
+            }
+            $this->addError($path, gettype($value) . " value found, but " . self::$wording[$type] . " is required");
         }
     }
 
     /**
-     * verifies that a given value is of a certain type
+     * Verifies that a given value is of a certain type
+     *
+     * @param mixed  $value Value to validate
+     * @param string $type  Type to check against
      *
-     * @param string $type
-     * @param mixed $value
      * @return boolean
-     * @throws \InvalidArgumentException
+     *
+     * @throws InvalidArgumentException
      */
     protected function validateType($value, $type)
     {
@@ -65,26 +101,39 @@ class Type extends Constraint
             return true;
         }
 
-        switch ($type) {
-            case 'integer' :
-                return (integer)$value == $value ? true : is_int($value);
-            case 'number' :
-                return is_numeric($value);
-            case 'boolean' :
-                return is_bool($value);
-            case 'object' :
-                return is_object($value);
+        if ('integer' === $type) {
+            return is_int($value);
+        }
+
+        if ('number' === $type) {
+            return is_numeric($value) && !is_string($value);
+        }
+
+        if ('boolean' === $type) {
+            return is_bool($value);
+        }
+
+        if ('object' === $type) {
+            return is_object($value);
             //return ($this::CHECK_MODE_TYPE_CAST == $this->checkMode) ? is_array($value) : is_object($value);
-            case 'array' :
-                return is_array($value);
-            case 'string' :
-                return is_string($value);
-            case 'null' :
-                return is_null($value);
-            case 'any' :
-                return true;
-            default:
-                throw new \InvalidArgumentException((is_object($value) ? 'object' : $value) . ' is a invalid type for ' . $type);
         }
+
+        if ('array' === $type) {
+            return is_array($value);
+        }
+
+        if ('string' === $type) {
+            return is_string($value);
+        }
+
+        if ('null' === $type) {
+            return is_null($value);
+        }
+
+        if ('any' === $type) {
+            return true;
+        }
+
+        throw new InvalidArgumentException((is_object($value) ? 'object' : $value) . ' is an invalid type for ' . $type);
     }
 }
\ No newline at end of file
diff --git a/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/Undefined.php b/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/Undefined.php
index 524bf83..e632de5 100644
--- a/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/Undefined.php
+++ b/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/Undefined.php
@@ -1,7 +1,17 @@
 <?php
 
+/*
+ * This file is part of the JsonSchema package.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
 namespace JsonSchema\Constraints;
 
+use JsonSchema\Exception\InvalidArgumentException;
+use JsonSchema\Uri\UriResolver;
+
 /**
  * The Undefined Constraints
  *
@@ -11,32 +21,41 @@ namespace JsonSchema\Constraints;
 class Undefined extends Constraint
 {
     /**
-     * {inheritDoc}
+     * {@inheritDoc}
      */
-    function check($value, $schema = null, $path = null, $i = null)
+    public function check($value, $schema = null, $path = null, $i = null)
     {
-        if (!is_object($schema)) {
+        if (is_null($schema)) {
             return;
         }
 
+        if (!is_object($schema)) {
+            throw new InvalidArgumentException(
+                'Given schema must be an object in ' . $path
+                . ' but is a ' . gettype($schema)
+            );
+        }
+
+        $i = is_null($i) ? "" : $i;
         $path = $this->incrementPath($path, $i);
 
         // check special properties
         $this->validateCommonProperties($value, $schema, $path);
 
+        // check allOf, anyOf, and oneOf properties
+        $this->validateOfProperties($value, $schema, $path);
+
         // check known types
         $this->validateTypes($value, $schema, $path, $i);
-
-
     }
 
     /**
-     * validates the value against the types
+     * Validates the value against the types
      *
-     * @param $value
-     * @param null $schema
-     * @param null $path
-     * @param null $i
+     * @param mixed  $value
+     * @param mixed  $schema
+     * @param string $path
+     * @param string $i
      */
     public function validateTypes($value, $schema = null, $path = null, $i = null)
     {
@@ -46,8 +65,14 @@ class Undefined extends Constraint
         }
 
         // check object
-        if (is_object($value) && isset($schema->properties)) {
-            $this->checkObject($value, $schema->properties, $path, isset($schema->additionalProperties) ? $schema->additionalProperties : null);
+        if (is_object($value) && (isset($schema->properties) || isset($schema->patternProperties))) {
+            $this->checkObject(
+                $value,
+                isset($schema->properties) ? $schema->properties : null,
+                $path,
+                isset($schema->additionalProperties) ? $schema->additionalProperties : null,
+                isset($schema->patternProperties) ? $schema->patternProperties : null
+            );
         }
 
         // check string
@@ -67,41 +92,216 @@ class Undefined extends Constraint
     }
 
     /**
-     * validates common properties
+     * Validates common properties
      *
-     * @param $value
-     * @param null $schema
-     * @param null $path
-     * @param null $i
+     * @param mixed  $value
+     * @param mixed  $schema
+     * @param string $path
+     * @param string $i
      */
-    protected function validateCommonProperties($value, $schema = null, $path = null, $i = null)
+    protected function validateCommonProperties($value, $schema = null, $path = null, $i = "")
     {
         // if it extends another schema, it must pass that schema as well
         if (isset($schema->extends)) {
-            $this->checkUndefined($value, $schema->extends, $path, $i);
+            if (is_string($schema->extends)) {
+                $schema->extends = $this->validateUri($schema, $schema->extends);
+            }
+            if (is_array($schema->extends)) {
+                foreach ($schema->extends as $extends) {
+                    $this->checkUndefined($value, $extends, $path, $i);
+                }
+            } else {
+                $this->checkUndefined($value, $schema->extends, $path, $i);
+            }
         }
 
-        // verify required values
-        if (is_object($value) && $value instanceOf Undefined) {
-            if (isset($schema->required) && $schema->required) {
-                $this->addError($path, "is missing and it is required");
+        // Verify required values
+        if (is_object($value)) {
+
+            if (!($value instanceof Undefined) && isset($schema->required) && is_array($schema->required) ) {
+                // Draft 4 - Required is an array of strings - e.g. "required": ["foo", ...]
+                foreach ($schema->required as $required) {
+                    if (!property_exists($value, $required)) {
+                        $this->addError($path, "the property " . $required . " is required");
+                    }
+                }
+            } else if (isset($schema->required) && !is_array($schema->required)) {
+                // Draft 3 - Required attribute - e.g. "foo": {"type": "string", "required": true}
+                if ( $schema->required && $value instanceof Undefined) {
+                    $this->addError($path, "is missing and it is required");
+                }
             }
-        } else {
+        }
+
+        // Verify type
+        if (!($value instanceof Undefined)) {
             $this->checkType($value, $schema, $path);
         }
 
-        //verify disallowed items
+        // Verify disallowed items
         if (isset($schema->disallow)) {
             $initErrors = $this->getErrors();
 
-            $this->checkUndefined($value, $schema->disallow, $path);
+            $typeSchema = new \stdClass();
+            $typeSchema->type = $schema->disallow;
+            $this->checkType($value, $typeSchema, $path);
 
-            //if no new errors were raised it must be a disallowed value
+            // if no new errors were raised it must be a disallowed value
             if (count($this->getErrors()) == count($initErrors)) {
-                $this->addError($path, " disallowed value was matched");
+                $this->addError($path, "disallowed value was matched");
             } else {
                 $this->errors = $initErrors;
             }
         }
+
+        if (isset($schema->not)) {
+            $initErrors = $this->getErrors();
+            $this->checkUndefined($value, $schema->not, $path, $i);
+
+            // if no new errors were raised then the instance validated against the "not" schema
+            if (count($this->getErrors()) == count($initErrors)) {
+                $this->addError($path, "matched a schema which it should not");
+            } else {
+                $this->errors = $initErrors;
+            }
+        }
+
+        // Verify minimum and maximum number of properties
+        if (is_object($value)) {
+            if (isset($schema->minProperties)) {
+                if (count(get_object_vars($value)) < $schema->minProperties) {
+                    $this->addError($path, "must contain a minimum of " . $schema->minProperties . " properties");
+                }
+            }
+            if (isset($schema->maxProperties)) {
+                if (count(get_object_vars($value)) > $schema->maxProperties) {
+                    $this->addError($path, "must contain no more than " . $schema->maxProperties . " properties");
+                }
+            }
+        }
+
+        // Verify that dependencies are met
+        if (is_object($value) && isset($schema->dependencies)) {
+            $this->validateDependencies($value, $schema->dependencies, $path);
+        }
+    }
+
+    /**
+     * Validate allOf, anyOf, and oneOf properties
+     *
+     * @param mixed  $value
+     * @param mixed  $schema
+     * @param string $path
+     * @param string $i
+     */
+    protected function validateOfProperties($value, $schema, $path, $i = "")
+    {
+        // Verify type
+        if ($value instanceof Undefined) {
+            return;
+        }
+
+        if (isset($schema->allOf)) {
+            $isValid = true;
+            foreach ($schema->allOf as $allOf) {
+                $initErrors = $this->getErrors();
+                $this->checkUndefined($value, $allOf, $path, $i);
+                $isValid = $isValid && (count($this->getErrors()) == count($initErrors));
+            }
+            if (!$isValid) {
+                $this->addError($path, "failed to match all schemas");
+            }
+        }
+
+        if (isset($schema->anyOf)) {
+            $isValid = false;
+            $startErrors = $this->getErrors();
+            foreach ($schema->anyOf as $anyOf) {
+                $initErrors = $this->getErrors();
+                $this->checkUndefined($value, $anyOf, $path, $i);
+                if ($isValid = (count($this->getErrors()) == count($initErrors))) {
+                    break;
+                }
+            }
+            if (!$isValid) {
+                $this->addError($path, "failed to match at least one schema");
+            } else {
+                $this->errors = $startErrors;
+            }
+        }
+
+        if (isset($schema->oneOf)) {
+            $allErrors = array();
+            $matchedSchemas = 0;
+            $startErrors = $this->getErrors();
+            foreach ($schema->oneOf as $oneOf) {
+                $this->errors = array();
+                $this->checkUndefined($value, $oneOf, $path, $i);
+                if (count($this->getErrors()) == 0) {
+                    $matchedSchemas++;
+                }
+                $allErrors = array_merge($allErrors, array_values($this->getErrors()));
+            }
+            if ($matchedSchemas !== 1) {
+                $this->addErrors(
+                    array_merge(
+                        $allErrors,
+                        array(array(
+                            'property' => $path,
+                            'message' => "failed to match exactly one schema"
+                        ),),
+                        $startErrors
+                    )
+                );
+            } else {
+                $this->errors = $startErrors;
+            }
+        }
+    }
+
+    /**
+     * Validate dependencies
+     *
+     * @param mixed  $value
+     * @param mixed  $dependencies
+     * @param string $path
+     * @param string $i
+     */
+    protected function validateDependencies($value, $dependencies, $path, $i = "")
+    {
+        foreach ($dependencies as $key => $dependency) {
+            if (property_exists($value, $key)) {
+                if (is_string($dependency)) {
+                    // Draft 3 string is allowed - e.g. "dependencies": {"bar": "foo"}
+                    if (!property_exists($value, $dependency)) {
+                        $this->addError($path, "$key depends on $dependency and $dependency is missing");
+                    }
+                } else if (is_array($dependency)) {
+                    // Draft 4 must be an array - e.g. "dependencies": {"bar": ["foo"]}
+                    foreach ($dependency as $d) {
+                        if (!property_exists($value, $d)) {
+                            $this->addError($path, "$key depends on $d and $d is missing");
+                        }
+                    }
+                } else if (is_object($dependency)) {
+                    // Schema - e.g. "dependencies": {"bar": {"properties": {"foo": {...}}}}
+                    $this->checkUndefined($value, $dependency, $path, $i);
+                }
+            }
+        }
+    }
+
+    protected function validateUri($schema, $schemaUri = null)
+    {
+        $resolver = new UriResolver();
+        $retriever = $this->getUriRetriever();
+
+        $jsonSchema = null;
+        if ($resolver->isValid($schemaUri)) {
+            $schemaId = property_exists($schema, 'id') ? $schema->id : null;
+            $jsonSchema = $retriever->retrieve($schemaId, $schemaUri);
+        }
+
+        return $jsonSchema;
     }
-}
\ No newline at end of file
+}
diff --git a/vendor/justinrainbow/json-schema/src/JsonSchema/Exception/InvalidArgumentException.php b/vendor/justinrainbow/json-schema/src/JsonSchema/Exception/InvalidArgumentException.php
new file mode 100644
index 0000000..ec702a7
--- /dev/null
+++ b/vendor/justinrainbow/json-schema/src/JsonSchema/Exception/InvalidArgumentException.php
@@ -0,0 +1,17 @@
+<?php
+
+/*
+ * This file is part of the JsonSchema package.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace JsonSchema\Exception;
+
+/**
+ * Wrapper for the InvalidArgumentException
+ */
+class InvalidArgumentException extends \InvalidArgumentException
+{
+}
\ No newline at end of file
diff --git a/vendor/justinrainbow/json-schema/src/JsonSchema/Exception/InvalidSchemaMediaTypeException.php b/vendor/justinrainbow/json-schema/src/JsonSchema/Exception/InvalidSchemaMediaTypeException.php
new file mode 100644
index 0000000..2e94677
--- /dev/null
+++ b/vendor/justinrainbow/json-schema/src/JsonSchema/Exception/InvalidSchemaMediaTypeException.php
@@ -0,0 +1,17 @@
+<?php
+
+/*
+ * This file is part of the JsonSchema package.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace JsonSchema\Exception;
+
+/**
+ * Wrapper for the InvalidSchemaMediaType
+ */
+class InvalidSchemaMediaTypeException extends \RuntimeException
+{    
+}
\ No newline at end of file
diff --git a/vendor/justinrainbow/json-schema/src/JsonSchema/Exception/InvalidSourceUriException.php b/vendor/justinrainbow/json-schema/src/JsonSchema/Exception/InvalidSourceUriException.php
new file mode 100644
index 0000000..37db121
--- /dev/null
+++ b/vendor/justinrainbow/json-schema/src/JsonSchema/Exception/InvalidSourceUriException.php
@@ -0,0 +1,17 @@
+<?php
+
+/*
+ * This file is part of the JsonSchema package.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace JsonSchema\Exception;
+
+/**
+ * Wrapper for the InvalidSourceUriException
+ */
+class InvalidSourceUriException extends InvalidArgumentException
+{
+}
diff --git a/vendor/justinrainbow/json-schema/src/JsonSchema/Exception/JsonDecodingException.php b/vendor/justinrainbow/json-schema/src/JsonSchema/Exception/JsonDecodingException.php
new file mode 100644
index 0000000..2c22881
--- /dev/null
+++ b/vendor/justinrainbow/json-schema/src/JsonSchema/Exception/JsonDecodingException.php
@@ -0,0 +1,40 @@
+<?php
+
+/*
+ * This file is part of the JsonSchema package.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace JsonSchema\Exception;
+
+/**
+ * Wrapper for the JsonDecodingException
+ */
+class JsonDecodingException extends \RuntimeException
+{
+    public function __construct($code = JSON_ERROR_NONE, \Exception $previous = null)
+    {
+        switch ($code) {
+            case JSON_ERROR_DEPTH:
+                $message = 'The maximum stack depth has been exceeded';
+                break;
+            case JSON_ERROR_STATE_MISMATCH:
+                $message = 'Invalid or malformed JSON';
+                break;
+            case JSON_ERROR_CTRL_CHAR:
+                $message = 'Control character error, possibly incorrectly encoded';
+                break;
+            case JSON_ERROR_UTF8:
+                $message = 'Malformed UTF-8 characters, possibly incorrectly encoded';
+                break;
+            case JSON_ERROR_SYNTAX:
+                $message = 'JSON syntax is malformed';
+                break;
+            default:
+                $message = 'Syntax error';
+        }
+        parent::__construct($message, $code, $previous);
+    }
+}
\ No newline at end of file
diff --git a/vendor/justinrainbow/json-schema/src/JsonSchema/Exception/ResourceNotFoundException.php b/vendor/justinrainbow/json-schema/src/JsonSchema/Exception/ResourceNotFoundException.php
new file mode 100644
index 0000000..87b4ac1
--- /dev/null
+++ b/vendor/justinrainbow/json-schema/src/JsonSchema/Exception/ResourceNotFoundException.php
@@ -0,0 +1,17 @@
+<?php
+
+/*
+ * This file is part of the JsonSchema package.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace JsonSchema\Exception;
+
+/**
+ * Wrapper for the ResourceNotFoundException
+ */
+class ResourceNotFoundException extends \RuntimeException
+{
+}
\ No newline at end of file
diff --git a/vendor/justinrainbow/json-schema/src/JsonSchema/Exception/UriResolverException.php b/vendor/justinrainbow/json-schema/src/JsonSchema/Exception/UriResolverException.php
new file mode 100644
index 0000000..6d0b094
--- /dev/null
+++ b/vendor/justinrainbow/json-schema/src/JsonSchema/Exception/UriResolverException.php
@@ -0,0 +1,17 @@
+<?php
+
+/*
+ * This file is part of the JsonSchema package.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace JsonSchema\Exception;
+
+/**
+ * Wrapper for the UriResolverException
+ */
+class UriResolverException extends \RuntimeException
+{
+}
\ No newline at end of file
diff --git a/vendor/justinrainbow/json-schema/src/JsonSchema/RefResolver.php b/vendor/justinrainbow/json-schema/src/JsonSchema/RefResolver.php
new file mode 100644
index 0000000..4786a33
--- /dev/null
+++ b/vendor/justinrainbow/json-schema/src/JsonSchema/RefResolver.php
@@ -0,0 +1,228 @@
+<?php
+
+/*
+ * This file is part of the JsonSchema package.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace JsonSchema;
+
+use JsonSchema\Uri\Retrievers\UriRetrieverInterface;
+use JsonSchema\Uri\UriRetriever;
+
+/**
+ * Take in an object that's a JSON schema and take care of all $ref references
+ *
+ * @author Tyler Akins <fidian@rumkin.com>
+ * @see    README.md
+ */
+class RefResolver
+{
+    /**
+     * HACK to prevent too many recursive expansions.
+     * Happens e.g. when you want to validate a schema against the schema
+     * definition.
+     *
+     * @var integer
+     */
+    protected static $depth = 0;
+
+    /**
+     * maximum references depth
+     * @var integer
+     */
+    public static $maxDepth = 7;
+
+    /**
+     * @var UriRetrieverInterface
+     */
+    protected $uriRetriever = null;
+
+    /**
+     * @param UriRetriever $retriever
+     */
+    public function __construct($retriever = null)
+    {
+        $this->uriRetriever = $retriever;
+    }
+
+    /**
+     * Retrieves a given schema given a ref and a source URI
+     *
+     * @param  string $ref       Reference from schema
+     * @param  string $sourceUri URI where original schema was located
+     * @return object            Schema
+     */
+    public function fetchRef($ref, $sourceUri)
+    {
+        $retriever  = $this->getUriRetriever();
+        $jsonSchema = $retriever->retrieve($ref, $sourceUri);
+        $this->resolve($jsonSchema);
+
+        return $jsonSchema;
+    }
+
+    /**
+     * Return the URI Retriever, defaulting to making a new one if one
+     * was not yet set.
+     *
+     * @return UriRetriever
+     */
+    public function getUriRetriever()
+    {
+        if (is_null($this->uriRetriever)) {
+            $this->setUriRetriever(new UriRetriever);
+        }
+
+        return $this->uriRetriever;
+    }
+
+    /**
+     * Resolves all $ref references for a given schema.  Recurses through
+     * the object to resolve references of any child schemas.
+     *
+     * The 'format' property is omitted because it isn't required for
+     * validation.  Theoretically, this class could be extended to look
+     * for URIs in formats: "These custom formats MAY be expressed as
+     * an URI, and this URI MAY reference a schema of that format."
+     *
+     * The 'id' property is not filled in, but that could be made to happen.
+     *
+     * @param object $schema    JSON Schema to flesh out
+     * @param string $sourceUri URI where this schema was located
+     */
+    public function resolve($schema, $sourceUri = null)
+    {
+        if (self::$depth > self::$maxDepth) {
+            return;
+        }
+        ++self::$depth;
+
+        if (! is_object($schema)) {
+            --self::$depth;
+            return;
+        }
+
+        if (null === $sourceUri && ! empty($schema->id)) {
+            $sourceUri = $schema->id;
+        }
+
+        // Resolve $ref first
+        $this->resolveRef($schema, $sourceUri);
+
+        // These properties are just schemas
+        // eg.  items can be a schema or an array of schemas
+        foreach (array('additionalItems', 'additionalProperties', 'extends', 'items') as $propertyName) {
+            $this->resolveProperty($schema, $propertyName, $sourceUri);
+        }
+
+        // These are all potentially arrays that contain schema objects
+        // eg.  type can be a value or an array of values/schemas
+        // eg.  items can be a schema or an array of schemas
+        foreach (array('disallow', 'extends', 'items', 'type', 'allOf', 'anyOf', 'oneOf') as $propertyName) {
+            $this->resolveArrayOfSchemas($schema, $propertyName, $sourceUri);
+        }
+
+        // These are all objects containing properties whose values are schemas
+        foreach (array('dependencies', 'patternProperties', 'properties') as $propertyName) {
+            $this->resolveObjectOfSchemas($schema, $propertyName, $sourceUri);
+        }
+
+        --self::$depth;
+    }
+
+    /**
+     * Given an object and a property name, that property should be an
+     * array whose values can be schemas.
+     *
+     * @param object $schema       JSON Schema to flesh out
+     * @param string $propertyName Property to work on
+     * @param string $sourceUri    URI where this schema was located
+     */
+    public function resolveArrayOfSchemas($schema, $propertyName, $sourceUri)
+    {
+        if (! isset($schema->$propertyName) || ! is_array($schema->$propertyName)) {
+            return;
+        }
+
+        foreach ($schema->$propertyName as $possiblySchema) {
+            $this->resolve($possiblySchema, $sourceUri);
+        }
+    }
+
+    /**
+     * Given an object and a property name, that property should be an
+     * object whose properties are schema objects.
+     *
+     * @param object $schema       JSON Schema to flesh out
+     * @param string $propertyName Property to work on
+     * @param string $sourceUri    URI where this schema was located
+     */
+    public function resolveObjectOfSchemas($schema, $propertyName, $sourceUri)
+    {
+        if (! isset($schema->$propertyName) || ! is_object($schema->$propertyName)) {
+            return;
+        }
+
+        foreach (get_object_vars($schema->$propertyName) as $possiblySchema) {
+            $this->resolve($possiblySchema, $sourceUri);
+        }
+    }
+
+    /**
+     * Given an object and a property name, that property should be a
+     * schema object.
+     *
+     * @param object $schema       JSON Schema to flesh out
+     * @param string $propertyName Property to work on
+     * @param string $sourceUri    URI where this schema was located
+     */
+    public function resolveProperty($schema, $propertyName, $sourceUri)
+    {
+        if (! isset($schema->$propertyName)) {
+            return;
+        }
+
+        $this->resolve($schema->$propertyName, $sourceUri);
+    }
+
+    /**
+     * Look for the $ref property in the object.  If found, remove the
+     * reference and augment this object with the contents of another
+     * schema.
+     *
+     * @param object $schema    JSON Schema to flesh out
+     * @param string $sourceUri URI where this schema was located
+     */
+    public function resolveRef($schema, $sourceUri)
+    {
+        $ref = '$ref';
+
+        if (empty($schema->$ref)) {
+            return;
+        }
+
+        $refSchema = $this->fetchRef($schema->$ref, $sourceUri);
+        unset($schema->$ref);
+
+        // Augment the current $schema object with properties fetched
+        foreach (get_object_vars($refSchema) as $prop => $value) {
+            $schema->$prop = $value;
+        }
+    }
+
+    /**
+     * Set URI Retriever for use with the Ref Resolver
+     *
+     * @param UriRetriever $retriever
+     * @return $this for chaining
+     */
+    public function setUriRetriever(UriRetriever $retriever)
+    {
+        $this->uriRetriever = $retriever;
+
+        return $this;
+    }
+}
diff --git a/vendor/justinrainbow/json-schema/src/JsonSchema/Uri/Retrievers/AbstractRetriever.php b/vendor/justinrainbow/json-schema/src/JsonSchema/Uri/Retrievers/AbstractRetriever.php
new file mode 100644
index 0000000..f924ad8
--- /dev/null
+++ b/vendor/justinrainbow/json-schema/src/JsonSchema/Uri/Retrievers/AbstractRetriever.php
@@ -0,0 +1,29 @@
+<?php
+/**
+ * JsonSchema
+ * @filesource
+ */
+namespace JsonSchema\Uri\Retrievers;
+
+/**
+ * AbstractRetriever implements the default shared behavior
+ * that all decendant Retrievers should inherit
+ * @author Steven Garcia <webwhammy@gmail.com>
+ */
+abstract class AbstractRetriever implements UriRetrieverInterface
+{
+    /**
+     * Media content type
+     * @var string
+     */
+    protected $contentType;
+
+    /**
+     * {@inheritDoc}
+     * @see \JsonSchema\Uri\Retrievers\UriRetrieverInterface::getContentType()
+     */
+    public function getContentType()
+    {
+        return $this->contentType;
+    }
+}
diff --git a/vendor/justinrainbow/json-schema/src/JsonSchema/Uri/Retrievers/Curl.php b/vendor/justinrainbow/json-schema/src/JsonSchema/Uri/Retrievers/Curl.php
new file mode 100644
index 0000000..cd8414f
--- /dev/null
+++ b/vendor/justinrainbow/json-schema/src/JsonSchema/Uri/Retrievers/Curl.php
@@ -0,0 +1,79 @@
+<?php
+
+/*
+ * This file is part of the JsonSchema package.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace JsonSchema\Uri\Retrievers;
+
+use JsonSchema\Validator;
+
+/**
+ * Tries to retrieve JSON schemas from a URI using cURL library
+ *
+ * @author Sander Coolen <sander@jibber.nl>
+ */
+class Curl extends AbstractRetriever
+{
+    protected $messageBody;
+
+    public function __construct()
+    {
+        if (!function_exists('curl_init')) {
+            throw new \RuntimeException("cURL not installed");
+        }
+    }
+
+    /**
+     * {@inheritDoc}
+     * @see \JsonSchema\Uri\Retrievers\UriRetrieverInterface::retrieve()
+     */
+    public function retrieve($uri)
+    {
+        $ch = curl_init();
+
+        curl_setopt($ch, CURLOPT_URL, $uri);
+        curl_setopt($ch, CURLOPT_HEADER, true);
+        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
+        curl_setopt($ch, CURLOPT_HTTPHEADER, array('Accept: ' . Validator::SCHEMA_MEDIA_TYPE));
+
+        $response = curl_exec($ch);
+        if (false === $response) {
+            throw new \JsonSchema\Exception\ResourceNotFoundException('JSON schema not found');
+        }
+
+        $this->fetchMessageBody($response);
+        $this->fetchContentType($response);
+
+        curl_close($ch);
+
+        return $this->messageBody;
+    }
+
+    /**
+     * @param string $response cURL HTTP response
+     */
+    private function fetchMessageBody($response)
+    {
+        preg_match("/(?:\r\n){2}(.*)$/ms", $response, $match);
+        $this->messageBody = $match[1];
+    }
+
+    /**
+     * @param string $response cURL HTTP response
+     * @return boolean Whether the Content-Type header was found or not
+     */
+    protected function fetchContentType($response)
+    {
+        if (0 < preg_match("/Content-Type:(\V*)/ims", $response, $match)) {
+            $this->contentType = trim($match[1]);
+
+            return true;
+        }
+
+        return false;
+    }
+}
\ No newline at end of file
diff --git a/vendor/justinrainbow/json-schema/src/JsonSchema/Uri/Retrievers/FileGetContents.php b/vendor/justinrainbow/json-schema/src/JsonSchema/Uri/Retrievers/FileGetContents.php
new file mode 100644
index 0000000..60e13d1
--- /dev/null
+++ b/vendor/justinrainbow/json-schema/src/JsonSchema/Uri/Retrievers/FileGetContents.php
@@ -0,0 +1,82 @@
+<?php
+
+/*
+ * This file is part of the JsonSchema package.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace JsonSchema\Uri\Retrievers;
+
+use JsonSchema\Exception\ResourceNotFoundException;
+use JsonSchema\Validator;
+
+/**
+ * Tries to retrieve JSON schemas from a URI using file_get_contents()
+ * 
+ * @author Sander Coolen <sander@jibber.nl> 
+ */
+class FileGetContents extends AbstractRetriever
+{
+    protected $messageBody;
+    
+    /**
+     * {@inheritDoc}
+     * @see \JsonSchema\Uri\Retrievers\UriRetrieverInterface::retrieve()
+     */
+    public function retrieve($uri)
+    {
+        $context = stream_context_create(array(
+            'http' => array(
+                'method' => 'GET',
+                'header' => "Accept: " . Validator::SCHEMA_MEDIA_TYPE
+            )));
+        
+        $response = file_get_contents($uri);
+        if (false === $response) {
+            throw new ResourceNotFoundException('JSON schema not found at ' . $uri);
+        }
+        if ($response == ''
+            && substr($uri, 0, 7) == 'file://' && substr($uri, -1) == '/'
+        ) {
+            throw new ResourceNotFoundException('JSON schema not found at ' . $uri);
+        }
+
+        $this->messageBody = $response;
+        if (! empty($http_response_header)) {
+            $this->fetchContentType($http_response_header);
+        } else {
+            // Could be a "file://" url or something else - fake up the response
+            $this->contentType = null;
+        }
+        
+        return $this->messageBody;
+    }
+    
+    /**
+     * @param array $headers HTTP Response Headers
+     * @return boolean Whether the Content-Type header was found or not
+     */
+    private function fetchContentType(array $headers)
+    {
+        foreach ($headers as $header) {
+            if ($this->contentType = self::getContentTypeMatchInHeader($header)) {
+                return true;
+            }
+        }
+        
+        return false;
+    }
+    
+    /**
+     * @param string $header
+     * @return string|null
+     */
+    protected static function getContentTypeMatchInHeader($header)
+    {
+        if (0 < preg_match("/Content-Type:(\V*)/ims", $header, $match)) {
+            return trim($match[1]);
+        }
+    }
+}
diff --git a/vendor/justinrainbow/json-schema/src/JsonSchema/Uri/Retrievers/PredefinedArray.php b/vendor/justinrainbow/json-schema/src/JsonSchema/Uri/Retrievers/PredefinedArray.php
new file mode 100644
index 0000000..1ded1d3
--- /dev/null
+++ b/vendor/justinrainbow/json-schema/src/JsonSchema/Uri/Retrievers/PredefinedArray.php
@@ -0,0 +1,55 @@
+<?php
+
+namespace JsonSchema\Uri\Retrievers;
+
+use JsonSchema\Validator;
+use JsonSchema\Uri\Retrievers\UriRetrieverInterface;
+
+/**
+ * URI retrieved based on a predefined array of schemas
+ *
+ * @example
+ *
+ *      $retriever = new PredefinedArray(array(
+ *          'http://acme.com/schemas/person#'  => '{ ... }',
+ *          'http://acme.com/schemas/address#' => '{ ... }',
+ *      ))
+ *
+ *      $schema = $retriever->retrieve('http://acme.com/schemas/person#');
+ */
+class PredefinedArray extends AbstractRetriever
+{
+    /**
+     * Contains schemas as URI => JSON
+     * @var array
+     */
+    private $schemas;
+
+    /**
+     * Constructor
+     *
+     * @param  array  $schemas
+     * @param  string $contentType
+     */
+    public function __construct(array $schemas, $contentType = Validator::SCHEMA_MEDIA_TYPE)
+    {
+        $this->schemas     = $schemas;
+        $this->contentType = $contentType;
+    }
+    
+    /**
+     * {@inheritDoc}
+     * @see \JsonSchema\Uri\Retrievers\UriRetrieverInterface::retrieve()
+     */
+    public function retrieve($uri)
+    {
+        if (!array_key_exists($uri, $this->schemas)) {
+            throw new \JsonSchema\Exception\ResourceNotFoundException(sprintf(
+                'The JSON schema "%s" was not found.',
+                $uri
+            ));
+        }
+
+        return $this->schemas[$uri];
+    }
+}
\ No newline at end of file
diff --git a/vendor/justinrainbow/json-schema/src/JsonSchema/Uri/Retrievers/UriRetrieverInterface.php b/vendor/justinrainbow/json-schema/src/JsonSchema/Uri/Retrievers/UriRetrieverInterface.php
new file mode 100644
index 0000000..c324998
--- /dev/null
+++ b/vendor/justinrainbow/json-schema/src/JsonSchema/Uri/Retrievers/UriRetrieverInterface.php
@@ -0,0 +1,32 @@
+<?php
+
+/*
+ * This file is part of the JsonSchema package.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace JsonSchema\Uri\Retrievers;
+
+/**
+ * Interface for URI retrievers
+ * 
+ * @author Sander Coolen <sander@jibber.nl> 
+ */
+interface UriRetrieverInterface
+{
+    /**
+     * Retrieve a schema from the specified URI
+     * @param string $uri URI that resolves to a JSON schema
+     * @throws \JsonSchema\Exception\ResourceNotFoundException
+     * @return mixed string|null
+     */
+    public function retrieve($uri);
+    
+    /**
+     * Get media content type
+     * @return string
+     */
+    public function getContentType();
+}
\ No newline at end of file
diff --git a/vendor/justinrainbow/json-schema/src/JsonSchema/Uri/UriResolver.php b/vendor/justinrainbow/json-schema/src/JsonSchema/Uri/UriResolver.php
new file mode 100644
index 0000000..0b47035
--- /dev/null
+++ b/vendor/justinrainbow/json-schema/src/JsonSchema/Uri/UriResolver.php
@@ -0,0 +1,164 @@
+<?php
+
+/*
+ * This file is part of the JsonSchema package.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace JsonSchema\Uri;
+
+use JsonSchema\Exception\UriResolverException;
+
+/**
+ * Resolves JSON Schema URIs
+ * 
+ * @author Sander Coolen <sander@jibber.nl> 
+ */
+class UriResolver
+{
+    /**
+     * Parses a URI into five main components
+     * 
+     * @param string $uri
+     * @return array 
+     */
+    public function parse($uri)
+    {
+        preg_match('|^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?|', $uri, $match);
+
+        $components = array();
+        if (5 < count($match)) {
+            $components =  array(
+                'scheme'    => $match[2],
+                'authority' => $match[4],
+                'path'      => $match[5]
+            );
+        } 
+        if (7 < count($match)) {
+            $components['query'] = $match[7];
+        }
+        if (9 < count($match)) {
+            $components['fragment'] = $match[9];
+        }
+        
+        return $components;
+    }
+    
+    /**
+     * Builds a URI based on n array with the main components
+     * 
+     * @param array $components
+     * @return string 
+     */
+    public function generate(array $components)
+    {
+        $uri = $components['scheme'] . '://' 
+             . $components['authority']
+             . $components['path'];
+        
+        if (array_key_exists('query', $components)) {
+            $uri .= $components['query'];
+        }
+        if (array_key_exists('fragment', $components)) {
+            $uri .= '#' . $components['fragment'];
+        }
+        
+        return $uri;
+    }
+    
+    /**
+     * Resolves a URI
+     * 
+     * @param string $uri Absolute or relative
+     * @param type $baseUri Optional base URI
+     * @return string Absolute URI
+     */
+    public function resolve($uri, $baseUri = null)
+    {
+        if ($uri == '') {
+            return $baseUri;
+        }
+
+        $components = $this->parse($uri);
+        $path = $components['path'];
+        
+        if (! empty($components['scheme'])) {
+            return $uri;
+        }
+        $baseComponents = $this->parse($baseUri);
+        $basePath = $baseComponents['path'];
+        
+        $baseComponents['path'] = self::combineRelativePathWithBasePath($path, $basePath);
+        if (isset($components['fragment'])) {
+            $baseComponents['fragment'] = $components['fragment'];
+        }
+
+        return $this->generate($baseComponents);
+    }
+    
+    /**
+     * Tries to glue a relative path onto an absolute one
+     * 
+     * @param string $relativePath
+     * @param string $basePath
+     * @return string Merged path
+     * @throws UriResolverException 
+     */
+    public static function combineRelativePathWithBasePath($relativePath, $basePath)
+    {
+        $relativePath = self::normalizePath($relativePath);
+        if ($relativePath == '') {
+            return $basePath;
+        }
+        if ($relativePath{0} == '/') {
+            return $relativePath;
+        }
+
+        $basePathSegments = self::getPathSegments($basePath);
+        
+        preg_match('|^/?(\.\./(?:\./)*)*|', $relativePath, $match);
+        $numLevelUp = strlen($match[0]) /3 + 1;
+        if ($numLevelUp >= count($basePathSegments)) {
+            throw new UriResolverException(sprintf("Unable to resolve URI '%s' from base '%s'", $relativePath, $basePath));
+        }
+        $basePathSegments = array_slice($basePathSegments, 0, -$numLevelUp);
+        $path = preg_replace('|^/?(\.\./(\./)*)*|', '', $relativePath);
+
+        return implode('/', $basePathSegments) . '/' . $path;
+    }
+
+    /**
+     * Normalizes a URI path component by removing dot-slash and double slashes
+     *
+     * @param string $path
+     * @return string
+     */
+    private static function normalizePath($path)
+    {
+        $path = preg_replace('|((?<!\.)\./)*|', '', $path);
+        $path = preg_replace('|//|', '/', $path);
+        
+        return $path;
+    }
+    
+    /**
+     * @return array
+     */
+    private static function getPathSegments($path) {
+        
+        return explode('/', $path);
+    }
+    
+    /**
+     * @param string $uri
+     * @return boolean 
+     */
+    public function isValid($uri)
+    {
+        $components = $this->parse($uri);
+        
+        return !empty($components);
+    }
+}
diff --git a/vendor/justinrainbow/json-schema/src/JsonSchema/Uri/UriRetriever.php b/vendor/justinrainbow/json-schema/src/JsonSchema/Uri/UriRetriever.php
new file mode 100644
index 0000000..b4bf050
--- /dev/null
+++ b/vendor/justinrainbow/json-schema/src/JsonSchema/Uri/UriRetriever.php
@@ -0,0 +1,320 @@
+<?php
+
+/*
+ * This file is part of the JsonSchema package.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace JsonSchema\Uri;
+
+use JsonSchema\Uri\Retrievers\FileGetContents;
+use JsonSchema\Uri\Retrievers\UriRetrieverInterface;
+use JsonSchema\Validator;
+use JsonSchema\Exception\InvalidSchemaMediaTypeException;
+use JsonSchema\Exception\JsonDecodingException;
+
+/**
+ * Retrieves JSON Schema URIs
+ *
+ * @author Tyler Akins <fidian@rumkin.com>
+ */
+class UriRetriever
+{
+    protected $uriRetriever = null;
+
+    /**
+     * Guarantee the correct media type was encountered
+     *
+     * @throws InvalidSchemaMediaTypeException
+     */
+    public function confirmMediaType($uriRetriever, $uri)
+    {
+        $contentType = $uriRetriever->getContentType();
+
+        if (is_null($contentType)) {
+            // Well, we didn't get an invalid one
+            return;
+        }
+
+        if (Validator::SCHEMA_MEDIA_TYPE === $contentType) {
+            return;
+        }
+
+        if (substr($uri, 0, 23) == 'http://json-schema.org/') {
+            //HACK; they deliver broken content types
+            return true;
+        }
+
+        throw new InvalidSchemaMediaTypeException(sprintf('Media type %s expected', Validator::SCHEMA_MEDIA_TYPE));
+    }
+
+    /**
+     * Get a URI Retriever
+     *
+     * If none is specified, sets a default FileGetContents retriever and
+     * returns that object.
+     *
+     * @return UriRetrieverInterface
+     */
+    public function getUriRetriever()
+    {
+        if (is_null($this->uriRetriever)) {
+            $this->setUriRetriever(new FileGetContents);
+        }
+
+        return $this->uriRetriever;
+    }
+
+    /**
+     * Resolve a schema based on pointer
+     *
+     * URIs can have a fragment at the end in the format of
+     * #/path/to/object and we are to look up the 'path' property of
+     * the first object then the 'to' and 'object' properties.
+     *
+     * @param object $jsonSchema JSON Schema contents
+     * @param string $uri JSON Schema URI
+     * @return object JSON Schema after walking down the fragment pieces
+     *
+     * @throws \JsonSchema\Exception\ResourceNotFoundException
+     */
+    public function resolvePointer($jsonSchema, $uri)
+    {
+        $resolver = new UriResolver();
+        $parsed = $resolver->parse($uri);
+        if (empty($parsed['fragment']))  {
+            return $jsonSchema;
+        }
+
+        $path = explode('/', $parsed['fragment']);
+        while ($path) {
+            $pathElement = array_shift($path);
+            if (! empty($pathElement)) {
+                $pathElement = str_replace('~1', '/', $pathElement);
+                $pathElement = str_replace('~0', '~', $pathElement);
+                if (! empty($jsonSchema->$pathElement)) {
+                    $jsonSchema = $jsonSchema->$pathElement;
+                } else {
+                    throw new \JsonSchema\Exception\ResourceNotFoundException(
+                        'Fragment "' . $parsed['fragment'] . '" not found'
+                        . ' in ' . $uri
+                    );
+                }
+
+                if (! is_object($jsonSchema)) {
+                    throw new \JsonSchema\Exception\ResourceNotFoundException(
+                        'Fragment part "' . $pathElement . '" is no object '
+                        . ' in ' . $uri
+                    );
+                }
+            }
+        }
+
+        return $jsonSchema;
+    }
+
+    /**
+     * Retrieve a URI
+     *
+     * @param string $uri JSON Schema URI
+     * @return object JSON Schema contents
+     * @throws InvalidSchemaMediaType for invalid media tyeps
+     */
+    public function retrieve($uri, $baseUri = null)
+    {
+        $resolver = new UriResolver();
+        $resolvedUri = $fetchUri = $resolver->resolve($uri, $baseUri);
+
+        //fetch URL without #fragment
+        $arParts = $resolver->parse($resolvedUri);
+        if (isset($arParts['fragment'])) {
+            unset($arParts['fragment']);
+            $fetchUri = $resolver->generate($arParts);
+        }
+
+        $jsonSchema = $this->loadSchema($fetchUri);
+
+        // Use the JSON pointer if specified
+        $jsonSchema = $this->resolvePointer($jsonSchema, $resolvedUri);
+        $jsonSchema->id = $resolvedUri;
+
+        return $jsonSchema;
+    }
+
+    /**
+     * Fetch a schema from the given URI, json-decode it and return it.
+     * Caches schema objects.
+     *
+     * @param string $fetchUri Absolute URI
+     *
+     * @return object JSON schema object
+     */
+    protected function loadSchema($fetchUri)
+    {
+        if (isset($this->schemaCache[$fetchUri])) {
+            return $this->schemaCache[$fetchUri];
+        }
+
+        $uriRetriever = $this->getUriRetriever();
+        $contents = $this->uriRetriever->retrieve($fetchUri);
+        $this->confirmMediaType($uriRetriever, $fetchUri);
+        $jsonSchema = json_decode($contents);
+
+        if (JSON_ERROR_NONE < $error = json_last_error()) {
+            throw new JsonDecodingException($error);
+        }
+
+        $this->schemaCache[$fetchUri] = $jsonSchema;
+        return $jsonSchema;
+    }
+
+    /**
+     * Set the URI Retriever
+     *
+     * @param UriRetrieverInterface $uriRetriever
+     * @return $this for chaining
+     */
+    public function setUriRetriever(UriRetrieverInterface $uriRetriever)
+    {
+        $this->uriRetriever = $uriRetriever;
+
+        return $this;
+    }
+
+    /**
+     * Parses a URI into five main components
+     *
+     * @param string $uri
+     * @return array
+     */
+    public function parse($uri)
+    {
+        preg_match('|^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?|', $uri, $match);
+
+        $components = array();
+        if (5 < count($match)) {
+            $components =  array(
+                'scheme'    => $match[2],
+                'authority' => $match[4],
+                'path'      => $match[5]
+            );
+        }
+
+        if (7 < count($match)) {
+            $components['query'] = $match[7];
+        }
+
+        if (9 < count($match)) {
+            $components['fragment'] = $match[9];
+        }
+
+        return $components;
+    }
+
+    /**
+     * Builds a URI based on n array with the main components
+     *
+     * @param array $components
+     * @return string
+     */
+    public function generate(array $components)
+    {
+        $uri = $components['scheme'] . '://'
+             . $components['authority']
+             . $components['path'];
+
+        if (array_key_exists('query', $components)) {
+            $uri .= $components['query'];
+        }
+
+        if (array_key_exists('fragment', $components)) {
+            $uri .= $components['fragment'];
+        }
+
+        return $uri;
+    }
+
+    /**
+     * Resolves a URI
+     *
+     * @param string $uri Absolute or relative
+     * @param type $baseUri Optional base URI
+     * @return string
+     */
+    public function resolve($uri, $baseUri = null)
+    {
+        $components = $this->parse($uri);
+        $path = $components['path'];
+
+        if ((array_key_exists('scheme', $components)) && ('http' === $components['scheme'])) {
+            return $uri;
+        }
+
+        $baseComponents = $this->parse($baseUri);
+        $basePath = $baseComponents['path'];
+
+        $baseComponents['path'] = self::combineRelativePathWithBasePath($path, $basePath);
+
+        return $this->generate($baseComponents);
+    }
+
+    /**
+     * Tries to glue a relative path onto an absolute one
+     *
+     * @param string $relativePath
+     * @param string $basePath
+     * @return string Merged path
+     * @throws UriResolverException
+     */
+    private static function combineRelativePathWithBasePath($relativePath, $basePath)
+    {
+        $relativePath = self::normalizePath($relativePath);
+        $basePathSegments = self::getPathSegments($basePath);
+
+        preg_match('|^/?(\.\./(?:\./)*)*|', $relativePath, $match);
+        $numLevelUp = strlen($match[0]) /3 + 1;
+        if ($numLevelUp >= count($basePathSegments)) {
+            throw new \JsonSchema\Exception\UriResolverException(sprintf("Unable to resolve URI '%s' from base '%s'", $relativePath, $basePath));
+        }
+
+        $basePathSegments = array_slice($basePathSegments, 0, -$numLevelUp);
+        $path = preg_replace('|^/?(\.\./(\./)*)*|', '', $relativePath);
+
+        return implode('/', $basePathSegments) . '/' . $path;
+    }
+
+    /**
+     * Normalizes a URI path component by removing dot-slash and double slashes
+     *
+     * @param string $path
+     * @return string
+     */
+    private static function normalizePath($path)
+    {
+        $path = preg_replace('|((?<!\.)\./)*|', '', $path);
+        $path = preg_replace('|//|', '/', $path);
+
+        return $path;
+    }
+
+    /**
+     * @return array
+     */
+    private static function getPathSegments($path)
+    {
+        return explode('/', $path);
+    }
+
+    /**
+     * @param string $uri
+     * @return boolean
+     */
+    public function isValid($uri)
+    {
+        $components = $this->parse($uri);
+
+        return !empty($components);
+    }
+}
diff --git a/vendor/justinrainbow/json-schema/src/JsonSchema/Validator.php b/vendor/justinrainbow/json-schema/src/JsonSchema/Validator.php
index 9d49e45..70d4bfb 100644
--- a/vendor/justinrainbow/json-schema/src/JsonSchema/Validator.php
+++ b/vendor/justinrainbow/json-schema/src/JsonSchema/Validator.php
@@ -1,30 +1,45 @@
 <?php
 
+/*
+ * This file is part of the JsonSchema package.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
 namespace JsonSchema;
 
 use JsonSchema\Constraints\Schema;
 use JsonSchema\Constraints\Constraint;
 
+use JsonSchema\Exception\InvalidSchemaMediaTypeException;
+use JsonSchema\Exception\JsonDecodingException;
+
+use JsonSchema\Uri\Retrievers\UriRetrieverInterface;
+
 /**
  * A JsonSchema Constraint
  *
- * @see README.md
  * @author Robert Schönthal <seroscho@googlemail.com>
  * @author Bruno Prieto Reis <bruno.p.reis@gmail.com>
+ * @see    README.md
  */
 class Validator extends Constraint
 {
+    const SCHEMA_MEDIA_TYPE = 'application/schema+json';
+
     /**
-     * validates the given data against the schema and returns an object containing the results
+     * Validates the given data against the schema and returns an object containing the results
      * Both the php object and the schema are supposed to be a result of a json_decode call.
      * The validation works as defined by the schema proposal in http://json-schema.org
      *
-     * {inheritDoc}
+     * {@inheritDoc}
      */
-    function check($value, $schema = null, $path = null, $i = null)
+    public function check($value, $schema = null, $path = null, $i = null)
     {
-        $validator = new Schema($this->checkMode);
+        $validator = new Schema($this->checkMode, $this->uriRetriever);
         $validator->check($value, $schema);
-        $this->addErrors($validator->getErrors());
+
+        $this->addErrors(array_unique($validator->getErrors(), SORT_REGULAR));
     }
-}
\ No newline at end of file
+}
diff --git a/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/AdditionalPropertiesTest.php b/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/AdditionalPropertiesTest.php
deleted file mode 100644
index bc104ea..0000000
--- a/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/AdditionalPropertiesTest.php
+++ /dev/null
@@ -1,119 +0,0 @@
-<?php
-
-namespace JsonSchema\Tests;
-
-use JsonSchema\Validator;
-
-class AdditionalPropertiesTest extends BaseTestCase
-{
-    public function getInvalidTests()
-    {
-        return array(
-            array(
-                '{
-                  "prop":"1",
-                  "additionalProp":"2"
-                }',
-                '{
-                  "type":"object",
-                  "properties":{
-                    "prop":{"type":"string"}
-                  },
-                  "additionalProperties": false
-                }',
-                null,
-                array(
-                    array(
-                        'property' => '',
-                        'message'  => 'The property additionalProp is not defined and the definition does not allow additional properties'
-                    )
-                )
-            ),
-            array(
-                '{
-                  "prop":"1",
-                  "additionalProp":"2"
-                }',
-                '{
-                  "type":"object",
-                  "properties":{
-                    "prop":{"type":"string"}
-                  },
-                  "additionalProperties": false
-                }',
-                Validator::CHECK_MODE_TYPE_CAST
-            ),
-            array(
-                '{
-                  "prop":"1",
-                  "additionalProp":2
-                }',
-                '{
-                  "type":"object",
-                  "properties":{
-                    "prop":{"type":"string"}
-                  },
-                  "additionalProperties": {"type":"string"}
-                }'
-            ),
-            array(
-                '{
-                  "prop":"1",
-                  "additionalProp":2
-                }',
-                '{
-                  "type":"object",
-                  "properties":{
-                    "prop":{"type":"string"}
-                  },
-                  "additionalProperties": {"type":"string"}
-                }',
-                Validator::CHECK_MODE_TYPE_CAST
-            )
-        );
-    }
-
-    public function getValidTests()
-    {
-        return array(
-            array(
-                '{
-                  "prop":"1",
-                  "additionalProp":"2"
-                }',
-                '{
-                  "type":"object",
-                  "properties":{
-                    "prop":{"type":"string"}
-                  }
-                }'
-            ),
-            array(
-                '{
-                  "prop":"1",
-                  "additionalProp":"2"
-                }',
-                '{
-                  "type":"object",
-                  "properties":{
-                    "prop":{"type":"string"}
-                  }
-                }',
-                Validator::CHECK_MODE_TYPE_CAST
-            ),
-            array(
-                '{
-                  "prop":"1",
-                  "additionalProp":"2"
-                }',
-                '{
-                  "type":"object",
-                  "properties":{
-                    "prop":{"type":"string"}
-                  },
-                  "additionalProperties": {"type":"string"}
-                }'
-            )
-        );
-    }
-}
diff --git a/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/ArraysTest.php b/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/ArraysTest.php
deleted file mode 100644
index 83fd82f..0000000
--- a/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/ArraysTest.php
+++ /dev/null
@@ -1,72 +0,0 @@
-<?php
-
-namespace JsonSchema\Tests;
-
-class ArraysTest extends BaseTestCase
-{
-    public function getInvalidTests()
-    {
-        return array(
-            array(
-                '{
-                  "array":[1,2,"a"]
-                }',
-                '{
-                  "type":"object",
-                  "properties":{
-                    "array":{
-                      "type":"array",
-                      "items":{"type":"number"}
-                    }
-                  }
-                }'
-            ),
-            array(
-                '{
-                  "array":[1,2,null]
-                }',
-                '{
-                  "type":"object",
-                  "properties":{
-                    "array":{
-                      "type":"array",
-                      "items":{"type":["number","boolean"]}
-                    }
-                  }
-                }'
-            )
-        );
-    }
-
-    public function getValidTests()
-    {
-        return array(
-            array(
-                '{
-                  "array":[1,2,"a"]
-                }',
-                '{
-                  "type":"object",
-                  "properties":{
-                    "array":{"type":"array"}
-                  }
-                }'
-            ),
-            array(
-                '{
-                  "array":[1,2,"a"]
-                }',
-                '{
-                  "type":"object",
-                  "properties":{
-                    "array":{
-                      "type":"array",
-                      "items":{"type":"number"},
-                      "additionalItems": {"type": "string"}
-                    }
-                  }
-                }'
-            ),
-        );
-    }
-}
diff --git a/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/BaseTestCase.php b/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/BaseTestCase.php
deleted file mode 100644
index b4b784e..0000000
--- a/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/BaseTestCase.php
+++ /dev/null
@@ -1,38 +0,0 @@
-<?php
-
-namespace JsonSchema\Tests;
-
-use JsonSchema\Validator;
-
-abstract class BaseTestCase extends \PHPUnit_Framework_TestCase
-{
-    /**
-     * @dataProvider getInvalidTests
-     */
-    public function testInvalidCases($input, $schema, $checkMode = Validator::CHECK_MODE_NORMAL, $errors = array())
-    {
-        $validator = new Validator($checkMode);
-
-        $validator->check(json_decode($input), json_decode($schema));
-
-        if (array() !== $errors) {
-            $this->assertEquals($errors, $validator->getErrors(), print_r($validator->getErrors(),true));
-        }
-        $this->assertFalse($validator->isValid(), print_r($validator->getErrors(), true));
-    }
-
-    /**
-     * @dataProvider getValidTests
-     */
-    public function testValidCases($input, $schema, $checkMode = Validator::CHECK_MODE_NORMAL)
-    {
-        $validator = new Validator($checkMode);
-
-        $validator->check(json_decode($input), json_decode($schema));
-        $this->assertTrue($validator->isValid(), print_r($validator->getErrors(), true));
-    }
-
-    abstract public function getValidTests();
-
-    abstract public function getInvalidTests();
-}
\ No newline at end of file
diff --git a/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/BasicTypesTest.php b/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/BasicTypesTest.php
deleted file mode 100644
index c226466..0000000
--- a/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/BasicTypesTest.php
+++ /dev/null
@@ -1,80 +0,0 @@
-<?php
-
-namespace JsonSchema\Tests;
-
-class BasicTypesTest extends BaseTestCase
-{
-    public function getInvalidTests()
-    {
-        return array(
-            array(
-                '{
-                  "string":null,
-                  "number":null,
-                  "integer":null,
-                  "boolean":null,
-                  "object":null,
-                  "array":null,
-                  "null":1
-                }',
-                '{
-                  "type":"object",
-                  "properties":{
-                    "string":{"type":"string"},
-                    "number":{"type":"number"},
-                    "integer":{"type":"integer"},
-                    "boolean":{"type":"boolean"},
-                    "object":{"type":"object"},
-                    "array":{"type":"array"},
-                    "null":{"type":"null"}
-                  },
-                  "additionalProperties":false
-                }'
-            )
-        );
-    }
-
-    public function getValidTests()
-    {
-        return array(
-            array(
-                '{
-                  "string":"string test",
-                  "number":1,
-                  "integer":1,
-                  "boolean":true,
-                  "object":{},
-                  "array":[],
-                  "null":null,
-                  "any": "string",
-                  "any1": 2.6,
-                  "any2": 4,
-                  "any3": false,
-                  "any4": {},
-                  "any5": [],
-                  "any6": null
-                }',
-                '{
-                  "type":"object",
-                  "properties":{
-                    "string":{"type":"string"},
-                    "number":{"type":"number"},
-                    "integer":{"type":"integer"},
-                    "boolean":{"type":"boolean"},
-                    "object":{"type":"object"},
-                    "array":{"type":"array"},
-                    "null":{"type":"null"},
-                    "any": {"type":"any"},
-                    "any1": {"type":"any"},
-                    "any2": {"type":"any"},
-                    "any3": {"type":"any"},
-                    "any4": {"type":"any"},
-                    "any5": {"type":"any"},
-                    "any6": {"type":"any"}
-                  },
-                  "additionalProperties":false
-                }'
-            )
-        );
-    }
-}
diff --git a/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/Constraints/AdditionalPropertiesTest.php b/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/Constraints/AdditionalPropertiesTest.php
new file mode 100644
index 0000000..9df7ae3
--- /dev/null
+++ b/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/Constraints/AdditionalPropertiesTest.php
@@ -0,0 +1,143 @@
+<?php
+
+/*
+ * This file is part of the JsonSchema package.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace JsonSchema\Tests\Constraints;
+
+use JsonSchema\Validator;
+
+class AdditionalPropertiesTest extends BaseTestCase
+{
+    public function getInvalidTests()
+    {
+        return array(
+            array(
+                '{
+                  "prop":"1",
+                  "patternProp":"3",
+                  "additionalProp":"2"
+                }',
+                '{
+                  "type":"object",
+                  "properties":{
+                    "prop":{"type":"string"}
+                  },
+                  "patternProperties":{
+                      "^patternProp$":{"type":"string"}
+                  },
+                  "additionalProperties": false
+                }',
+                null,
+                array(
+                    array(
+                        'property' => '',
+                        'message'  => 'The property additionalProp is not defined and the definition does not allow additional properties'
+                    )
+                )
+            ),
+            array(
+                '{
+                  "prop":"1",
+                  "additionalProp":"2"
+                }',
+                '{
+                  "type":"object",
+                  "properties":{
+                    "prop":{"type":"string"}
+                  },
+                  "additionalProperties": false
+                }',
+                Validator::CHECK_MODE_TYPE_CAST
+            ),
+            array(
+                '{
+                  "prop":"1",
+                  "additionalProp":2
+                }',
+                '{
+                  "type":"object",
+                  "properties":{
+                    "prop":{"type":"string"}
+                  },
+                  "additionalProperties": {"type":"string"}
+                }'
+            ),
+            array(
+                '{
+                  "prop":"1",
+                  "additionalProp":2
+                }',
+                '{
+                  "type":"object",
+                  "properties":{
+                    "prop":{"type":"string"}
+                  },
+                  "additionalProperties": {"type":"string"}
+                }',
+                Validator::CHECK_MODE_TYPE_CAST
+            )
+        );
+    }
+
+    public function getValidTests()
+    {
+        return array(
+            array(
+                '{
+                  "prop":"1",
+                  "additionalProp":"2"
+                }',
+                '{
+                  "type":"object",
+                  "properties":{
+                    "prop":{"type":"string"}
+                  }
+                }'
+            ),
+            array(
+                '{
+                  "prop":"1",
+                  "additionalProp":"2"
+                }',
+                '{
+                  "type":"object",
+                  "properties":{
+                    "prop":{"type":"string"}
+                  }
+                }',
+                Validator::CHECK_MODE_TYPE_CAST
+            ),
+            array(
+                '{
+                  "prop":"1",
+                  "additionalProp":"2"
+                }',
+                '{
+                  "type":"object",
+                  "properties":{
+                    "prop":{"type":"string"}
+                  },
+                  "additionalProperties": {"type":"string"}
+                }'
+            ),
+            array(
+                '{
+                  "prop":"1",
+                  "additionalProp":[]
+                }',
+                '{
+                  "type":"object",
+                  "properties":{
+                    "prop":{"type":"string"}
+                  },
+                  "additionalProperties": true
+                }'
+            )
+        );
+    }
+}
diff --git a/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/Constraints/ArraysTest.php b/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/Constraints/ArraysTest.php
new file mode 100644
index 0000000..1fef244
--- /dev/null
+++ b/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/Constraints/ArraysTest.php
@@ -0,0 +1,156 @@
+<?php
+
+/*
+ * This file is part of the JsonSchema package.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace JsonSchema\Tests\Constraints;
+
+class ArraysTest extends BaseTestCase
+{
+    public function getInvalidTests()
+    {
+        return array(
+            array(
+                '{
+                  "array":[1,2,"a"]
+                }',
+                '{
+                  "type":"object",
+                  "properties":{
+                    "array":{
+                      "type":"array",
+                      "items":{"type":"number"}
+                    }
+                  }
+                }'
+            ),
+            array(
+                '{
+                  "array":[1,2,"a"]
+                }',
+                '{
+                  "type":"object",
+                  "properties":{
+                    "array":{
+                      "type":"array",
+                      "items":{"type":"number"},
+                      "additionalItems":{"type":"boolean"}
+                    }
+                  }
+                }'
+            ),
+            array(
+                '{
+                  "array":[1,2,null]
+                }',
+                '{
+                  "type":"object",
+                  "properties":{
+                    "array":{
+                      "type":"array",
+                      "items":{"type":["number","boolean"]}
+                    }
+                  }
+                }'
+            ),
+            array(
+                '{"data": [1, 2, 3, "foo"]}',
+                '{
+                    "type": "object",
+                    "properties": {
+                        "data": {
+                            "type": "array",
+                            "items": [],
+                            "additionalItems": {"type": "integer"}
+                        }
+                    }
+                }'
+            )
+        );
+    }
+
+    public function getValidTests()
+    {
+        return array(
+            array(
+                '{
+                  "array":[1,2,"a"]
+                }',
+                '{
+                  "type":"object",
+                  "properties":{
+                    "array":{"type":"array"}
+                  }
+                }'
+            ),
+            array(
+                '{
+                  "array":[1,2,"a"]
+                }',
+                '{
+                  "type":"object",
+                  "properties":{
+                    "array":{
+                      "type":"array",
+                      "items":{"type":"number"},
+                      "additionalItems": {"type": "string"}
+                    }
+                  }
+                }'
+            ),
+            array(
+                '{"data": [1, 2, 3, 4]}',
+                '{
+                    "type": "object",
+                    "properties": {
+                        "data": {
+                            "type": "array",
+                            "items": [],
+                            "additionalItems": {"type": "integer"}
+                        }
+                    }
+                }'
+            ),
+            array(
+                '{"data": [1, "foo", false]}',
+                '{
+                    "type": "object",
+                    "properties": {
+                        "data": {
+                            "type": "array",
+                            "items": []
+                        }
+                    }
+                }'
+            ),
+            array(
+                '{"data": [1, "foo", false]}',
+                '{
+                    "type": "object",
+                    "properties": {
+                        "data": {
+                            "type": "array",
+                            "items": {}
+                        }
+                    }
+                }'
+            ),
+            array(
+                '{"data": [1, 2, 3, 4, 5]}',
+                '{
+                    "type": "object",
+                    "properties": {
+                        "data": {
+                            "type": "array",
+                            "additionalItems": false
+                        }
+                    }
+                }'
+            )
+        );
+    }
+}
diff --git a/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/Constraints/BaseTestCase.php b/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/Constraints/BaseTestCase.php
new file mode 100644
index 0000000..fe35178
--- /dev/null
+++ b/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/Constraints/BaseTestCase.php
@@ -0,0 +1,45 @@
+<?php
+
+/*
+ * This file is part of the JsonSchema package.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace JsonSchema\Tests\Constraints;
+
+use JsonSchema\Validator;
+
+abstract class BaseTestCase extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * @dataProvider getInvalidTests
+     */
+    public function testInvalidCases($input, $schema, $checkMode = Validator::CHECK_MODE_NORMAL, $errors = array())
+    {
+        $validator = new Validator($checkMode);
+
+        $validator->check(json_decode($input), json_decode($schema));
+
+        if (array() !== $errors) {
+            $this->assertEquals($errors, $validator->getErrors(), print_r($validator->getErrors(),true));
+        }
+        $this->assertFalse($validator->isValid(), print_r($validator->getErrors(), true));
+    }
+
+    /**
+     * @dataProvider getValidTests
+     */
+    public function testValidCases($input, $schema, $checkMode = Validator::CHECK_MODE_NORMAL)
+    {
+        $validator = new Validator($checkMode);
+
+        $validator->check(json_decode($input), json_decode($schema));
+        $this->assertTrue($validator->isValid(), print_r($validator->getErrors(), true));
+    }
+
+    abstract public function getValidTests();
+
+    abstract public function getInvalidTests();
+}
\ No newline at end of file
diff --git a/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/Constraints/BasicTypesTest.php b/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/Constraints/BasicTypesTest.php
new file mode 100644
index 0000000..7daa43a
--- /dev/null
+++ b/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/Constraints/BasicTypesTest.php
@@ -0,0 +1,147 @@
+<?php
+
+/*
+ * This file is part of the JsonSchema package.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace JsonSchema\Tests\Constraints;
+
+class BasicTypesTest extends BaseTestCase
+{
+    public function getInvalidTests()
+    {
+        return array(
+            array(
+                '{
+                  "string":null
+                }',
+                '{
+                  "type":"object",
+                  "properties": {
+                    "string":{"type":"string"}
+                  },
+                  "additionalProperties":false
+                }'
+            ),
+            array(
+                '{
+                  "number":null
+                }',
+                '{
+                  "type":"object",
+                  "properties": {
+                    "number":{"type":"number"}
+                  },
+                  "additionalProperties":false
+                }'
+            ),
+            array(
+                '{
+                  "integer":null
+                }',
+                '{
+                  "type":"object",
+                  "properties": {
+                    "integer":{"type":"integer"}
+                  },
+                  "additionalProperties":false
+                }'
+            ),
+            array(
+                '{
+                  "boolean":null
+                }',
+                '{
+                  "type":"object",
+                  "properties": {
+                    "boolean":{"type":"boolean"}
+                  },
+                  "additionalProperties":false
+                }'
+            ),
+            array(
+                '{
+                  "object":null
+                }',
+                '{
+                  "type":"object",
+                  "properties": {
+                    "object":{"type":"object"}
+                  },
+                  "additionalProperties":false
+                }'
+            ),
+            array(
+                '{
+                  "array":null
+                }',
+                '{
+                  "type":"object",
+                  "properties": {
+                    "array":{"type":"array"}
+                  },
+                  "additionalProperties":false
+                }'
+            ),
+            array(
+                '{
+                  "null":1
+                }',
+                '{
+                  "type":"object",
+                  "properties": {
+                    "null":{"type":"null"}
+                  },
+                  "additionalProperties":false
+                }'
+            )
+        );
+    }
+
+    public function getValidTests()
+    {
+        return array(
+            array(
+                '{
+                  "string":"string test",
+                  "number":1,
+                  "integer":1,
+                  "boolean":true,
+                  "object":{},
+                  "array":[],
+                  "null":null,
+                  "any": "string",
+                  "any1": 2.6,
+                  "any2": 4,
+                  "any3": false,
+                  "any4": {},
+                  "any5": [],
+                  "any6": null
+                }',
+                '{
+                  "type":"object",
+                  "properties":{
+                    "string":{"type":"string"},
+                    "number":{"type":"number"},
+                    "integer":{"type":"integer"},
+                    "boolean":{"type":"boolean"},
+                    "object":{"type":"object"},
+                    "array":{"type":"array"},
+                    "null":{"type":"null"},
+                    "any": {"type":"any"},
+                    "any1": {"type":"any"},
+                    "any2": {"type":"any"},
+                    "any3": {"type":"any"},
+                    "any4": {"type":"any"},
+                    "any5": {"type":"any"},
+                    "any6": {"type":"any"}
+                  },
+                  "additionalProperties":false
+                }'
+            )
+        );
+    }
+}
diff --git a/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/Constraints/DependenciesTest.php b/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/Constraints/DependenciesTest.php
new file mode 100644
index 0000000..daf9177
--- /dev/null
+++ b/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/Constraints/DependenciesTest.php
@@ -0,0 +1,148 @@
+<?php
+
+/*
+ * This file is part of the JsonSchema package.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace JsonSchema\Tests\Constraints;
+
+class DependenciesTest extends BaseTestCase
+{
+    public function getInvalidTests()
+    {
+        return array(
+            array(
+                '{"bar": 1}',
+                '{
+                    "dependencies": {"bar": "foo"}
+                }'
+            ),
+            array(
+                '{"bar": 1}',
+                '{
+                    "dependencies": {"bar": ["foo"]}
+                }'
+            ),
+            array(
+                '{"bar": 1, "foo": 1}',
+                '{
+                    "dependencies": {"bar": ["foo", "baz"]}
+                }'
+            ),
+            array(
+                '{"bar": 1, "foo": 1}',
+                '{
+                    "dependencies": {"bar": {
+                        "properties": {
+                            "foo": {"type": "string"}
+                        }
+                    }}
+                }'
+            ),
+            array(
+                '{"bar": 1}',
+                '{
+                    "dependencies": {"bar": {
+                        "properties": {
+                            "foo": {"type": "integer", "required": true}
+                        }
+                    }}
+                }'
+            ),
+            array(
+                '{"bar": 1}',
+                '{
+                    "dependencies": {"bar": {
+                        "properties": {
+                            "foo": {"type": "integer"}
+                        },
+                        "required": ["foo"]
+                    }}
+                }'
+            ),
+            array(
+                '{"bar": true, "foo": "ick"}',
+                '{
+                    "dependencies": {"bar": {
+                        "properties": {
+                            "bar": {"type": "integer"},
+                            "foo": {"type": "integer"}
+                        }
+                    }}
+                }'
+            )
+        );
+    }
+
+    public function getValidTests()
+    {
+        return array(
+            array(
+                '{}',
+                '{
+                    "dependencies": {"bar": "foo"}
+                }'
+            ),
+            array(
+                '{"foo": 1}',
+                '{
+                    "dependencies": {"bar": "foo"}
+                }'
+            ),
+            array(
+                '"foo"',
+                '{
+                    "dependencies": {"bar": "foo"}
+                }'
+            ),
+            array(
+                '{"bar": 1, "foo": 1}',
+                '{
+                    "dependencies": {"bar": "foo"}
+                }'
+            ),
+            array(
+                '{"bar": 1, "foo": 1, "baz": 1}',
+                '{
+                    "dependencies": {"bar": ["foo", "baz"]}
+                }'
+            ),
+            array(
+                '{}',
+                '{
+                    "dependencies": {"bar": ["foo", "baz"]}
+                }'
+            ),
+            array(
+                '{"foo": 1, "baz": 1}',
+                '{
+                    "dependencies": {"bar": ["foo", "baz"]}
+                }'
+            ),
+            array(
+                '{"bar": 1}',
+                '{
+                    "dependencies": {"bar": {
+                        "properties": {
+                            "foo": {"type": "integer"}
+                        }
+                    }}
+                }'
+            ),
+            array(
+                '{"bar": 1, "foo": 1}',
+                '{
+                    "dependencies": {"bar": {
+                        "properties": {
+                            "bar": {"type": "integer"},
+                            "foo": {"type": "integer"}
+                        }
+                    }}
+                }'
+            )
+        );
+    }
+}
\ No newline at end of file
diff --git a/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/Constraints/DisallowTest.php b/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/Constraints/DisallowTest.php
new file mode 100644
index 0000000..07446d9
--- /dev/null
+++ b/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/Constraints/DisallowTest.php
@@ -0,0 +1,162 @@
+<?php
+
+/*
+ * This file is part of the JsonSchema package.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace JsonSchema\Tests\Constraints;
+
+class DisallowTest extends BaseTestCase
+{
+    public function getInvalidTests()
+    {
+        return array(
+            array(
+                '{
+                  "value":"The xpto is weird"
+                }',
+                '{
+                  "type":"object",
+                  "properties":{
+                    "value":{
+                      "type":"any",
+                      "disallow":{"type":"string","pattern":"xpto"}
+                    }
+                  }
+                }'
+            ),
+            array(
+                '{
+                  "value":null
+                }',
+                '{
+                  "type":"object",
+                  "properties":{
+                    "value":{
+                      "type":"any",
+                      "disallow":{"type":"null"}
+                    }
+                  }
+                }'
+            ),
+            array(
+                '{"value": 1}',
+                '{
+                    "type": "object",
+                    "properties": {
+                        "value": {"type": "any", "disallow": "integer"}
+                    }
+                }'
+            ),
+            array(
+                '{"value": true}',
+                '{
+                    "type": "object",
+                    "properties": {
+                        "value": {"type": "any", "disallow": ["integer", "boolean"]}
+                    }
+                }'
+            ),
+            array(
+                '{"value": "foo"}',
+                '{
+                    "type": "object",
+                    "properties": {
+                        "value": {
+                            "type": "any",
+                            "disallow":
+                                ["string", {
+                                    "type": "object",
+                                    "properties": {
+                                        "foo": {"type": "string"}
+                                    }
+                                }]
+                        }
+                    }
+                }'
+            ),
+            array(
+                '{"value": {"foo": "bar"}}',
+                '{
+                    "type": "object",
+                    "properties": {
+                        "value": {
+                            "type": "any",
+                            "disallow":
+                                ["string", {
+                                    "type": "object",
+                                    "properties": {
+                                        "foo": {"type": "string"}
+                                    }
+                                }]
+                        }
+                    }
+                }'
+            )
+        );
+    }
+
+    public function getValidTests()
+    {
+        return array(
+            array(
+                '{
+                  "value":"The xpto is weird"
+                }',
+                '{
+                  "type":"object",
+                  "properties":{
+                    "value":{
+                      "type":"any",
+                      "disallow":{"type":"string","pattern":"^xpto"}
+                    }
+                  }
+                }'
+            ),
+            array(
+                '{
+                  "value":1
+                }',
+                '{
+                  "type":"object",
+                  "properties":{
+                    "value":{
+                      "type":"any",
+                      "disallow":{"type":"null"}
+                    }
+                  }
+                }'
+            ),
+            array(
+                '{"value": {"foo": 1}}',
+                '{
+                    "type": "object",
+                    "properties": {
+                        "value": {
+                            "type": "any",
+                            "disallow":
+                                ["string", {
+                                    "type": "object",
+                                    "properties": {
+                                        "foo": {"type": "string"}
+                                    }
+                                }]
+                        }
+                    }
+                }'
+            ),
+            array(
+                '{"value": true}',
+                '{
+                    "type": "object",
+                    "properties": {
+                        "value": {"type": "any", "disallow": "string"}
+                    }
+                }'
+            )
+        );
+    }
+}
diff --git a/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/Constraints/DivisibleByTest.php b/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/Constraints/DivisibleByTest.php
new file mode 100644
index 0000000..8a01096
--- /dev/null
+++ b/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/Constraints/DivisibleByTest.php
@@ -0,0 +1,95 @@
+<?php
+
+/*
+ * This file is part of the JsonSchema package.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace JsonSchema\Tests\Constraints;
+
+class DivisibleByTest extends BaseTestCase
+{
+    public function getInvalidTests()
+    {
+        return array(
+            array(
+                '{"value": 5.6333}',
+                '{
+                  "type":"object",
+                  "properties":{
+                    "value":{"type":"number","divisibleBy":3}
+                  }
+                }'
+            ),
+            array(
+                '{"value": 35}',
+                '{
+                    "type": "object",
+                    "properties": {
+                        "value": {"type": "integer", "divisibleBy": 1.5}
+                    }
+                }'
+            ),
+            array(
+                '{"value": 0.00751}',
+                '{
+                    "type": "object",
+                    "properties": {
+                        "value": {"type": "number", "divisibleBy": 0.0001}
+                    }
+                }'
+            ),
+            array(
+                '{"value": 7}',
+                '{
+                    "type": "object",
+                    "properties": {
+                        "value": {"type": "integer", "divisibleBy": 2}
+                    }
+                }'
+            )
+        );
+    }
+
+    public function getValidTests()
+    {
+        return array(
+            array(
+                '{"value": 6}',
+                '{
+                  "type":"object",
+                  "properties":{
+                    "value":{"type":"number","divisibleBy":3}
+                  }
+                }'
+            ),
+            array(
+                '{"value": 4.5}',
+                '{
+                    "type": "object",
+                    "properties": {
+                        "value": {"type": "number", "divisibleBy": 1.5}
+                    }
+                }'
+            ),
+            array(
+                '{"value": 0.0075}',
+                '{
+                    "properties": {
+                        "value": {"type": "number", "divisibleBy": 0.0001}
+                    }
+                }'
+            ),
+            array(
+                '{"value": 1}',
+                '{
+                    "properties": {
+                        "value": {"type": "number", "divisibleBy": 0.02}
+                    }
+                }'
+            )
+        );
+    }
+}
diff --git a/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/Constraints/EnumTest.php b/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/Constraints/EnumTest.php
new file mode 100644
index 0000000..0ca5b9e
--- /dev/null
+++ b/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/Constraints/EnumTest.php
@@ -0,0 +1,140 @@
+<?php
+
+/*
+ * This file is part of the JsonSchema package.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace JsonSchema\Tests\Constraints;
+
+class EnumTest extends BaseTestCase
+{
+    public function getInvalidTests()
+    {
+        return array(
+            array(
+                '{
+                  "value":"Morango"
+                }',
+                '{
+                  "type":"object",
+                  "properties":{
+                    "value":{"type":"string","enum":["Abacate","Manga","Pitanga"]}
+                  },
+                  "additionalProperties":false
+                }'
+            ),
+            array(
+                '{}',
+                '{
+                  "type":"object",
+                  "properties":{
+                    "value":{
+                      "type":"string",
+                      "enum":["Abacate","Manga","Pitanga"],
+                      "required":true
+                    }
+                  },
+                  "additionalProperties":false
+                }'
+            ),
+            array(
+                '{"value": 4}',
+                '{
+                    "type": "object",
+                    "properties": {
+                        "value": {
+                            "type": "integer", "enum": [1, 2, 3]
+                        }
+                    },
+                    "additionalProperties": false
+                }'
+            ),
+            array(
+                '{"value": {"foo": false}}',
+                '{
+                    "type": "object",
+                    "properties": {
+                        "value": {
+                            "type": "any", "enum": [6, "foo", [], true, {"foo": 12}]
+                        }
+                    },
+                    "additionalProperties": false
+                }'
+            )
+        );
+    }
+
+    public function getValidTests()
+    {
+        return array(
+            array(
+                '{
+                  "value":"Abacate"
+                }',
+                '{
+                  "type":"object",
+                  "properties":{
+                    "value":{"type":"string","enum":["Abacate","Manga","Pitanga"]}
+                  },
+                  "additionalProperties":false
+                }'
+            ),
+            array(
+                '{}',
+                '{
+                  "type":"object",
+                  "properties":{
+                    "value":{"type":"string","enum":["Abacate","Manga","Pitanga"]}
+                  },
+                  "additionalProperties":false
+                }'
+            ),
+            array(
+                '{}',
+                '{
+                  "type":"object",
+                  "properties":{
+                    "value":{
+                      "type":"string",
+                      "enum":["Abacate","Manga","Pitanga"],
+                      "required":false
+                    }
+                  },
+                  "additionalProperties":false
+                }'
+            ),
+            array(
+                '{"value": 1}',
+                '{
+                    "type": "object",
+                    "properties": {
+                        "value": {"type": "integer", "enum": [1, 2, 3]}
+                    }
+                }'
+            ),
+            array(
+                '{"value": []}',
+                '{
+                    "type": "object",
+                    "properties": {
+                        "value": {"type": "any", "enum": [6, "foo", [], true, {"foo": 12}]}
+                    },
+                    "additionalProperties": false
+                }'
+            ),
+            array(
+                '{"value": {"foo": 12}}',
+                '{
+                    "type": "object",
+                    "properties": {
+                        "value": {"type": "any", "enum": [6, "foo", [], true, {"foo": 12}]}
+                    },
+                    "additionalProperties": false
+                }'
+            )
+        );
+    }
+}
diff --git a/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/Constraints/ExtendsTest.php b/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/Constraints/ExtendsTest.php
new file mode 100644
index 0000000..289484f
--- /dev/null
+++ b/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/Constraints/ExtendsTest.php
@@ -0,0 +1,151 @@
+<?php
+
+/*
+ * This file is part of the JsonSchema package.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace JsonSchema\Tests\Constraints;
+
+class ExtendsTest extends BaseTestCase
+{
+    public function getInvalidTests()
+    {
+        return array(
+            array(
+                '{
+                  "name":"bruno",
+                  "age":50
+                }',
+                '{
+                    "properties": {
+                        "name": {"type": "string"},
+                        "age": {
+                            "type": "integer",
+                            "maximum": 120
+                        }
+                    },
+                    "extends": {
+                        "properties": {
+                            "age": {"minimum": 70}
+                        }
+                    }
+                }'
+            ),
+            array(
+                '{
+                  "name":"bruno",
+                  "age":180
+                }',
+                '{
+                    "properties": {
+                        "name": {"type": "string"},
+                        "age": {
+                            "type": "integer",
+                            "maximum": 120
+                        }
+                    },
+                    "extends": {
+                        "properties": {
+                            "age": {"minimum":70}
+                        }
+                    }
+                }'
+            ),
+            array(
+                '{"foo": 2, "bar": "baz"}',
+                '{
+                    "properties": {
+                        "bar": {"type": "integer", "required": true}
+                    },
+                    "extends": {
+                        "properties": {
+                            "foo": {"type": "string", "required": true}
+                        }
+                    }
+                }'
+            ),
+            array(
+                '{"bar": 2}',
+                '{
+                    "properties": {
+                        "bar": {"type": "integer", "required": true}
+                    },
+                    "extends" : [
+                        {
+                            "properties": {
+                                "foo": {"type": "string", "required": true}
+                            }
+                        },
+                        {
+                            "properties": {
+                                "baz": {"type": "null", "required": true}
+                            }
+                        }
+                    ]
+                }'
+            )
+        );
+    }
+
+    public function getValidTests()
+    {
+        return array(
+            array(
+                '{
+                  "name":"bruno",
+                  "age":80
+                }',
+                '{
+                    "properties": {
+                        "name": {"type": "string"},
+                        "age": {
+                            "type": "integer",
+                            "maximum": 120
+                        }
+                    },
+                    "extends": {
+                        "properties": {
+                            "age": {"minimum": 70}
+                        }
+                    }
+                }'
+            ),
+            array(
+                '{"foo": "baz", "bar": 2}',
+                '{
+                    "properties": {
+                        "bar": {"type": "integer", "required": true}
+                    },
+                    "extends": {
+                        "properties": {
+                            "foo": {"type": "string", "required": true}
+                        }
+                    }
+                }'
+            ),
+            array(
+                '{"foo": "ick", "bar": 2, "baz": null}',
+                '{
+                    "properties": {
+                        "bar": {"type": "integer", "required": true}
+                    },
+                    "extends" : [
+                        {
+                            "properties": {
+                                "foo": {"type": "string", "required": true}
+                            }
+                        },
+                        {
+                            "properties": {
+                                "baz": {"type": "null", "required": true}
+                            }
+                        }
+                    ]
+                }'
+            )
+        );
+    }
+}
diff --git a/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/Constraints/FormatTest.php b/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/Constraints/FormatTest.php
new file mode 100644
index 0000000..b9d4e54
--- /dev/null
+++ b/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/Constraints/FormatTest.php
@@ -0,0 +1,214 @@
+<?php
+
+/*
+ * This file is part of the JsonSchema package.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace JsonSchema\Tests\Constraints;
+
+use JsonSchema\Constraints\Format;
+
+class FormatTest extends BaseTestCase
+{
+    public function setUp()
+    {
+        date_default_timezone_set('UTC');
+    }
+    
+    public function testNullThing()
+    {
+        $validator = new Format();
+        $schema = new \stdClass;
+
+        $validator->check('10', $schema);
+        $this->assertEmpty($validator->getErrors());
+    }
+
+    public function testRegex()
+    {
+        $validator = new Format();
+        $schema = new \stdClass;
+        $schema->format = 'regex';
+
+        $validator->check('\d+', $schema);
+        $this->assertEmpty($validator->getErrors());
+
+        $validator->check('^(abc]', $schema);
+        $this->assertCount(1, $validator->getErrors());
+    }
+
+    /**
+     * @dataProvider getValidFormats
+     */
+    public function testValidFormat($string, $format)
+    {
+        $validator = new Format();
+        $schema = new \stdClass;
+        $schema->format = $format;
+
+        $validator->check($string, $schema);
+        $this->assertEmpty($validator->getErrors());
+    }
+
+    /**
+     * @dataProvider getInvalidFormats
+     */
+    public function testInvalidFormat($string, $format)
+    {
+        $validator = new Format();
+        $schema = new \stdClass;
+        $schema->format = $format;
+
+        $validator->check($string, $schema);
+        $this->assertEquals(1, count($validator->getErrors()), 'Expected 1 error');
+    }
+
+    public function getValidFormats()
+    {
+        return array(
+            array('2001-01-23', 'date'),
+            array('2000-02-29', 'date'),
+
+            array('12:22:01', 'time'),
+            array('00:00:00', 'time'),
+            array('23:59:59', 'time'),
+
+            array('2000-05-01T12:12:12Z', 'date-time'),
+            array('2000-05-01T12:12:12+0100', 'date-time'),
+            array('2000-05-01T12:12:12+01:00', 'date-time'),
+            array('2000-05-01T12:12:12.123456Z', 'date-time'),
+
+            array('0', 'utc-millisec'),
+
+            array('aqua', 'color'),
+            array('black', 'color'),
+            array('blue', 'color'),
+            array('fuchsia', 'color'),
+            array('gray', 'color'),
+            array('green', 'color'),
+            array('lime', 'color'),
+            array('maroon', 'color'),
+            array('navy', 'color'),
+            array('olive', 'color'),
+            array('orange', 'color'),
+            array('purple', 'color'),
+            array('red', 'color'),
+            array('silver', 'color'),
+            array('teal', 'color'),
+            array('white', 'color'),
+            array('yellow', 'color'),
+            array('#fff', 'color'),
+            array('#00cc00', 'color'),
+
+            array('background: blue', 'style'),
+            array('color: #000;', 'style'),
+
+            array('555 320 1212', 'phone'),
+
+            array('http://bluebox.org', 'uri'),
+
+            array('info@something.edu', 'email'),
+
+            array('10.10.10.10', 'ip-address'),
+            array('127.0.0.1', 'ip-address'),
+
+            array('::ff', 'ipv6'),
+
+            array('www.example.com', 'host-name'),
+        );
+    }
+
+    public function getInvalidFormats()
+    {
+        return array(
+            array('January 1st, 1910', 'date'),
+            array('199-01-1', 'date'),
+            array('2012-0-11', 'date'),
+            array('2012-10-1', 'date'),
+
+            array('24:01:00', 'time'),
+            array('00:00:60', 'time'),
+            array('25:00:00', 'time'),
+
+            array('1999-1-11T00:00:00Z', 'date-time'),
+            array('1999-01-11T00:00:00+100', 'date-time'),
+            array('1999-01-11T00:00:00+1:00', 'date-time'),
+
+            array('-1', 'utc-millisec'),
+            array(PHP_INT_MAX, 'utc-millisec'),
+
+            array('grey', 'color'),
+            array('#HHH', 'color'),
+            array('#000a', 'color'),
+            array('#aa', 'color'),
+
+            array('background; blue', 'style'),
+
+            array('1 123 4424', 'phone'),
+
+            array('htt:/bluebox.org', 'uri'),
+
+            array('info@somewhere', 'email'),
+
+            array('256.2.2.2', 'ip-address'),
+
+            array(':::ff', 'ipv6'),
+
+            array('localhost', 'host-name'),
+
+            array('anything', '*'),
+        );
+    }
+
+    public function getValidTests()
+    {
+        return array(
+            array(
+                '{ "counter": "10" }',
+                '{
+                    "type": "object",
+                    "properties": {
+                        "counter": {
+                            "type": "string",
+                            "format": "regex",
+                            "pattern": "[0-9]+"
+                        }
+                    }
+                }'),
+        );
+    }
+
+    public function getInvalidTests()
+    {
+        return array(
+            array(
+                '{ "counter": "blue" }',
+                '{
+                    "type": "object",
+                    "properties": {
+                        "counter": {
+                            "type": "string",
+                            "format": "regex",
+                            "pattern": "[0-9]+"
+                        }
+                    }
+                }'
+            ),
+            array(
+                '{ "color": "blueberry" }',
+                '{
+                    "type": "object",
+                    "properties": {
+                        "color": {
+                            "type": "string",
+                            "format": "color"
+                        }
+                    }
+                }'
+            )
+        );
+    }
+}
diff --git a/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/Constraints/MinItemsMaxItemsTest.php b/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/Constraints/MinItemsMaxItemsTest.php
new file mode 100644
index 0000000..1b47784
--- /dev/null
+++ b/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/Constraints/MinItemsMaxItemsTest.php
@@ -0,0 +1,69 @@
+<?php
+
+/*
+ * This file is part of the JsonSchema package.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace JsonSchema\Tests\Constraints;
+
+class MinItemsMaxItemsTest extends BaseTestCase
+{
+    public function getInvalidTests()
+    {
+        return array(
+            array(
+                '{
+                  "value":[2]
+                }',
+                '{
+                  "type":"object",
+                  "properties":{
+                    "value":{"type":"array","minItems":2,"maxItems":4}
+                  }
+                }'
+            ),
+            array(
+                '{
+                  "value":[2,2,5,8,5]
+                }',
+                '{
+                  "type":"object",
+                  "properties":{
+                    "value":{"type":"array","minItems":2,"maxItems":4}
+                  }
+                }'
+            )
+        );
+    }
+
+    public function getValidTests()
+    {
+        return array(
+            array(
+                '{
+                  "value":[2,2]
+                }',
+                '{
+                  "type":"object",
+                  "properties":{
+                    "value":{"type":"array","minItems":2,"maxItems":4}
+                  }
+                }'
+            ),
+            array(
+                '{
+                  "value":[2,2,5,8]
+                }',
+                '{
+                  "type":"object",
+                  "properties":{
+                    "value":{"type":"array","minItems":2,"maxItems":4}
+                  }
+                }'
+            )
+        );
+    }
+}
diff --git a/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/Constraints/MinLengthMaxLengthMultiByteTest.php b/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/Constraints/MinLengthMaxLengthMultiByteTest.php
new file mode 100644
index 0000000..df00ce4
--- /dev/null
+++ b/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/Constraints/MinLengthMaxLengthMultiByteTest.php
@@ -0,0 +1,76 @@
+<?php
+
+/*
+ * This file is part of the JsonSchema package.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace JsonSchema\Tests\Constraints;
+
+class MinLengthMaxLengthMultiByteTest extends BaseTestCase
+{
+    protected function setUp()
+    {
+        if (! extension_loaded('mbstring')) {
+            $this->markTestSkipped('mbstring extension is not available');
+        }
+    }
+
+    public function getInvalidTests()
+    {
+        return array(
+            array(
+                '{
+                  "value":"☀"
+                }',
+                '{
+                  "type":"object",
+                  "properties":{
+                    "value":{"type":"string","minLength":2,"maxLength":4}
+                  }
+                }'
+            ),
+            array(
+                '{
+                  "value":"☀☁☂☃☺"
+                }',
+                '{
+                  "type":"object",
+                  "properties":{
+                    "value":{"type":"string","minLength":2,"maxLength":4}
+                  }
+                }'
+            )
+        );
+    }
+
+    public function getValidTests()
+    {
+        return array(
+            array(
+                '{
+                  "value":"☀☁"
+                }',
+                '{
+                  "type":"object",
+                  "properties":{
+                    "value":{"type":"string","minLength":2,"maxLength":4}
+                  }
+                }'
+            ),
+            array(
+                '{
+                  "value":"☀☁☂☃"
+                }',
+                '{
+                  "type":"object",
+                  "properties":{
+                    "value":{"type":"string","minLength":2,"maxLength":4}
+                  }
+                }'
+            )
+        );
+    }
+}
diff --git a/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/Constraints/MinLengthMaxLengthTest.php b/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/Constraints/MinLengthMaxLengthTest.php
new file mode 100644
index 0000000..8484c4e
--- /dev/null
+++ b/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/Constraints/MinLengthMaxLengthTest.php
@@ -0,0 +1,70 @@
+<?php
+
+/*
+ * This file is part of the JsonSchema package.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace JsonSchema\Tests\Constraints;
+
+class MinLengthMaxLengthTest extends BaseTestCase
+{
+    public function getInvalidTests()
+    {
+        return array(
+            array(
+                '{
+                  "value":"w"
+                }',
+                '{
+                  "type":"object",
+                  "properties":{
+                    "value":{"type":"string","minLength":2,"maxLength":4}
+                  }
+                }'
+            ),
+            array(
+                '{
+                  "value":"wo7us"
+                }',
+                '{
+                  "type":"object",
+                  "properties":{
+                    "value":{"type":"string","minLength":2,"maxLength":4}
+                  }
+                }'
+            )
+        );
+    }
+
+    public function getValidTests()
+    {
+        return array(
+            array(
+                '{
+                  "value":"wo"
+                }',
+                '{
+                  "type":"object",
+                  "properties":{
+                    "value":{"type":"string","minLength":2,"maxLength":4}
+                  }
+                }'
+            ),
+            array(
+                '{
+                  "value":"wo7u"
+                }',
+                '{
+                  "type":"object",
+                  "properties":{
+                    "value":{"type":"string","minLength":2,"maxLength":4}
+                  }
+                }'
+            ),
+
+        );
+    }
+}
diff --git a/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/Constraints/MinimumMaximumTest.php b/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/Constraints/MinimumMaximumTest.php
new file mode 100644
index 0000000..7cc3f20
--- /dev/null
+++ b/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/Constraints/MinimumMaximumTest.php
@@ -0,0 +1,158 @@
+<?php
+
+/*
+ * This file is part of the JsonSchema package.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace JsonSchema\Tests\Constraints;
+
+class MinimumMaximumTest extends BaseTestCase
+{
+    public function getInvalidTests()
+    {
+        return array(
+            array(
+                '{
+                  "value":2
+                }',
+                '{
+                  "type":"object",
+                  "properties":{
+                    "value":{"type":"integer","minimum":4}
+                  }
+                }'
+            ),
+            array(
+                '{"value": 3}',
+                '{
+                    "type": "object",
+                    "properties": {
+                        "value": {"type": "integer", "minimum": 3, "exclusiveMinimum": true}
+                    }
+                }'
+            ),
+            array(
+                '{
+                  "value":16
+                }',
+                '{
+                  "type":"object",
+                  "properties":{
+                    "value":{"type":"integer","maximum":8}
+                  }
+                }'
+            ),
+            array(
+                '{"value": 8}',
+                '{
+                    "type": "object",
+                    "properties": {
+                        "value": {"type": "integer", "maximum": 8, "exclusiveMaximum": true}
+                    }
+                }'
+            ),
+            array(
+                '{"value": 4}',
+                '{
+                    "type": "object",
+                    "properties": {
+                        "value": {"type": "integer", "exclusiveMinimum": true}
+                    }
+                }'
+            ),
+            array(
+                '{"value": 4}',
+                '{
+                    "type": "object",
+                    "properties": {
+                        "value": {"type": "integer", "exclusiveMaximum": true}
+                    }
+                }'
+            ),
+            array(
+                '{"value": 4}',
+                '{
+                    "type": "object",
+                    "properties": {
+                        "value": {"type": "integer", "minimum": 5, "exclusiveMinimum": false}
+                    }
+                }'
+            ),
+            array(
+                '{"value": 4}',
+                '{
+                    "properties": {
+                        "value": {"type": "integer", "maximum": 3, "exclusiveMaximum": false}
+                    }
+                }'
+            )
+        );
+    }
+
+    public function getValidTests()
+    {
+        return array(
+            array(
+                '{
+                  "value":6
+                }',
+                '{
+                  "type":"object",
+                  "properties":{
+                    "value":{"type":"integer","minimum":4}
+                  }
+                }'
+            ),
+            array(
+                '{
+                  "value":6
+                }',
+                '{
+                  "type":"object",
+                  "properties":{
+                    "value":{"type":"integer","maximum":8}
+                  }
+                }'
+            ),
+            array(
+                '{"value": 6}',
+                '{
+                    "type": "object",
+                    "properties": {
+                        "value": {"type": "integer", "minimum": 6, "exclusiveMinimum": false}
+                    }
+                }'
+            ),
+            array(
+                '{"value": 6}',
+                '{
+                    "type": "object",
+                    "properties": {
+                        "value": {"type": "integer", "maximum": 6, "exclusiveMaximum": false}
+                    }
+                }'
+            ),
+            array(
+                '{"value": 6}',
+                '{
+                    "type": "object",
+                    "properties": {
+                        "value": {"type": "integer", "minimum": 6}
+                    }
+                }'
+            ),
+            array(
+                '{"value": 6}',
+                '{
+                    "type": "object",
+                    "properties": {
+                        "value": {"type": "integer", "maximum": 6}
+                    }
+                }'
+            )
+        );
+    }
+}
diff --git a/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/Constraints/NotTest.php b/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/Constraints/NotTest.php
new file mode 100644
index 0000000..27f0222
--- /dev/null
+++ b/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/Constraints/NotTest.php
@@ -0,0 +1,73 @@
+<?php
+
+/*
+ * This file is part of the JsonSchema package.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace JsonSchema\Tests\Constraints;
+
+class NotTest extends BaseTestCase
+{
+    public function getInvalidTests()
+    {
+        return array(
+            array(
+                '{
+                    "x": [1, 2]
+                }',
+                '{
+                    "properties": {
+                        "x": {
+                            "not": {
+                                "type": "array",
+                                "items": {"type": "integer"},
+                                "minItems": 2
+                            }
+                        }
+                    }
+                }'
+            )
+        );
+    }
+
+    public function getValidTests()
+    {
+        return array(
+            array(
+                '{
+                    "x": [1]
+                }',
+                '{
+                    "properties": {
+                        "x": {
+                            "not": {
+                                "type": "array",
+                                "items": {"type": "integer"},
+                                "minItems": 2
+                            }
+                        }
+                    }
+                }'
+            ),
+            array(
+                '{
+                    "x": ["foo", 2]
+                }',
+                '{
+                    "properties": {
+                        "x": {
+                            "not": {
+                                "type": "array",
+                                "items": {"type": "integer"},
+                                "minItems": 2
+                            }
+                        }
+                    }
+                }'
+            )
+        );
+    }
+}
diff --git a/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/Constraints/NumberAndIntegerTypesTest.php b/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/Constraints/NumberAndIntegerTypesTest.php
new file mode 100644
index 0000000..932c2f5
--- /dev/null
+++ b/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/Constraints/NumberAndIntegerTypesTest.php
@@ -0,0 +1,121 @@
+<?php
+
+/*
+ * This file is part of the JsonSchema package.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace JsonSchema\Tests\Constraints;
+
+class NumberAndIntegerTypesTest extends BaseTestCase
+{
+    public function getInvalidTests()
+    {
+        return array(
+            array(
+                '{
+                  "integer": 1.4
+                }',
+                '{
+                  "type":"object",
+                  "properties":{
+                    "integer":{"type":"integer"}
+                  }
+                }'
+            ),
+            array(
+                '{"number": "1.5"}',
+                '{
+                    "type": "object",
+                    "properties": {
+                        "number": {"type": "number"}
+                    }
+                }'
+            ),
+            array(
+                '{"integer": "1"}',
+                '{
+                    "type": "object",
+                    "properties": {
+                        "integer": {"type": "integer"}
+                    }
+                }'
+            ),
+            array(
+                '{"integer": 1.001}',
+                '{
+                    "type": "object",
+                    "properties": {
+                        "integer": {"type": "integer"}
+                    }
+                }'
+            ),
+            array(
+                '{"integer": true}',
+                '{
+                    "type": "object",
+                    "properties": {
+                        "integer": {"type": "integer"}
+                    }
+                }'
+            ),
+            array(
+                '{"number": "x"}',
+                '{
+                    "type": "object",
+                    "properties": {
+                        "number": {"type": "number"}
+                    }
+                }'
+            )
+        );
+    }
+
+    public function getValidTests()
+    {
+        return array(
+            array(
+                '{
+                  "integer": 1
+                }',
+                '{
+                  "type":"object",
+                  "properties":{
+                    "integer":{"type":"integer"}
+                  }
+                }'
+            ),
+            array(
+                '{
+                  "number": 1.4
+                }',
+                '{
+                  "type":"object",
+                  "properties":{
+                    "number":{"type":"number"}
+                  }
+                }'
+            ),
+            array(
+                '{"number": 1e5}',
+                '{
+                    "type": "object",
+                    "properties": {
+                        "number": {"type": "number"}
+                    }
+                }'
+            ),
+            array(
+                '{"number": 1}',
+                '{
+                    "type": "object",
+                    "properties": {
+                        "number": {"type": "number"}
+                    }
+                }'
+            )
+        );
+    }
+}
diff --git a/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/Constraints/OfPropertiesTest.php b/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/Constraints/OfPropertiesTest.php
new file mode 100644
index 0000000..b06628d
--- /dev/null
+++ b/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/Constraints/OfPropertiesTest.php
@@ -0,0 +1,208 @@
+<?php
+/*
+ * This file is part of the JsonSchema package.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+namespace JsonSchema\Tests\Constraints;
+
+use JsonSchema\Validator;
+
+/**
+ * Class OfPropertiesTest
+ */
+class OfPropertiesTest extends BaseTestCase
+{
+
+    public function getValidTests()
+    {
+        return array(
+            array(
+                '{"prop1": "abc"}',
+                '{
+                  "type": "object",
+                  "properties": {
+                    "prop1": {"type": "string"},
+                    "prop2": {
+                      "oneOf": [
+                        {"type": "number"},
+                        {"type": "string"}
+                      ]
+                    }
+                  },
+                  "required": ["prop1"]
+                }'
+            ),
+            array(
+                '{"prop1": "abc", "prop2": 23}',
+                '{
+                  "type": "object",
+                  "properties": {
+                    "prop1": {"type": "string"},
+                    "prop2": {
+                      "oneOf": [
+                        {"type": "number"},
+                        {"type": "string"}
+                      ]
+                    }
+                  },
+                  "required": ["prop1"]
+                }'
+            ),
+        );
+    }
+
+    public function getInvalidTests()
+    {
+        return array(
+            array(
+                '{"prop1": "abc", "prop2": []}',
+                '{
+                  "type": "object",
+                  "properties": {
+                    "prop1": {"type": "string"},
+                    "prop2": {
+                      "oneOf": [
+                        {"type": "number"},
+                        {"type": "string"}
+                      ]
+                    }
+                  },
+                  "required": ["prop1"]
+                }',
+                Validator::CHECK_MODE_NORMAL,
+                array(
+                    array(
+                        "property" => "prop2",
+                        "message"  => "array value found, but a string is required",
+
+                    ),
+                    array(
+                        "property" => "prop2",
+                        "message"  => "array value found, but a number is required",
+                    ),
+                    array(
+                        "property" => "prop2",
+                        "message"  => "failed to match exactly one schema",
+                    ),
+                ),
+            ),
+            array(
+                '{"prop1": [1,2]}',
+                '{
+                  "type": "object",
+                  "properties": {
+                    "prop1": {
+                      "oneOf": [
+                        {
+                          "type": "string",
+                          "pattern": "^[a-z]*$"
+                        },
+                        {
+                          "type": "string",
+                          "pattern": "^[A-Z]*$"
+                        }
+                      ]
+                    }
+                  }
+                }'
+            ),
+            array(
+                '{"prop1": [1,2]}',
+                '{
+                  "type": "object",
+                  "properties": {
+                    "prop1": {
+                      "anyOf": [
+                        {
+                          "type": "string",
+                          "pattern": "^[A-Z]*$"
+                        }
+                      ]
+                    }
+                  }
+                }'
+            ),
+            array(
+                '{"prop1": [1,2]}',
+                '{
+                  "type": "object",
+                  "properties": {
+                    "prop1": {
+                      "anyOf": [
+                        {
+                          "type": "number"
+                        },
+                        {
+                          "type": "string",
+                          "pattern": "^[A-Z]*$"
+                        }
+                      ]
+                    }
+                  }
+                }'
+            ),
+            array(
+                '{"prop1": [1,2]}',
+                '{
+                  "type": "object",
+                  "properties": {
+                    "prop1": {
+                      "anyOf": [
+                        {
+                          "type": "string"
+                        },
+                        {
+                          "type": "string",
+                          "pattern": "^[A-Z]*$"
+                        }
+                      ]
+                    }
+                  }
+                }'
+            ),
+            array(
+                '{"prop1": [1,2]}',
+                '{
+                  "type": "object",
+                  "properties": {
+                    "prop1": {
+                      "anyOf": [
+                        {
+                          "type": "string",
+                          "pattern": "^[a-z]*$"
+                        },
+                        {
+                          "type": "string",
+                          "pattern": "^[A-Z]*$"
+                        }
+                      ]
+                    }
+                  }
+                }'
+            ),
+            array(
+                '{"prop1": [1,2]}',
+                '{
+                  "type": "object",
+                  "properties": {
+                    "prop1": {
+                      "anyOf": [
+                        {
+                          "type": "number"
+                        },
+                        {
+                          "type": "string"
+                        },
+                        {
+                          "type": "string"
+                        }
+                      ]
+                    }
+                  }
+                }'
+            )
+        );
+    }
+}
diff --git a/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/Constraints/PatternPropertiesTest.php b/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/Constraints/PatternPropertiesTest.php
new file mode 100644
index 0000000..ef05388
--- /dev/null
+++ b/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/Constraints/PatternPropertiesTest.php
@@ -0,0 +1,128 @@
+<?php
+
+/*
+ * This file is part of the JsonSchema package.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace JsonSchema\Tests\Constraints;
+
+class PatternPropertiesTest extends BaseTestCase
+{
+    public function getInvalidTests()
+    {
+        return array(
+            // matches pattern but invalid schema for object
+            array(
+                json_encode(array(
+                    'someobject' => array(
+                        'foobar' => 'foo',
+                        'barfoo' => 'bar',
+                    )
+                )),
+                json_encode(array(
+                    'type' => 'object',
+                    'patternProperties' => array(
+                        '^someobject$' => array(
+                            'type' => 'object',
+                            'additionalProperties' => false,
+                            'properties' => array(
+                                'barfoo' => array(
+                                    'type' => 'string',
+                                ),
+                            )
+                        )
+                    )
+                ))
+            ),
+            // Does not match pattern
+            array(
+                json_encode(array(
+                        'regex_us' => false,
+                    )),
+                json_encode(array(
+                        'type' => 'object',
+                        'patternProperties' => array(
+                            '^[a-z]+_(jp|de)$' => array(
+                                'type' => array('boolean')
+                            )
+                        ),
+                        "additionalProperties" => false
+                    ))
+            ),
+            // An invalid regular expression pattern
+            array(
+                json_encode(array(
+                        'regex_us' => false,
+                    )),
+                json_encode(array(
+                        'type' => 'object',
+                        'patternProperties' => array(
+                            '^[a-z+_jp|de)$' => array(
+                                'type' => array('boolean')
+                            )
+                        ),
+                        "additionalProperties" => false
+                    ))
+            ),
+        );
+    }
+
+    public function getValidTests()
+    {
+        return array(
+            array(
+                // validates pattern schema
+                json_encode(array(
+                    'someobject' => array(
+                        'foobar' => 'foo',
+                        'barfoo' => 'bar',
+                    ),
+                    'someotherobject' => array(
+                        'foobar' => 1234,
+                    )
+                )),
+                json_encode(array(
+                    'type' => 'object',
+                    'patternProperties' => array(
+                        '^someobject$' => array(
+                            'type' => 'object',
+                            'properties' => array(
+                                'foobar' => array('type' => 'string'),
+                                'barfoo' => array('type' => 'string'),
+                            ),
+                        ),
+                        '^someotherobject$' => array(
+                            'type' => 'object',
+                            'properties' => array(
+                                'foobar' => array('type' => 'number'),
+                            ),
+                        ),
+                    )
+                ))
+            ),
+            array(
+                json_encode(array(
+                        'foobar' => true,
+                        'regex_us' => 'foo',
+                        'regex_de' => 1234
+                    )),
+                json_encode(array(
+                        'type' => 'object',
+                        'properties' => array(
+                            'foobar' => array('type' => 'boolean')
+                        ),
+                        'patternProperties' => array(
+                            '^[a-z]+_(us|de)$' => array(
+                                'type' => array('string', 'integer')
+                            )
+                        ),
+                        "additionalProperties" => false
+                    ))
+            ),
+        );
+    }
+}
+
diff --git a/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/Constraints/PatternTest.php b/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/Constraints/PatternTest.php
new file mode 100644
index 0000000..f28a579
--- /dev/null
+++ b/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/Constraints/PatternTest.php
@@ -0,0 +1,81 @@
+<?php
+
+/*
+ * This file is part of the JsonSchema package.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace JsonSchema\Tests\Constraints;
+
+class PatternTest extends BaseTestCase
+{
+    public function getInvalidTests()
+    {
+        return array(
+            array(
+                '{
+                  "value":"Abacates"
+                }',
+                '{
+                  "type":"object",
+                  "properties":{
+                    "value":{"type":"string","pattern":"^cat"}
+                  },
+                  "additionalProperties":false
+                }'
+            ),
+            array(
+                '{"value": "abc"}',
+                '{
+                    "type": "object",
+                    "properties": {
+                        "value": {"type": "string", "pattern": "^a*$"}
+                    },
+                    "additionalProperties": false
+                }'
+            )
+        );
+    }
+
+    public function getValidTests()
+    {
+        return array(
+            array(
+                '{
+                  "value":"Abacates"
+                }',
+                '{
+                  "type":"object",
+                  "properties":{
+                    "value":{"type":"string","pattern":"tes$"}
+                  },
+                  "additionalProperties":false
+                }'
+            ),
+            array(
+                '{
+                  "value":"Abacates"
+                }',
+                '{
+                  "type":"object",
+                  "properties":{
+                    "value":{"type":"string","pattern":"cat"}
+                  },
+                  "additionalProperties":false
+                }'
+            ),
+            array(
+                '{"value": "aaa"}',
+                '{
+                    "type": "object",
+                    "properties": {
+                        "value": {"type": "string", "pattern": "^a*$"}
+                    },
+                    "additionalProperties": false
+                }'
+            )
+        );
+    }
+}
diff --git a/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/Constraints/ReadOnlyTest.php b/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/Constraints/ReadOnlyTest.php
new file mode 100644
index 0000000..7a3e867
--- /dev/null
+++ b/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/Constraints/ReadOnlyTest.php
@@ -0,0 +1,46 @@
+<?php
+
+/*
+ * This file is part of the JsonSchema package.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace JsonSchema\Tests\Constraints;
+
+class ReadOnlyTest extends BaseTestCase
+{
+    public function getInvalidTests()
+    {
+        //is readonly really required?
+        return array(
+            array(
+                '{ "number": [] }',
+                '{
+                  "type":"object",
+                  "properties":{
+                    "number":{"type":"string","readonly":true}
+                  }
+                }'
+            )
+        );
+    }
+
+    public function getValidTests()
+    {
+        return array(
+            array(
+                '{
+                  "number": "1.4"
+                }',
+                '{
+                  "type":"object",
+                  "properties":{
+                    "number":{"type":"string","readonly":true}
+                  }
+                }'
+            )
+        );
+    }
+}
diff --git a/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/Constraints/RequireTest.php b/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/Constraints/RequireTest.php
new file mode 100644
index 0000000..c10f8a7
--- /dev/null
+++ b/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/Constraints/RequireTest.php
@@ -0,0 +1,50 @@
+<?php
+
+/*
+ * This file is part of the JsonSchema package.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace JsonSchema\Tests\Constraints;
+
+class RequireTest extends BaseTestCase
+{
+    public function getInvalidTests()
+    {
+        return array(
+            array(
+                '{
+                  "state":"DF"
+                }',
+                '{
+                  "type":"object",
+                  "properties":{
+                    "state":{"type":"string","requires":"city"},
+                    "city":{"type":"string"}
+                  }
+                }'
+            )
+        );
+    }
+
+    public function getValidTests()
+    {
+        return array(
+            array(
+                '{
+                  "state":"DF",
+                  "city":"Brasília"
+                }',
+                '{
+                  "type":"object",
+                  "properties":{
+                    "state":{"type":"string","requires":"city"},
+                    "city":{"type":"string"}
+                  }
+                }'
+            )
+        );
+    }
+}
diff --git a/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/Constraints/RequiredPropertyTest.php b/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/Constraints/RequiredPropertyTest.php
new file mode 100644
index 0000000..c149562
--- /dev/null
+++ b/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/Constraints/RequiredPropertyTest.php
@@ -0,0 +1,338 @@
+<?php
+
+/*
+ * This file is part of the JsonSchema package.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace JsonSchema\Tests\Constraints;
+
+class RequiredPropertyTest extends BaseTestCase
+{
+    public function getInvalidTests()
+    {
+        return array(
+            array(
+                '{}',
+                '{
+                  "type":"object",
+                  "properties":{
+                    "number":{"type":"number","required":true}
+                  }
+                }'
+            ),
+            array(
+                '{}',
+                '{
+                    "type": "object",
+                    "properties": {
+                        "number": {"type": "number"}
+                    },
+                    "required": ["number"]
+                }'
+            ),
+            array(
+                '{
+                    "foo": {}
+                }',
+                '{
+                    "type": "object",
+                    "properties": {
+                        "foo": {
+                            "type": "object",
+                            "properties": {
+                                "bar": {"type": "number"}
+                            },
+                            "required": ["bar"]
+                        }
+                    }
+                }'
+            ),
+            array(
+                '{
+                    "bar": 1.4
+                 }',
+                '{
+                    "type": "object",
+                    "properties": {
+                        "foo": {"type": "string", "required": true},
+                        "bar": {"type": "number"}
+                    },
+                    "required": ["bar"]
+                }'
+            ),
+            array(
+                '{}',
+                '{
+                    "required": ["foo"]
+                }'
+            ),
+            array(
+                '{
+                }',
+                '{
+                    "type": "object",
+                    "properties": {
+                        "foo": { "required": true }
+                    }
+                }'
+            ),
+            array(
+                '{
+                  "string":{}
+                }',
+                '{
+                  "type":"object",
+                  "properties": {
+                    "string":{"type":"string", "required": true}
+                  }
+                }'
+            ),
+            array(
+                '{
+                  "number":{}
+                }',
+                '{
+                  "type":"object",
+                  "properties": {
+                    "number":{"type":"number", "required": true}
+                  }
+                }'
+            ),
+            array(
+                '{
+                  "integer":{}
+                }',
+                '{
+                  "type":"object",
+                  "properties": {
+                    "integer":{"type":"integer", "required": true}
+                  }
+                }'
+            ),
+            array(
+                '{
+                  "boolean":{}
+                }',
+                '{
+                  "type":"object",
+                  "properties": {
+                    "boolean":{"type":"boolean", "required": true}
+                  }
+                }'
+            ),
+            array(
+                '{
+                  "array":{}
+                }',
+                '{
+                  "type":"object",
+                  "properties": {
+                    "array":{"type":"array", "required": true}
+                  }
+                }'
+            ),
+            array(
+                '{
+                  "null":{}
+                }',
+                '{
+                  "type":"object",
+                  "properties": {
+                    "null":{"type":"null", "required": true}
+                  }
+                }'
+            ),
+            array(
+                '{
+                  "foo": {"baz": 1.5}
+                }',
+                '{
+                  "type": "object",
+                  "properties": {
+                    "foo": {
+                      "type": "object",
+                      "properties": {
+                        "bar": {"type": "number"}
+                      },
+                      "required": ["bar"]
+                    }
+                  }
+                }'
+            ),
+            array(
+                '{
+                  "foo": {"baz": 1.5}
+                }',
+                '{
+                  "type": "object",
+                  "properties": {
+                    "foo": {
+                      "type": "object",
+                      "properties": {
+                        "bar": {"type": "number", "required": true}
+                      }
+                    }
+                  }
+                }'
+            ),
+        );
+    }
+
+    public function getValidTests()
+    {
+        return array(
+            array(
+                '{
+                  "number": 1.4
+                }',
+                '{
+                  "type":"object",
+                  "properties":{
+                    "number":{"type":"number","required":true}
+                  }
+                }'
+            ),
+            array(
+                '{}',
+                '{
+                  "type":"object",
+                  "properties":{
+                    "number":{"type":"number"}
+                  }
+                }'
+            ),
+            array(
+                '{}',
+                '{
+                  "type":"object",
+                  "properties":{
+                    "number":{"type":"number","required":false}
+                  }
+                }'
+            ),
+            array(
+                '{
+                  "number": 0
+                }',
+                '{
+                  "type":"object",
+                  "properties":{
+                    "number":{"type":"integer","required":true}
+                  }
+                }'
+            ),
+            array(
+                '{
+                  "is_active": false
+                }',
+                '{
+                  "type":"object",
+                  "properties":{
+                    "is_active":{"type":"boolean","required":true}
+                  }
+                }'
+            ),
+            array(
+                '{
+                  "status": null
+                }',
+                '{
+                  "type":"object",
+                  "properties":{
+                    "status":{"type":"null","required":true}
+                  }
+                }'
+            ),
+            array(
+                '{
+                  "users": []
+                }',
+                '{
+                  "type":"object",
+                  "properties":{
+                    "users":{"type":"array","required":true}
+                  }
+                }'
+            ),
+            array(
+                '{
+                    "foo": "foo",
+                    "bar": 1.4
+                 }',
+                '{
+                    "type": "object",
+                    "properties": {
+                        "foo": {"type": "string", "required": true},
+                        "bar": {"type": "number"}
+                    },
+                    "required": ["bar"]
+                }'
+            ),
+            array(
+                '{
+                    "foo": {"bar": 1.5}
+                }',
+                '{
+                    "type": "object",
+                    "properties": {
+                        "foo": {
+                            "type": "object",
+                            "properties": {
+                                "bar": {"type": "number"}
+                            },
+                            "required": ["bar"]
+                        }
+                    },
+                    "required": ["foo"]
+                }'
+            ),
+            array(
+                '{
+                    "foo": {}
+                }',
+                '{
+                    "type": "object",
+                    "properties": {
+                        "foo": { "required": true }
+                    }
+                }'
+            ),
+            array(
+                '{
+                  "boo": {"bar": 1.5}
+                }',
+                '{
+                  "type": "object",
+                  "properties": {
+                    "foo": {
+                      "type": "object",
+                      "properties": {
+                        "bar": {"type": "number"}
+                      },
+                      "required": ["bar"]
+                    }
+                  }
+                }'
+            ),
+            array(
+                '{
+                  "boo": {"bar": 1.5}
+                }',
+                '{
+                  "type": "object",
+                  "properties": {
+                    "foo": {
+                      "type": "object",
+                      "properties": {
+                        "bar": {"type": "number", "required": true}
+                      }
+                    }
+                  }
+                }'
+            ),
+        );
+    }
+}
diff --git a/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/Constraints/SelfDefinedSchemaTest.php b/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/Constraints/SelfDefinedSchemaTest.php
new file mode 100644
index 0000000..8b0a981
--- /dev/null
+++ b/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/Constraints/SelfDefinedSchemaTest.php
@@ -0,0 +1,63 @@
+<?php
+
+/*
+ * This file is part of the JsonSchema package.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace JsonSchema\Tests\Constraints;
+
+class SelfDefinedSchemaTest extends BaseTestCase
+{
+    public function getInvalidTests()
+    {
+        return array(
+            array(
+                '{
+                    "$schema": {
+                        "properties": {
+                            "name": {
+                                "type": "string"
+                            },
+                            "age" : {
+                                "type": "integer",
+                                "maximum": 25
+                            }
+                        }
+                    },
+                    "name" : "John Doe",
+                    "age" : 30,
+                    "type" : "object"
+                }',
+                ''
+            )
+        );
+    }
+
+    public function getValidTests()
+    {
+        return array(
+            array(
+                '{
+                    "$schema": {
+                        "properties": {
+                            "name": {
+                                "type": "string"
+                            },
+                            "age" : {
+                                "type": "integer",
+                                "maximum": 125
+                            }
+                        }
+                    },
+                    "name" : "John Doe",
+                    "age" : 30,
+                    "type" : "object"
+                }',
+                ''
+            )
+        );
+    }
+}
diff --git a/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/Constraints/TupleTypingTest.php b/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/Constraints/TupleTypingTest.php
new file mode 100644
index 0000000..ceab8ec
--- /dev/null
+++ b/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/Constraints/TupleTypingTest.php
@@ -0,0 +1,138 @@
+<?php
+
+/*
+ * This file is part of the JsonSchema package.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace JsonSchema\Tests\Constraints;
+
+class TupleTypingTest extends BaseTestCase
+{
+    public function getInvalidTests()
+    {
+        return array(
+            array(
+                '{
+                  "tupleTyping":[2,"a"]
+                }',
+                '{
+                  "type":"object",
+                  "properties":{
+                    "tupleTyping":{
+                      "type":"array",
+                      "items":[
+                        {"type":"string"},
+                        {"type":"number"}
+                      ]
+                    }
+                  }
+                }'
+            ),
+            array(
+                '{
+                  "tupleTyping":["2",2,true]
+                }',
+                '{
+                  "type":"object",
+                  "properties":{
+                    "tupleTyping":{
+                      "type":"array",
+                      "items":[
+                        {"type":"string"},
+                        {"type":"number"}
+                      ] ,
+                      "additionalItems":false
+                    }
+                  }
+                }'
+            ),
+            array(
+                '{
+                  "tupleTyping":["2",2,3]
+                }',
+                '{
+                  "type":"object",
+                  "properties":{
+                    "tupleTyping":{
+                      "type":"array",
+                      "items":[
+                        {"type":"string"},
+                        {"type":"number"}
+                      ] ,
+                      "additionalItems":{"type":"string"}
+                    }
+                  }
+                }'
+            ),
+            array(
+                '{"data": [1, "foo", true, 1.5]}',
+                '{
+                    "type": "object",
+                    "properties": {
+                        "data": {
+                            "type": "array",
+                            "items": [{}, {}, {}],
+                            "additionalItems": false
+                        }
+                    }
+                }'
+            )
+        );
+    }
+
+    public function getValidTests()
+    {
+        return array(
+            array(
+                '{
+                  "tupleTyping":["2", 1]
+                }',
+                '{
+                  "type":"object",
+                  "properties":{
+                    "tupleTyping":{
+                      "type":"array",
+                      "items":[
+                        {"type":"string"},
+                        {"type":"number"}
+                      ]
+                    }
+                  }
+                }'
+            ),
+            array(
+                '{
+                  "tupleTyping":["2",2,3]
+                }',
+                '{
+                  "type":"object",
+                  "properties":{
+                    "tupleTyping":{
+                      "type":"array",
+                      "items":[
+                        {"type":"string"},
+                        {"type":"number"}
+                      ]
+                    }
+                  }
+                }'
+            ),
+            array(
+                '{"data": [1, "foo", true]}',
+                '{
+                    "type": "object",
+                    "properties": {
+                        "data": {
+                            "type": "array",
+                            "items": [{}, {}, {}],
+                            "additionalItems": false
+                        }
+                    }
+                }'
+            )
+        );
+    }
+}
diff --git a/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/Constraints/TypeTest.php b/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/Constraints/TypeTest.php
new file mode 100644
index 0000000..aef7605
--- /dev/null
+++ b/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/Constraints/TypeTest.php
@@ -0,0 +1,76 @@
+<?php
+
+/*
+ * This file is part of the JsonSchema package.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace JsonSchema\Tests\Constraints;
+
+use JsonSchema\Constraints\Type;
+
+/**
+ * Class TypeTest
+ *
+ * @package JsonSchema\Tests\Constraints
+ * @author hakre <https://github.com/hakre>
+ */
+class TypeTest extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * @see testIndefiniteArticleForTypeInTypeCheckErrorMessage
+     * @return array
+     */
+    public function provideIndefiniteArticlesForTypes()
+    {
+        return array(
+            array('integer', 'an',),
+            array('number', 'a',),
+            array('boolean', 'a',),
+            array('object', 'an',),
+            array('array', 'an',),
+            array('string', 'a',),
+            array('null', 'a', array(), 'array',),
+        );
+    }
+
+    /**
+     * @dataProvider provideIndefiniteArticlesForTypes
+     */
+    public function testIndefiniteArticleForTypeInTypeCheckErrorMessage($type, $wording, $value = null, $label = 'NULL')
+    {
+        $constraint = new Type();
+        $constraint->check($value, (object)array('type' => $type));
+        $this->assertTypeConstraintError("$label value found, but $wording $type is required", $constraint);
+    }
+
+    /**
+     * Helper to assert an error message
+     *
+     * @param string $expected
+     * @param Type $actual
+     */
+    private function assertTypeConstraintError($expected, Type $actual)
+    {
+        $actualErrors = $actual->getErrors();
+
+        $this->assertCount(1, $actualErrors, "Failed to assert that Type has exactly one error to assert the error message against.");
+
+        $actualError = $actualErrors[0];
+
+        $this->assertInternalType('array', $actualError, sprintf('Failed to assert that Type error is an array, %s given', gettype($actualError)));
+
+        $messageKey = 'message';
+        $this->assertArrayHasKey(
+            $messageKey, $actualError,
+            sprintf('Failed to assert that Type error has a message key %s.', var_export($messageKey, true))
+        );
+
+        $actualMessage = $actualError[$messageKey];
+
+        $this->assertEquals($expected, $actualMessage); // first equal for the diff
+        $this->assertSame($expected, $actualMessage); // the same for the strictness
+    }
+}
diff --git a/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/Constraints/UnionTypesTest.php b/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/Constraints/UnionTypesTest.php
new file mode 100644
index 0000000..01e49c4
--- /dev/null
+++ b/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/Constraints/UnionTypesTest.php
@@ -0,0 +1,51 @@
+<?php
+
+/*
+ * This file is part of the JsonSchema package.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace JsonSchema\Tests\Constraints;
+
+class UnionTypesTest extends BaseTestCase
+{
+    public function getInvalidTests()
+    {
+        return array(
+            array(
+                '{
+                  "stringOrNumber":4.8,
+                  "booleanOrNull":5
+                }',
+                '{
+                  "type":"object",
+                  "properties":{
+                    "stringOrNumber":{"type":["string","number"]},
+                    "booleanOrNull":{"type":["boolean","null"]}
+                  }
+                }'
+            )
+        );
+    }
+
+    public function getValidTests()
+    {
+        return array(
+            array(
+                '{
+                  "stringOrNumber":4.8,
+                  "booleanOrNull":false
+                }',
+                '{
+                  "type":"object",
+                  "properties":{
+                    "stringOrNumber":{"type":["string","number"]},
+                    "booleanOrNull":{"type":["boolean","null"]}
+                  }
+                }'
+            )
+        );
+    }
+}
diff --git a/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/Constraints/UnionWithNullValueTest.php b/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/Constraints/UnionWithNullValueTest.php
new file mode 100644
index 0000000..a077cfd
--- /dev/null
+++ b/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/Constraints/UnionWithNullValueTest.php
@@ -0,0 +1,51 @@
+<?php
+
+/*
+ * This file is part of the JsonSchema package.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace JsonSchema\Tests\Constraints;
+
+class UnionWithNullValueTest extends BaseTestCase
+{
+    public function getInvalidTests()
+    {
+        return array(
+            array(
+                '{
+                  "stringOrNumber":null,
+                  "booleanOrNull":null
+                }',
+                '{
+                  "type":"object",
+                  "properties":{
+                    "stringOrNumber":{"type":["string","number"]},
+                    "booleanOrNull":{"type":["boolean","null"]}
+                  }
+                }'
+            )
+        );
+    }
+
+    public function getValidTests()
+    {
+        return array(
+            array(
+                '{
+                  "stringOrNumber":12,
+                  "booleanOrNull":null
+                }',
+                '{
+                  "type":"object",
+                  "properties":{
+                    "stringOrNumber":{"type":["string","number"]},
+                    "booleanOrNull":{"type":["boolean","null"]}
+                  }
+                }'
+            )
+        );
+    }
+}
diff --git a/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/Constraints/UniqueItemsTest.php b/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/Constraints/UniqueItemsTest.php
new file mode 100644
index 0000000..3006bb4
--- /dev/null
+++ b/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/Constraints/UniqueItemsTest.php
@@ -0,0 +1,116 @@
+<?php
+
+/*
+ * This file is part of the JsonSchema package.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace JsonSchema\Tests\Constraints;
+
+class UniqueItemsTest extends BaseTestCase
+{
+    public function getInvalidTests()
+    {
+        return array(
+            array(
+                '[1,2,2]',
+                '{
+                  "type":"array",
+                  "uniqueItems": true
+                }'
+            ),
+            array(
+                '[{"a":"b"},{"a":"c"},{"a":"b"}]',
+                '{
+                  "type":"array",
+                  "uniqueItems": true
+                }'
+            ),
+            array(
+                '[{"foo": {"bar" : {"baz" : true}}}, {"foo": {"bar" : {"baz" : true}}}]',
+                '{
+                    "type": "array",
+                    "uniqueItems": true
+                }'
+            ),
+            array(
+                '[1.0, 1.00, 1]',
+                '{
+                    "type": "array",
+                    "uniqueItems": true
+                }'
+            ),
+            array(
+                '[["foo"], ["foo"]]',
+                '{
+                    "type": "array",
+                    "uniqueItems": true
+                }'
+            ),
+            array(
+                '[{}, [1], true, null, {}, 1]',
+                '{
+                    "type": "array",
+                    "uniqueItems": true
+                }'
+            )
+        );
+    }
+
+    public function getValidTests()
+    {
+        return array(
+            array(
+                '[1,2,3]',
+                '{
+                  "type":"array",
+                  "uniqueItems": true
+                }'
+            ),
+            array(
+                '[{"foo": 12}, {"bar": false}]',
+                '{
+                    "type": "array",
+                    "uniqueItems": true
+                }'
+            ),
+            array(
+                '[1, true]',
+                '{
+                    "type": "array",
+                    "uniqueItems": true
+                }'
+            ),
+            array(
+                '[0, false]',
+                '{
+                    "type": "array",
+                    "uniqueItems": true
+                }'
+            ),
+            array(
+                '[{"foo": {"bar" : {"baz" : true}}}, {"foo": {"bar" : {"baz" : false}}}]',
+                '{
+                    "type": "array",
+                    "uniqueItems": true
+                }'
+            ),
+            array(
+                '[["foo"], ["bar"]]',
+                '{
+                    "type": "array",
+                    "uniqueItems": true
+                }'
+            ),
+            array(
+                '[{}, [1], true, null, 1]',
+                '{
+                    "type": "array",
+                    "uniqueItems": true
+                }'
+            )
+        );
+    }
+}
diff --git a/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/Constraints/WrongMessagesFailingTestCaseTest.php b/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/Constraints/WrongMessagesFailingTestCaseTest.php
new file mode 100644
index 0000000..ca62042
--- /dev/null
+++ b/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/Constraints/WrongMessagesFailingTestCaseTest.php
@@ -0,0 +1,51 @@
+<?php
+
+/*
+ * This file is part of the JsonSchema package.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace JsonSchema\Tests\Constraints;
+
+class WrongMessagesFailingTestCaseTest extends BaseTestCase
+{
+    public function getInvalidTests()
+    {
+        return array(
+            array(
+                '{
+                  "stringOrNumber":4.8,
+                  "booleanOrNull":["A","B"]
+                }',
+                '{
+                  "type":"object",
+                  "properties":{
+                    "stringOrNumber":{"type":["string","number"]},
+                    "booleanOrNull":{"type":["boolean","null"]}
+                  }
+                }'
+            )
+        );
+    }
+
+    public function getValidTests()
+    {
+        return array(
+            array(
+                '{
+                  "stringOrNumber":4.8,
+                  "booleanOrNull":true
+                }',
+                '{
+                  "type":"object",
+                  "properties":{
+                    "stringOrNumber":{"type":["string","number"]},
+                    "booleanOrNull":{"type":["boolean","null"]}
+                  }
+                }'
+            )
+        );
+    }
+}
diff --git a/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/DisallowTest.php b/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/DisallowTest.php
deleted file mode 100644
index a9ace32..0000000
--- a/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/DisallowTest.php
+++ /dev/null
@@ -1,74 +0,0 @@
-<?php
-
-namespace JsonSchema\Tests;
-
-class DisallowTest extends BaseTestCase
-{
-    public function getInvalidTests()
-    {
-        return array(
-            array(
-                '{
-                  "value":" The xpto is weird"
-                }',
-                '{
-                  "type":"object",
-                  "properties":{
-                    "value":{
-                      "type":"any",
-                      "disallow":{"type":"string","pattern":"xpto"}
-                    }
-                  }
-                }'
-            ),
-            array(
-                '{
-                  "value":null
-                }',
-                '{
-                  "type":"object",
-                  "properties":{
-                    "value":{
-                      "type":"any",
-                      "disallow":{"type":"null"}
-                    }
-                  }
-                }'
-            )
-        );
-    }
-
-    public function getValidTests()
-    {
-        return array(
-            array(
-                '{
-                  "value":" The xpto is weird"
-                }',
-                '{
-                  "type":"object",
-                  "properties":{
-                    "value":{
-                      "type":"any",
-                      "disallow":{"type":"string","pattern":"^xpto"}
-                    }
-                  }
-                }'
-            ),
-            array(
-                '{
-                  "value":1
-                }',
-                '{
-                  "type":"object",
-                  "properties":{
-                    "value":{
-                      "type":"any",
-                      "disallow":{"type":"null"}
-                    }
-                  }
-                }'
-            )
-        );
-    }
-}
diff --git a/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/DivisibleByTest.php b/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/DivisibleByTest.php
deleted file mode 100644
index 758edce..0000000
--- a/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/DivisibleByTest.php
+++ /dev/null
@@ -1,40 +0,0 @@
-<?php
-
-namespace JsonSchema\Tests;
-
-class DivisibleByTest extends BaseTestCase
-{
-    public function getInvalidTests()
-    {
-        return array(
-            array(
-                '{
-                  "value":5.6333
-                }',
-                '{
-                  "type":"object",
-                  "properties":{
-                    "value":{"type":"number","divisibleBy":3}
-                  }
-                }'
-            )
-        );
-    }
-
-    public function getValidTests()
-    {
-        return array(
-            array(
-                '{
-                  "value":6
-                }',
-                '{
-                  "type":"object",
-                  "properties":{
-                    "value":{"type":"number","divisibleBy":3}
-                  }
-                }'
-            )
-        );
-    }
-}
diff --git a/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/Drafts/BaseDraftTestCase.php b/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/Drafts/BaseDraftTestCase.php
new file mode 100644
index 0000000..d7a505b
--- /dev/null
+++ b/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/Drafts/BaseDraftTestCase.php
@@ -0,0 +1,48 @@
+<?php
+
+namespace JsonSchema\Tests\Drafts;
+
+use JsonSchema\Tests\Constraints\BaseTestCase;
+
+abstract class BaseDraftTestCase extends BaseTestCase
+{
+    protected $relativeTestsRoot = '/../../../../vendor/json-schema/JSON-Schema-Test-Suite/tests';
+
+    private function setUpTests($isValid)
+    {
+        $filePaths = $this->getFilePaths();
+        $skippedTests = $this->getSkippedTests();
+        $tests = array();
+
+        foreach ($filePaths as $path) {
+            foreach (glob($path . '/*.json') as $file) {
+                if (!in_array(basename($file), $skippedTests)) {
+                    $suites = json_decode(file_get_contents($file));
+                    foreach ($suites as $suite) {
+                        foreach ($suite->tests as $test) {
+                            if ($isValid === $test->valid) {
+                                $tests[] = array(json_encode($test->data), json_encode($suite->schema));
+                           }
+                        }
+                    }
+                }
+            }
+        }
+
+        return $tests;
+    }
+
+    public function getInvalidTests()
+    {
+        return $this->setUpTests(false);
+    }
+
+    public function getValidTests()
+    {
+        return $this->setUpTests(true);
+    }
+
+    protected abstract function getFilePaths();
+
+    protected abstract function getSkippedTests();
+}
diff --git a/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/Drafts/Draft3Test.php b/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/Drafts/Draft3Test.php
new file mode 100644
index 0000000..0c589ff
--- /dev/null
+++ b/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/Drafts/Draft3Test.php
@@ -0,0 +1,25 @@
+<?php
+
+namespace JsonSchema\Tests\Drafts;
+
+class Draft3Test extends BaseDraftTestCase
+{
+    protected function getFilePaths()
+    {
+        return array(
+            realpath(__DIR__ . $this->relativeTestsRoot . '/draft3'),
+            realpath(__DIR__ . $this->relativeTestsRoot . '/draft3/optional')
+        );
+    }
+
+    protected function getSkippedTests()
+    {
+        return array(
+            'ref.json',
+            'refRemote.json',
+            'bignum.json',
+            'jsregex.json',
+            'zeroTerminatedFloats.json'
+        );
+    }
+}
diff --git a/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/Drafts/Draft4Test.php b/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/Drafts/Draft4Test.php
new file mode 100644
index 0000000..3f1d566
--- /dev/null
+++ b/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/Drafts/Draft4Test.php
@@ -0,0 +1,29 @@
+<?php
+
+namespace JsonSchema\Tests\Drafts;
+
+class Draft4Test extends BaseDraftTestCase
+{
+    protected function getFilePaths()
+    {
+        return array(
+            realpath(__DIR__ . $this->relativeTestsRoot . '/draft4'),
+            realpath(__DIR__ . $this->relativeTestsRoot . '/draft4/optional')
+        );
+    }
+
+    protected function getSkippedTests()
+    {
+        return array(
+            // Not Yet Implemented
+            'definitions.json',
+            // Partially Implemented
+            'ref.json',
+            'refRemote.json',
+            // Optional
+            'bignum.json',
+            'zeroTerminatedFloats.json'
+        );
+    }
+
+}
\ No newline at end of file
diff --git a/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/EnumTest.php b/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/EnumTest.php
deleted file mode 100644
index 2efe731..0000000
--- a/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/EnumTest.php
+++ /dev/null
@@ -1,42 +0,0 @@
-<?php
-
-namespace JsonSchema\Tests;
-
-class EnumTest extends BaseTestCase
-{
-    public function getInvalidTests()
-    {
-        return array(
-            array(
-                '{
-                  "value":"Morango"
-                }',
-                '{
-                  "type":"object",
-                  "properties":{
-                    "value":{"type":"string","enum":["Abacate","Manga","Pitanga"]}
-                  },
-                  "additionalProperties":false
-                }'
-            )
-        );
-    }
-
-    public function getValidTests()
-    {
-        return array(
-            array(
-                '{
-                  "value":"Abacate"
-                }',
-                '{
-                  "type":"object",
-                  "properties":{
-                    "value":{"type":"string","enum":["Abacate","Manga","Pitanga"]}
-                  },
-                  "additionalProperties":false
-                }'
-            )
-        );
-    }
-}
diff --git a/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/ExtendsTest.php b/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/ExtendsTest.php
deleted file mode 100644
index 35675ae..0000000
--- a/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/ExtendsTest.php
+++ /dev/null
@@ -1,96 +0,0 @@
-<?php
-
-namespace JsonSchema\Tests;
-
-class ExtendsTest extends BaseTestCase
-{
-    public function getInvalidTests()
-    {
-        return array(
-            array(
-                '{
-                  "name":"bruno",
-                  "age":50
-                }',
-                '{
-                    "id": "person",
-                    "type": "object",
-                    "properties": {
-                        "name": {
-                            "type": "string"
-                        },
-                        "age" : {
-                            "type": "integer",
-                             "maximum":120
-                        }
-                    },
-                    "extends": {
-                        "id": "oldPerson",
-                        "type": "object",
-                        "properties": {
-                            "age" : {"minimum":70}
-                        }
-                    }
-                }'
-            ),
-            array(
-                '{
-                  "name":"bruno",
-                  "age":180
-                }',
-                '{
-                    "id": "person",
-                    "type": "object",
-                    "properties": {
-                        "name": {
-                            "type": "string"
-                        },
-                        "age" : {
-                            "type": "integer",
-                             "maximum":120
-                        }
-                    },
-                    "extends": {
-                        "id": "oldPerson",
-                        "type": "object",
-                        "properties": {
-                            "age" : {"minimum":70}
-                        }
-                    }
-                }'
-            )
-        );
-    }
-
-    public function getValidTests()
-    {
-        return array(
-            array(
-                '{
-                  "name":"bruno",
-                  "age":80
-                }',
-                '{
-                    "id": "person",
-                    "type": "object",
-                    "properties": {
-                        "name": {
-                            "type": "string"
-                        },
-                        "age" : {
-                            "type": "integer",
-                             "maximum":120
-                        }
-                    },
-                    "extends": {
-                        "id": "oldPerson",
-                        "type": "object",
-                        "properties": {
-                            "age" : {"minimum":70}
-                        }
-                    }
-                }'
-            )
-        );
-    }
-}
diff --git a/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/MinItemsMaxItemsTest.php b/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/MinItemsMaxItemsTest.php
deleted file mode 100644
index 1534749..0000000
--- a/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/MinItemsMaxItemsTest.php
+++ /dev/null
@@ -1,62 +0,0 @@
-<?php
-
-namespace JsonSchema\Tests;
-
-class MinItemsMaxItemsTest extends BaseTestCase
-{
-    public function getInvalidTests()
-    {
-        return array(
-            array(
-                '{
-                  "value":[2]
-                }',
-                '{
-                  "type":"object",
-                  "properties":{
-                    "value":{"type":"array","minItems":2,"maxItems":4}
-                  }
-                }'
-            ),
-            array(
-                '{
-                  "value":[2,2,5,8,5]
-                }',
-                '{
-                  "type":"object",
-                  "properties":{
-                    "value":{"type":"array","minItems":2,"maxItems":4}
-                  }
-                }'
-            )
-        );
-    }
-
-    public function getValidTests()
-    {
-        return array(
-            array(
-                '{
-                  "value":[2,2]
-                }',
-                '{
-                  "type":"object",
-                  "properties":{
-                    "value":{"type":"array","minItems":2,"maxItems":4}
-                  }
-                }'
-            ),
-            array(
-                '{
-                  "value":[2,2,5,8]
-                }',
-                '{
-                  "type":"object",
-                  "properties":{
-                    "value":{"type":"array","minItems":2,"maxItems":4}
-                  }
-                }'
-            )
-        );
-    }
-}
diff --git a/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/MinLengthMaxLengthTest.php b/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/MinLengthMaxLengthTest.php
deleted file mode 100644
index 4fb4614..0000000
--- a/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/MinLengthMaxLengthTest.php
+++ /dev/null
@@ -1,63 +0,0 @@
-<?php
-
-namespace JsonSchema\Tests;
-
-class MinLengthMaxLengthTest extends BaseTestCase
-{
-    public function getInvalidTests()
-    {
-        return array(
-            array(
-                '{
-                  "value":"w"
-                }',
-                '{
-                  "type":"object",
-                  "properties":{
-                    "value":{"type":"string","minLength":2,"maxLength":4}
-                  }
-                }'
-            ),
-            array(
-                '{
-                  "value":"wo7us"
-                }',
-                '{
-                  "type":"object",
-                  "properties":{
-                    "value":{"type":"string","minLength":2,"maxLength":4}
-                  }
-                }'
-            )
-        );
-    }
-
-    public function getValidTests()
-    {
-        return array(
-            array(
-                '{
-                  "value":"wo"
-                }',
-                '{
-                  "type":"object",
-                  "properties":{
-                    "value":{"type":"string","minLength":2,"maxLength":4}
-                  }
-                }'
-            ),
-            array(
-                '{
-                  "value":"wo7u"
-                }',
-                '{
-                  "type":"object",
-                  "properties":{
-                    "value":{"type":"string","minLength":2,"maxLength":4}
-                  }
-                }'
-            ),
-
-        );
-    }
-}
diff --git a/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/MinimumMaximumTest.php b/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/MinimumMaximumTest.php
deleted file mode 100644
index 283b29f..0000000
--- a/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/MinimumMaximumTest.php
+++ /dev/null
@@ -1,62 +0,0 @@
-<?php
-
-namespace JsonSchema\Tests;
-
-class MinimumMaximumTest extends BaseTestCase
-{
-    public function getInvalidTests()
-    {
-        return array(
-            array(
-                '{
-                  "value":2
-                }',
-                '{
-                  "type":"object",
-                  "properties":{
-                    "value":{"type":"integer","minimum":4}
-                  }
-                }'
-            ),
-            array(
-                '{
-                  "value":16
-                }',
-                '{
-                  "type":"object",
-                  "properties":{
-                    "value":{"type":"integer","maximum":8}
-                  }
-                }'
-            )
-        );
-    }
-
-    public function getValidTests()
-    {
-        return array(
-            array(
-                '{
-                  "value":6
-                }',
-                '{
-                  "type":"object",
-                  "properties":{
-                    "value":{"type":"integer","minimum":4}
-                  }
-                }'
-            ),
-            array(
-                '{
-                  "value":6
-                }',
-                '{
-                  "type":"object",
-                  "properties":{
-                    "value":{"type":"integer","maximum":8}
-                  }
-                }'
-            )
-        );
-    }
-}
diff --git a/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/NumberAndIntegerTypesTest.php b/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/NumberAndIntegerTypesTest.php
deleted file mode 100644
index fb57ec1..0000000
--- a/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/NumberAndIntegerTypesTest.php
+++ /dev/null
@@ -1,51 +0,0 @@
-<?php
-
-namespace JsonSchema\Tests;
-
-class NumberAndIntegerTypesTest extends BaseTestCase
-{
-    public function getInvalidTests()
-    {
-        return array(
-            array(
-                '{
-                  "number": 1.4
-                }',
-                '{
-                  "type":"object",
-                  "properties":{
-                    "number":{"type":"integer"}
-                  }
-                }'
-            )
-        );
-    }
-
-    public function getValidTests()
-    {
-        return array(
-            array(
-                '{
-                  "number": 1
-                }',
-                '{
-                  "type":"object",
-                  "properties":{
-                    "number":{"type":"number"}
-                  }
-                }'
-            ),
-            array(
-                '{
-                  "number": 1.4
-                }',
-                '{
-                  "type":"object",
-                  "properties":{
-                    "number":{"type":"number"}
-                  }
-                }'
-            )
-        );
-    }
-}
diff --git a/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/PatternTest.php b/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/PatternTest.php
deleted file mode 100644
index 9c984cf..0000000
--- a/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/PatternTest.php
+++ /dev/null
@@ -1,54 +0,0 @@
-<?php
-
-namespace JsonSchema\Tests;
-
-class PatternTest extends BaseTestCase
-{
-    public function getInvalidTests()
-    {
-        return array(
-            array(
-                '{
-                  "value":"Abacates"
-                }',
-                '{
-                  "type":"object",
-                  "properties":{
-                    "value":{"type":"string","pattern":"^cat"}
-                  },
-                  "additionalProperties":false
-                }'
-            )
-        );
-    }
-
-    public function getValidTests()
-    {
-        return array(
-            array(
-                '{
-                  "value":"Abacates"
-                }',
-                '{
-                  "type":"object",
-                  "properties":{
-                    "value":{"type":"string","pattern":"tes$"}
-                  },
-                  "additionalProperties":false
-                }'
-            ),
-            array(
-                '{
-                  "value":"Abacates"
-                }',
-                '{
-                  "type":"object",
-                  "properties":{
-                    "value":{"type":"string","pattern":"cat"}
-                  },
-                  "additionalProperties":false
-                }'
-            )
-        );
-    }
-}
diff --git a/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/PhpTypeCastModeTest.php b/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/PhpTypeCastModeTest.php
deleted file mode 100644
index f9cdba1..0000000
--- a/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/PhpTypeCastModeTest.php
+++ /dev/null
@@ -1,85 +0,0 @@
-<?php
-
-namespace JsonSchema\Tests;
-
-use JsonSchema\Validator;
-
-class PhpTypeCastModeTest extends BaseTestCase
-{
-    public function getInvalidTests()
-    {
-        return array(
-            array(
-                '{
-                  "a":"c"
-                }',
-                '{
-                  "type":"object",
-                  "properties":{
-                    "a":{"type":"number"}
-                  }
-                }',
-                null,
-                array(
-                    array(
-                        'property' => 'a',
-                        'message'  => 'string value found, but a number is required'
-                    )
-                )
-            ),
-            array(
-                '{
-                  "a":"9"
-                }',
-                '{
-                  "type":"object",
-                  "properties":{
-                    "a":{"type":"integer","maximum":"8"}
-                  }
-                }'
-            )
-        );
-    }
-
-    public function getValidTests()
-    {
-        return array(
-            array(
-                '{
-                  "a":"7"
-                }',
-                '{
-                  "type":"object",
-                  "properties":{
-                    "a":{"type":"integer","maximum":8}
-                  }
-                }',
-                Validator::CHECK_MODE_TYPE_CAST
-            ),
-            array(
-                '{
-                  "a":1.337
-                }',
-                '{
-                  "type":"object",
-                  "properties":{
-                    "a":{"type":"number","maximum":8.0}
-                  }
-                }',
-                Validator::CHECK_MODE_TYPE_CAST
-            ),
-            array(
-                '{
-                  "a":"9e42"
-                }',
-                '{
-                  "type":"object",
-                  "properties":{
-                    "a":{"type":"number"}
-                  }
-                }',
-                Validator::CHECK_MODE_TYPE_CAST
-            ),
-        );
-    }
-}
diff --git a/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/ReadOnlyTest.php b/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/ReadOnlyTest.php
deleted file mode 100644
index 293e5dd..0000000
--- a/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/ReadOnlyTest.php
+++ /dev/null
@@ -1,39 +0,0 @@
-<?php
-
-namespace JsonSchema\Tests;
-
-class ReadOnlyTest extends BaseTestCase
-{
-    public function getInvalidTests()
-    {
-        //is readonly really required?
-        return array(
-            array(
-                '{ "number": [] }',
-                '{
-                  "type":"object",
-                  "properties":{
-                    "number":{"type":"string","readonly":true}
-                  }
-                }'
-            )
-        );
-    }
-
-    public function getValidTests()
-    {
-        return array(
-            array(
-                '{
-                  "number": "1.4"
-                }',
-                '{
-                  "type":"object",
-                  "properties":{
-                    "number":{"type":"string","readonly":true}
-                  }
-                }'
-            )
-        );
-    }
-}
diff --git a/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/RefResolverTest.php b/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/RefResolverTest.php
new file mode 100644
index 0000000..49e83ac
--- /dev/null
+++ b/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/RefResolverTest.php
@@ -0,0 +1,318 @@
+<?php
+
+/*
+ * This file is part of the JsonSchema package.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace JsonSchema\Tests;
+
+/**
+ * @group RefResolver
+ */
+class RefResolverTest extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * @dataProvider resolveProvider
+     */
+    public function testResolve($input, $methods)
+    {
+        $resolver = $this->getMock('JsonSchema\RefResolver', array_keys($methods));
+        foreach ($methods as $methodName => $methodInvocationCount) {
+            $resolver->expects($this->exactly($methodInvocationCount))
+                ->method($methodName);
+        }
+        $resolver->resolve($input);
+    }
+
+    public function resolveProvider() {
+        return array(
+            'non-object' => array(
+                'string',
+                array(
+                    'resolveRef' => 0,
+                    'resolveProperty' => 0,
+                    'resolveArrayOfSchemas' => 0,
+                    'resolveObjectOfSchemas' => 0
+                )
+            ),
+            'empty object' => array(
+                (object) array(),
+                array(
+                    'resolveRef' => 1,
+                    'resolveProperty' => 4,
+                    'resolveArrayOfSchemas' => 7,
+                    'resolveObjectOfSchemas' => 3
+                )
+            )
+        );
+    }
+
+    /**
+     * Helper method for resolve* methods
+     */
+    public function helperResolveMethods($method, $input, $calls) {
+        $resolver = $this->getMock('JsonSchema\RefResolver', array('resolve'));
+        $resolver->expects($this->exactly($calls[$method]))
+            ->method('resolve');
+        $resolver->$method($input, 'testProp', 'http://example.com/');
+    }
+
+    /**
+     * @dataProvider testSchemas
+     */
+    public function testResolveArrayOfSchemas($input, $calls) {
+        $this->helperResolveMethods('resolveArrayOfSchemas', $input, $calls);
+    }
+
+    /**
+     * @dataProvider testSchemas
+     */
+    public function testResolveObjectOfSchemas($input, $calls) {
+        $this->helperResolveMethods('resolveObjectOfSchemas', $input, $calls);
+    }
+
+    public function testSchemas() {
+        return array(
+            'non-object' => array(
+                (object) array(
+                    'testProp' => 'string'
+                ),
+                array(
+                    'resolveArrayOfSchemas' => 0,
+                    'resolveObjectOfSchemas' => 0,
+                    'resolveProperty' => 0
+                )
+            ),
+            'undefined' => array(
+                (object) array(
+                ),
+                array(
+                    'resolveArrayOfSchemas' => 0,
+                    'resolveObjectOfSchemas' => 0,
+                    'resolveProperty' => 0
+                )
+            ),
+            'empty object' => array(
+                (object) array(
+                    'testProp' => (object) array()
+                ),
+                array(
+                    'resolveArrayOfSchemas' => 0,
+                    'resolveObjectOfSchemas' => 0,
+                    'resolveProperty' => 1
+                )
+            ),
+            'filled object' => array(
+                (object) array(
+                    'testProp' => (object) array(
+                        'one' => array(),
+                        'two' => array()
+                    )
+                ),
+                array(
+                    'resolveArrayOfSchemas' => 0,
+                    'resolveObjectOfSchemas' => 2,
+                    'resolveProperty' => 1
+                )
+            ),
+            'empty array' => array(
+                (object) array(
+                    'testProp' => array()
+                ),
+                array(
+                    'resolveArrayOfSchemas' => 0,
+                    'resolveObjectOfSchemas' => 0,
+                    'resolveProperty' => 1
+                )
+            ),
+            'filled array' => array(
+                (object) array(
+                    'testProp' => array(1, 2, 3)
+                ),
+                array(
+                    'resolveArrayOfSchemas' => 3,
+                    'resolveObjectOfSchemas' => 0,
+                    'resolveProperty' => 1
+                )
+            )
+        );
+    }
+
+    /**
+     * @dataProvider refProvider
+     */
+    public function testResolveRef($expected, $input) {
+        $resolver = $this->getMock('JsonSchema\RefResolver', array('fetchRef'));
+        $resolver->expects($this->any())
+            ->method('fetchRef')
+            ->will($this->returnValue((object) array(
+                'this was' => array('added', 'because'),
+                'the' => (object) array('$ref resolved' => true)
+            )));
+        $resolver->resolveRef($input, 'http://example.com');
+        $this->assertEquals($expected, $input);
+    }
+
+    public function refProvider() {
+        return array(
+            'no ref' => array(
+                (object) array('test' => 'one'),
+                (object) array('test' => 'one')
+            ),
+            // The $ref is not removed here
+            'empty ref' => array(
+                (object) array(
+                    'test' => 'two',
+                    '$ref' => ''
+                ),
+                (object) array(
+                    'test' => 'two',
+                    '$ref' => ''
+                )
+            ),
+            // $ref is removed
+            'qualified ref' => array(
+                (object) array(
+                    'this is' => 'another test',
+                    'this was' => array('added', 'because'),
+                    'the' => (object) array('$ref resolved' => true)
+                ),
+                (object) array(
+                    '$ref' => 'http://example.com/',
+                    'this is' => 'another test'
+                )
+            ),
+        );
+    }
+
+    public function testFetchRefAbsolute()
+    {
+        $retr = new \JsonSchema\Uri\Retrievers\PredefinedArray(
+            array(
+                'http://example.org/schema' => <<<JSN
+{
+    "title": "schema",
+    "type": "object",
+    "id": "http://example.org/schema"
+}
+JSN
+            )
+        );
+
+        $res = new \JsonSchema\RefResolver();
+        $res->getUriRetriever()->setUriRetriever($retr);
+
+        $this->assertEquals(
+            (object) array(
+                'title' => 'schema',
+                'type'  => 'object',
+                'id'    => 'http://example.org/schema'
+            ),
+            $res->fetchRef('http://example.org/schema', 'http://example.org/schema')
+        );
+    }
+
+    public function testFetchRefAbsoluteAnchor()
+    {
+        $retr = new \JsonSchema\Uri\Retrievers\PredefinedArray(
+            array(
+                'http://example.org/schema' => <<<JSN
+{
+    "title": "schema",
+    "type": "object",
+    "id": "http://example.org/schema",
+    "definitions": {
+        "foo": {
+            "type": "object",
+            "title": "foo"
+        }
+    }
+}
+JSN
+            )
+        );
+
+        $res = new \JsonSchema\RefResolver();
+        $res->getUriRetriever()->setUriRetriever($retr);
+
+        $this->assertEquals(
+            (object) array(
+                'title' => 'foo',
+                'type'  => 'object',
+                'id'    => 'http://example.org/schema#/definitions/foo',
+            ),
+            $res->fetchRef(
+                'http://example.org/schema#/definitions/foo',
+                'http://example.org/schema'
+            )
+        );
+    }
+
+    public function testFetchRefRelativeAnchor()
+    {
+        $retr = new \JsonSchema\Uri\Retrievers\PredefinedArray(
+            array(
+                'http://example.org/schema' => <<<JSN
+{
+    "title": "schema",
+    "type": "object",
+    "id": "http://example.org/schema",
+    "definitions": {
+        "foo": {
+            "type": "object",
+            "title": "foo"
+        }
+    }
+}
+JSN
+            )
+        );
+
+        $res = new \JsonSchema\RefResolver();
+        $res->getUriRetriever()->setUriRetriever($retr);
+
+        $this->assertEquals(
+            (object) array(
+                'title' => 'foo',
+                'type'  => 'object',
+                'id'    => 'http://example.org/schema#/definitions/foo',
+            ),
+            $res->fetchRef(
+                '#/definitions/foo',
+                'http://example.org/schema'
+            )
+        );
+    }
+
+    public function testSetGetUriRetriever()
+    {
+        $retriever = new \JsonSchema\Uri\UriRetriever;
+        $resolver  = new \JsonSchema\RefResolver;
+        $this->assertInstanceOf('JsonSchema\Uri\UriRetriever', $resolver->getUriRetriever());
+        $this->assertInstanceOf('JsonSchema\RefResolver', $resolver->setUriRetriever($retriever));
+    }
+
+    public function testFetchRef()
+    {
+        // stub schema
+        $jsonSchema = new \stdClass;
+        $jsonSchema->id = 'stub';
+        $jsonSchema->additionalItems = 'stub';
+        $ref        = 'ref';
+        $sourceUri  = null;
+
+
+        // mock retriever
+        $retriever  = $this->getMock('JsonSchema\Uri\UriRetriever', array('retrieve'));
+        $retriever->expects($this->any())->method('retrieve')->will($this->returnValue($jsonSchema));
+
+        // stub resolver
+        $resolver   = new \JsonSchema\RefResolver;
+        $resolver->setUriRetriever($retriever);
+
+        $this->assertEquals($jsonSchema, $resolver->fetchRef($ref, $sourceUri));
+    }
+}
diff --git a/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/RequireTest.php b/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/RequireTest.php
deleted file mode 100644
index 7b9f6b6..0000000
--- a/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/RequireTest.php
+++ /dev/null
@@ -1,43 +0,0 @@
-<?php
-
-namespace JsonSchema\Tests;
-
-class RequireTest extends BaseTestCase
-{
-    public function getInvalidTests()
-    {
-        return array(
-            array(
-                '{
-                  "state":"DF"
-                }',
-                '{
-                  "type":"object",
-                  "properties":{
-                    "state":{"type":"string","requires":"city"},
-                    "city":{"type":"string"}
-                  }
-                }'
-            )
-        );
-    }
-
-    public function getValidTests()
-    {
-        return array(
-            array(
-                '{
-                  "state":"DF",
-                  "city":"Brasília"
-                }',
-                '{
-                  "type":"object",
-                  "properties":{
-                    "state":{"type":"string","requires":"city"},
-                    "city":{"type":"string"}
-                  }
-                }'
-            )
-        );
-    }
-}
diff --git a/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/RequiredPropertyTest.php b/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/RequiredPropertyTest.php
deleted file mode 100644
index eb813d0..0000000
--- a/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/RequiredPropertyTest.php
+++ /dev/null
@@ -1,47 +0,0 @@
-<?php
-
-namespace JsonSchema\Tests;
-
-class RequiredPropertyTest extends BaseTestCase
-{
-    public function getInvalidTests()
-    {
-        return array(
-            array(
-                '{}',
-                '{
-                  "type":"object",
-                  "properties":{
-                    "number":{"type":"string","required":true}
-                  }
-                }'
-            )
-        );
-    }
-
-    public function getValidTests()
-    {
-        return array(
-            array(
-                '{
-                  "number": "1.4"
-                }',
-                '{
-                  "type":"object",
-                  "properties":{
-                    "number":{"type":"string","required":true}
-                  }
-                }'
-            ),
-            array(
-                '{}',
-                '{
-                  "type":"object",
-                  "properties":{
-                    "number":{"type":"string"}
-                  }
-                }'
-            )
-        );
-    }
-}
diff --git a/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/SelfDefinedSchemaTest.php b/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/SelfDefinedSchemaTest.php
deleted file mode 100644
index b2d6554..0000000
--- a/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/SelfDefinedSchemaTest.php
+++ /dev/null
@@ -1,56 +0,0 @@
-<?php
-
-namespace JsonSchema\Tests;
-
-class SelfDefinedSchemaTest extends BaseTestCase
-{
-    public function getInvalidTests()
-    {
-        return array(
-            array(
-                '{
-                    "$schema": {
-                        "properties": {
-                            "name": {
-                                "type": "string"
-                            },
-                            "age" : {
-                                "type": "integer",
-                                "maximum": 25
-                            }
-                        }
-                    },
-                    "name" : "John Doe",
-                    "age" : 30,
-                    "type" : "object"
-                }',
-                ''
-            )
-        );
-    }
-
-    public function getValidTests()
-    {
-        return array(
-            array(
-                '{
-                    "$schema": {
-                        "properties": {
-                            "name": {
-                                "type": "string"
-                            },
-                            "age" : {
-                                "type": "integer",
-                                "maximum": 125
-                            }
-                        }
-                    },
-                    "name" : "John Doe",
-                    "age" : 30,
-                    "type" : "object"
-                }',
-                ''
-            )
-        );
-    }
-}
diff --git a/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/TupleTypingTest.php b/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/TupleTypingTest.php
deleted file mode 100644
index ec09df1..0000000
--- a/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/TupleTypingTest.php
+++ /dev/null
@@ -1,107 +0,0 @@
-<?php
-
-namespace JsonSchema\Tests;
-
-class TupleTypingTest extends BaseTestCase
-{
-    public function getInvalidTests()
-    {
-        return array(
-            array(
-                '{
-                  "tupleTyping":[2,"a"]
-                }',
-                '{
-                  "type":"object",
-                  "properties":{
-                    "tupleTyping":{
-                      "type":"array",
-                      "items":[
-                        {"type":"string"},
-                        {"type":"number"}
-                      ]
-                    }
-                  }
-                }'
-            ),
-            array(
-                '{
-                  "tupleTyping":["2",2,3]
-                }',
-                '{
-                  "type":"object",
-                  "properties":{
-                    "tupleTyping":{
-                      "type":"array",
-                      "items":[
-                        {"type":"string"},
-                        {"type":"number"}
-                      ] ,
-                      "additionalProperties":false
-                    }
-                  }
-                }'
-            ),
-            array(
-                '{
-                  "tupleTyping":["2",2,3]
-                }',
-                '{
-                  "type":"object",
-                  "properties":{
-                    "tupleTyping":{
-                      "type":"array",
-                      "items":[
-                        {"type":"string"},
-                        {"type":"number"}
-                      ] ,
-                      "additionalProperties":{"type":"string"}
-                    }
-                  }
-                }'
-            ),
-            array(
-                '{
-                  "tupleTyping":["2"]
-                }',
-                '{
-                  "type":"object",
-                  "properties":{
-                    "tupleTyping":{
-                      "type":"array",
-                      "items":[
-                        {"type":"string"},
-                        {"type":"number"},
-                        {"required":true}
-                      ]
-                    }
-                  }
-                }'
-            )
-        );
-    }
-
-    public function getValidTests()
-    {
-        return array(
-            array(
-                '{
-                  "tupleTyping":["2"]
-                }',
-                '{
-                  "type":"object",
-                  "properties":{
-                    "tupleTyping":{
-                      "type":"array",
-                      "items":[
-                        {"type":"string"},
-                        {"type":"number","required":false},
-                        {"type":"number","required":false}
-                      ]
-                    }
-                  }
-                }'
-            )
-        );
-    }
-}
diff --git a/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/UnionTypesTest.php b/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/UnionTypesTest.php
deleted file mode 100644
index 2f9ba74..0000000
--- a/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/UnionTypesTest.php
+++ /dev/null
@@ -1,44 +0,0 @@
-<?php
-
-namespace JsonSchema\Tests;
-
-class UnionTypesTest extends BaseTestCase
-{
-    public function getInvalidTests()
-    {
-        return array(
-            array(
-                '{
-                  "stringOrNumber":4.8,
-                  "booleanOrNull":5
-                }',
-                '{
-                  "type":"object",
-                  "properties":{
-                    "stringOrNumber":{"type":["string","number"]},
-                    "booleanOrNull":{"type":["boolean","null"]}
-                  }
-                }'
-            )
-        );
-    }
-
-    public function getValidTests()
-    {
-        return array(
-            array(
-                '{
-                  "stringOrNumber":4.8,
-                  "booleanOrNull":false
-                }',
-                '{
-                  "type":"object",
-                  "properties":{
-                    "stringOrNumber":{"type":["string","number"]},
-                    "booleanOrNull":{"type":["boolean","null"]}
-                  }
-                }'
-            )
-        );
-    }
-}
diff --git a/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/UnionWithNullValueTest.php b/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/UnionWithNullValueTest.php
deleted file mode 100644
index 8738856..0000000
--- a/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/UnionWithNullValueTest.php
+++ /dev/null
@@ -1,44 +0,0 @@
-<?php
-
-namespace JsonSchema\Tests;
-
-class UnionWithNullValueTest extends BaseTestCase
-{
-    public function getInvalidTests()
-    {
-        return array(
-            array(
-                '{
-                  "stringOrNumber":null,
-                  "booleanOrNull":null
-                }',
-                '{
-                  "type":"object",
-                  "properties":{
-                    "stringOrNumber":{"type":["string","number"]},
-                    "booleanOrNull":{"type":["boolean","null"]}
-                  }
-                }'
-            )
-        );
-    }
-
-    public function getValidTests()
-    {
-        return array(
-            array(
-                '{
-                  "stringOrNumber":12,
-                  "booleanOrNull":null
-                }',
-                '{
-                  "type":"object",
-                  "properties":{
-                    "stringOrNumber":{"type":["string","number"]},
-                    "booleanOrNull":{"type":["boolean","null"]}
-                  }
-                }'
-            )
-        );
-    }
-}
diff --git a/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/UniqueItemsTest.php b/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/UniqueItemsTest.php
deleted file mode 100644
index 953570d..0000000
--- a/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/UniqueItemsTest.php
+++ /dev/null
@@ -1,39 +0,0 @@
-<?php
-
-namespace JsonSchema\Tests;
-
-class UniqueItemsTest extends BaseTestCase
-{
-    public function getInvalidTests()
-    {
-        return array(
-            array(
-                '[1,2,2]',
-                '{
-                  "type":"array",
-                  "uniqueItems": true
-                }'
-            ),
-/*            array(
-                '[{"a":"b"},{"a":"c"},{"a":"b"}]',
-                '{
-                  "type":"array",
-                  "uniqueItems": true
-                }'
-            )*/
-        );
-    }
-
-    public function getValidTests()
-    {
-        return array(
-            array(
-                '[1,2,3]',
-                '{
-                  "type":"array",
-                  "uniqueItems": true
-                }'
-            )
-        );
-    }
-}
diff --git a/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/Uri/Retrievers/PredefinedArrayTest.php b/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/Uri/Retrievers/PredefinedArrayTest.php
new file mode 100644
index 0000000..d01b835
--- /dev/null
+++ b/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/Uri/Retrievers/PredefinedArrayTest.php
@@ -0,0 +1,43 @@
+<?php
+
+namespace JsonSchema\Tests\Uri\Retrievers;
+
+use JsonSchema\Uri\Retrievers\PredefinedArray;
+
+/**
+ * @group PredefinedArray
+ */
+class PredefinedArrayTest extends \PHPUnit_Framework_TestCase
+{
+    private $retriever;
+
+    public function setUp()
+    {
+        $this->retriever = new PredefinedArray(
+            array(
+                'http://acme.com/schemas/person#'  => 'THE_PERSON_SCHEMA',
+                'http://acme.com/schemas/address#' => 'THE_ADDRESS_SCHEMA',
+            ),
+            'THE_CONTENT_TYPE'
+        );
+    }
+
+    public function testRetrieve()
+    {
+        $this->assertEquals('THE_PERSON_SCHEMA', $this->retriever->retrieve('http://acme.com/schemas/person#'));
+        $this->assertEquals('THE_ADDRESS_SCHEMA', $this->retriever->retrieve('http://acme.com/schemas/address#'));
+    }
+
+    /**
+     * @expectedException JsonSchema\Exception\ResourceNotFoundException
+     */
+    public function testRetrieveNonExistsingSchema()
+    {
+        $this->retriever->retrieve('http://acme.com/schemas/plop#');
+    }
+
+    public function testGetContentType()
+    {
+        $this->assertEquals('THE_CONTENT_TYPE', $this->retriever->getContentType());
+    }
+}
diff --git a/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/Uri/UriResolverTest.php b/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/Uri/UriResolverTest.php
new file mode 100644
index 0000000..872972f
--- /dev/null
+++ b/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/Uri/UriResolverTest.php
@@ -0,0 +1,174 @@
+<?php
+namespace JsonSchema\Tests\Uri;
+
+use JsonSchema\Uri\UriResolver;
+
+class UriResolverTest extends \PHPUnit_Framework_TestCase
+{
+    public function setUp()
+    {
+        $this->resolver = new UriResolver();
+    }
+
+    public function testParse()
+    {
+        $this->assertEquals(
+            array(
+                'scheme'    => 'http',
+                'authority' => 'example.org',
+                'path'      => '/path/to/file.json'
+            ),
+            $this->resolver->parse('http://example.org/path/to/file.json')
+        );
+    }
+
+    public function testParseAnchor()
+    {
+        $this->assertEquals(
+            array(
+                'scheme'    => 'http',
+                'authority' => 'example.org',
+                'path'      => '/path/to/file.json',
+                'query'     => '',
+                'fragment'  => 'foo'
+            ),
+            $this->resolver->parse('http://example.org/path/to/file.json#foo')
+        );
+    }
+
+    public function testCombineRelativePathWithBasePath()
+    {
+        $this->assertEquals(
+            '/foo/baz.json',
+            UriResolver::combineRelativePathWithBasePath(
+                'baz.json',
+                '/foo/bar.json'
+            )
+        );
+    }
+
+    public function testCombineRelativePathWithBasePathAbsolute()
+    {
+        $this->assertEquals(
+            '/baz/data.json',
+            UriResolver::combineRelativePathWithBasePath(
+                '/baz/data.json',
+                '/foo/bar.json'
+            )
+        );
+    }
+
+    public function testCombineRelativePathWithBasePathRelativeSub()
+    {
+        $this->assertEquals(
+            '/foo/baz/data.json',
+            UriResolver::combineRelativePathWithBasePath(
+                'baz/data.json',
+                '/foo/bar.json'
+            )
+        );
+    }
+
+    public function testCombineRelativePathWithBasePathNoPath()
+    {
+        //needed for anchor-only urls
+        $this->assertEquals(
+            '/foo/bar.json',
+            UriResolver::combineRelativePathWithBasePath(
+                '',
+                '/foo/bar.json'
+            )
+        );
+    }
+
+    public function testResolveAbsoluteUri()
+    {
+        $this->assertEquals(
+            'http://example.org/foo/bar.json',
+            $this->resolver->resolve(
+                'http://example.org/foo/bar.json',
+                null
+            )
+        );
+    }
+
+    /**
+     * @expectedException JsonSchema\Exception\UriResolverException
+     */
+    public function testResolveRelativeUriNoBase()
+    {
+        $this->assertEquals(
+            'http://example.org/foo/bar.json',
+            $this->resolver->resolve(
+                'bar.json',
+                null
+            )
+        );
+    }
+
+    public function testResolveRelativeUriBaseDir()
+    {
+        $this->assertEquals(
+            'http://example.org/foo/bar.json',
+            $this->resolver->resolve(
+                'bar.json',
+                'http://example.org/foo/'
+            )
+        );
+    }
+
+    public function testResolveRelativeUriBaseFile()
+    {
+        $this->assertEquals(
+            'http://example.org/foo/bar.json',
+            $this->resolver->resolve(
+                'bar.json',
+                'http://example.org/foo/baz.json'
+            )
+        );
+    }
+
+    public function testResolveAnchor()
+    {
+        $this->assertEquals(
+            'http://example.org/foo/bar.json#baz',
+            $this->resolver->resolve(
+                '#baz',
+                'http://example.org/foo/bar.json'
+            )
+        );
+    }
+
+    public function testResolveAnchorWithFile()
+    {
+        $this->assertEquals(
+            'http://example.org/foo/baz.json#baz',
+            $this->resolver->resolve(
+                'baz.json#baz',
+                'http://example.org/foo/bar.json'
+            )
+        );
+    }
+    public function testResolveAnchorAnchor()
+    {
+        $this->assertEquals(
+            'http://example.org/foo/bar.json#bazinga',
+            $this->resolver->resolve(
+                '#bazinga',
+                'http://example.org/foo/bar.json#baz'
+            )
+        );
+    }
+
+    public function testResolveEmpty()
+    {
+        $this->assertEquals(
+            'http://example.org/foo/bar.json',
+            $this->resolver->resolve(
+                '',
+                'http://example.org/foo/bar.json'
+            )
+        );
+    }
+}
+?>
diff --git a/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/Uri/UriRetrieverTest.php b/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/Uri/UriRetrieverTest.php
new file mode 100644
index 0000000..7409fd2
--- /dev/null
+++ b/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/Uri/UriRetrieverTest.php
@@ -0,0 +1,236 @@
+<?php
+
+/*
+ * This file is part of the JsonSchema package.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace JsonSchema\Tests\Uri;
+
+use JsonSchema\Exception\JsonDecodingException;
+use JsonSchema\Validator;
+
+/**
+ * @group UriRetriever
+ */
+class UriRetrieverTest extends \PHPUnit_Framework_TestCase
+{
+    protected $validator;
+
+    protected function setUp()
+    {
+        $this->validator = new Validator();
+    }
+
+    private function getRetrieverMock($returnSchema, $returnMediaType = Validator::SCHEMA_MEDIA_TYPE)
+    {
+
+        $jsonSchema = json_decode($returnSchema);
+
+        if (JSON_ERROR_NONE < $error = json_last_error()) {
+            throw new JsonDecodingException($error);
+        }
+
+        $retriever = $this->getMock('JsonSchema\Uri\UriRetriever', array('retrieve'));
+
+        $retriever->expects($this->at(0))
+                  ->method('retrieve')
+                  ->with($this->equalTo(null), $this->equalTo('http://some.host.at/somewhere/parent'))
+                  ->will($this->returnValue($jsonSchema));
+
+        return $retriever;
+    }
+
+    /**
+     * @dataProvider jsonProvider
+     */
+    public function testChildExtendsParentValidTest($childSchema, $parentSchema)
+    {
+        $retrieverMock = $this->getRetrieverMock($parentSchema);
+
+        $json = '{"childProp":"infant", "parentProp":false}';
+        $decodedJson = json_decode($json);
+        $decodedJsonSchema = json_decode($childSchema);
+
+        $this->validator->setUriRetriever($retrieverMock);
+        $this->validator->check($decodedJson, $decodedJsonSchema);
+        $this->assertTrue($this->validator->isValid());
+    }
+
+    /**
+     * @dataProvider jsonProvider
+     */
+    public function testChildExtendsParentInvalidChildTest($childSchema, $parentSchema)
+    {
+        $retrieverMock = $this->getRetrieverMock($parentSchema);
+
+        $json = '{"childProp":1, "parentProp":false}';
+        $decodedJson = json_decode($json);
+        $decodedJsonSchema = json_decode($childSchema);
+
+        $this->validator->setUriRetriever($retrieverMock);
+        $this->validator->check($decodedJson, $decodedJsonSchema);
+        $this->assertFalse($this->validator->isValid());
+    }
+
+    /**
+     * @dataProvider jsonProvider
+     */
+    public function testChildExtendsParentInvalidParentTest($childSchema, $parentSchema)
+    {
+        $retrieverMock = $this->getRetrieverMock($parentSchema);
+
+        $json = '{"childProp":"infant", "parentProp":1}';
+        $decodedJson = json_decode($json);
+        $decodedJsonSchema = json_decode($childSchema);
+
+        $this->validator->setUriRetriever($retrieverMock);
+        $this->validator->check($decodedJson, $decodedJsonSchema);
+        $this->assertFalse($this->validator->isValid());
+    }
+
+    /**
+     * @dataProvider jsonProvider
+     */
+    public function testResolveRelativeUri($childSchema, $parentSchema)
+    {
+        self::setParentSchemaExtendsValue($parentSchema, 'grandparent');
+        $retrieverMock = $this->getRetrieverMock($parentSchema);
+        $json = '{"childProp":"infant", "parentProp":false}';
+        $decodedJson = json_decode($json);
+        $decodedJsonSchema = json_decode($childSchema);
+
+        $this->validator->setUriRetriever($retrieverMock);
+        $this->validator->check($decodedJson, $decodedJsonSchema);
+        $this->assertTrue($this->validator->isValid());
+    }
+
+    private static function setParentSchemaExtendsValue(&$parentSchema, $value)
+    {
+        $parentSchemaDecoded = json_decode($parentSchema, true);
+        $parentSchemaDecoded['extends'] = $value;
+        $parentSchema = json_encode($parentSchemaDecoded);
+    }
+
+    public function jsonProvider()
+    {
+        $childSchema = <<<EOF
+{
+    "type":"object",
+    "title":"child",
+    "extends":"http://some.host.at/somewhere/parent",
+    "properties":
+    {
+        "childProp":
+        {
+            "type":"string"
+        }
+    }
+}
+EOF;
+        $parentSchema = <<<EOF
+{
+    "type":"object",
+    "title":"parent",
+    "properties":
+    {
+        "parentProp":
+        {
+            "type":"boolean"
+        }
+    }
+}
+EOF;
+        return array(
+            array($childSchema, $parentSchema)
+        );
+    }
+
+    public function testResolvePointerNoFragment()
+    {
+        $schema = (object) array(
+            'title' => 'schema'
+        );
+
+        $retriever = new \JsonSchema\Uri\UriRetriever();
+        $this->assertEquals(
+            $schema,
+            $retriever->resolvePointer(
+                $schema, 'http://example.org/schema.json'
+            )
+        );
+    }
+
+    public function testResolvePointerFragment()
+    {
+        $schema = (object) array(
+            'definitions' => (object) array(
+                'foo' => (object) array(
+                    'title' => 'foo'
+                )
+            ),
+            'title' => 'schema'
+        );
+
+        $retriever = new \JsonSchema\Uri\UriRetriever();
+        $this->assertEquals(
+            $schema->definitions->foo,
+            $retriever->resolvePointer(
+                $schema, 'http://example.org/schema.json#/definitions/foo'
+            )
+        );
+    }
+
+    /**
+     * @expectedException JsonSchema\Exception\ResourceNotFoundException
+     */
+    public function testResolvePointerFragmentNotFound()
+    {
+        $schema = (object) array(
+            'definitions' => (object) array(
+                'foo' => (object) array(
+                    'title' => 'foo'
+                )
+            ),
+            'title' => 'schema'
+        );
+
+        $retriever = new \JsonSchema\Uri\UriRetriever();
+        $retriever->resolvePointer(
+            $schema, 'http://example.org/schema.json#/definitions/bar'
+        );
+    }
+
+    /**
+     * @expectedException JsonSchema\Exception\ResourceNotFoundException
+     */
+    public function testResolvePointerFragmentNoArray()
+    {
+        $schema = (object) array(
+            'definitions' => (object) array(
+                'foo' => array(
+                    'title' => 'foo'
+                )
+            ),
+            'title' => 'schema'
+        );
+
+        $retriever = new \JsonSchema\Uri\UriRetriever();
+        $retriever->resolvePointer(
+            $schema, 'http://example.org/schema.json#/definitions/foo'
+        );
+    }
+    
+    /**
+     * @expectedException JsonSchema\Exception\UriResolverException
+     */
+    public function testResolveExcessLevelUp()
+    {
+        $retriever = new \JsonSchema\Uri\UriRetriever();
+        $retriever->resolve(
+            '../schema.json#', 'http://example.org/schema.json#'
+        );
+    }
+}
diff --git a/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/WrongMessagesFailingTestCaseTest.php b/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/WrongMessagesFailingTestCaseTest.php
deleted file mode 100644
index 5f9ce33..0000000
--- a/vendor/justinrainbow/json-schema/tests/JsonSchema/Tests/WrongMessagesFailingTestCaseTest.php
+++ /dev/null
@@ -1,44 +0,0 @@
-<?php
-
-namespace JsonSchema\Tests;
-
-class WrongMessagesFailingTestCaseTest extends BaseTestCase
-{
-    public function getInvalidTests()
-    {
-        return array(
-            array(
-                '{
-                  "stringOrNumber":4.8,
-                  "booleanOrNull":["A","B"]
-                }',
-                '{
-                  "type":"object",
-                  "properties":{
-                    "stringOrNumber":{"type":["string","number"]},
-                    "booleanOrNull":{"type":["boolean","null"]}
-                  }
-                }'
-            )
-        );
-    }
-
-    public function getValidTests()
-    {
-        return array(
-            array(
-                '{
-                  "stringOrNumber":4.8,
-                  "booleanOrNull":true
-                }',
-                '{
-                  "type":"object",
-                  "properties":{
-                    "stringOrNumber":{"type":["string","number"]},
-                    "booleanOrNull":{"type":["boolean","null"]}
-                  }
-                }'
-            )
-        );
-    }
-}
diff --git a/vendor/justinrainbow/json-schema/tests/bootstrap.php b/vendor/justinrainbow/json-schema/tests/bootstrap.php
index ea66f60..f53ed67 100644
--- a/vendor/justinrainbow/json-schema/tests/bootstrap.php
+++ b/vendor/justinrainbow/json-schema/tests/bootstrap.php
@@ -1,17 +1,29 @@
 <?php
 
-if(is_readable(__DIR__.'/../vendor/.composer/autoload.php')) {
-    //composer
-    $loader = require_once(__DIR__.'/../vendor/.composer/autoload.php');
-    $loader->add('JsonSchema\Tests', __DIR__);
-    $loader->register();
+/*
+ * This file is part of the JsonSchema package.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
 
-} elseif(is_readable(__DIR__.'/../vendor/symfony/Component/ClassLoader/UniversalClassLoader.php')) {
-    //submodule
-    require_once __DIR__.'/../vendor/symfony/Component/ClassLoader/UniversalClassLoader.php';
+$autoloadFile = dirname(__DIR__) . '/vendor/autoload.php';
+if (! is_readable($autoloadFile)) {
+    echo <<<EOT
+You must run `composer.phar install` to install the dependencies
+before running the test suite.
 
-    $loader = new Symfony\Component\ClassLoader\UniversalClassLoader();
-    $loader->registerNamespace('JsonSchema', __DIR__.'/../src');
-    $loader->registerNamespace('JsonSchema\Tests', __DIR__);
-    $loader->register();
-}
\ No newline at end of file
+EOT;
+    exit(1);
+}
+
+// Include the Composer generated autoloader
+require_once $autoloadFile;
+
+spl_autoload_register(function ($class)
+{
+    if (0 === strpos($class, 'JsonSchema\\Tests')) {
+        $classFile = str_replace('\\', '/', $class) . '.php';
+        require __DIR__ . '/' . $classFile;
+    }
+});
diff --git a/vendor/seld/jsonlint/.travis.yml b/vendor/seld/jsonlint/.travis.yml
index edaaa17..0033a5e 100644
--- a/vendor/seld/jsonlint/.travis.yml
+++ b/vendor/seld/jsonlint/.travis.yml
@@ -8,7 +8,6 @@ php:
   - hhvm
 
 before_script:
-  - wget -nc http://getcomposer.org/composer.phar
-  - php composer.phar update
+  - composer update
 
 script: phpunit
diff --git a/vendor/seld/jsonlint/CHANGELOG.mdown b/vendor/seld/jsonlint/CHANGELOG.mdown
index beaccaf..9613648 100644
--- a/vendor/seld/jsonlint/CHANGELOG.mdown
+++ b/vendor/seld/jsonlint/CHANGELOG.mdown
@@ -1,3 +1,12 @@
+### 1.3.1 (2015-01-04)
+
+  * Fixed segfault when parsing large JSON strings
+
+### 1.3.0 (2014-09-05)
+
+  * Added parsing to an associative array via JsonParser::PARSE_TO_ASSOC
+  * Fixed a warning when rendering parse errors on empty lines
+
 ### 1.2.0 (2014-07-20)
 
   * Added support for linting multiple files at once in bin/jsonlint
diff --git a/vendor/seld/jsonlint/README.mdown b/vendor/seld/jsonlint/README.mdown
index d9e40d8..e2cf958 100644
--- a/vendor/seld/jsonlint/README.mdown
+++ b/vendor/seld/jsonlint/README.mdown
@@ -32,8 +32,14 @@ $parser->parse($json);
 Installation
 ------------
 
-JSON Lint can easily be used within another app if you have a PSR-0 autoloader, or
-it can be installed through [Composer](http://packagist.org/) for use as a CLI util.
+For a quick install with Composer use:
+
+    $ composer require seld/jsonlint
+
+JSON Lint can easily be used within another app if you have a
+[PSR-4](https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-4-autoloader.md)
+autoloader, or it can be installed through [Composer](https://getcomposer.org/)
+for use as a CLI util.
 Once installed via Composer you can run the following command to lint a json file or URL:
 
     $ bin/jsonlint file.json
diff --git a/vendor/seld/jsonlint/bin/jsonlint b/vendor/seld/jsonlint/bin/jsonlint
index 1b9272a..5e7d63a 100755
--- a/vendor/seld/jsonlint/bin/jsonlint
+++ b/vendor/seld/jsonlint/bin/jsonlint
@@ -46,6 +46,9 @@ if (isset($_SERVER['argc']) && $_SERVER['argc'] > 1) {
 if (!$file) {
     if ($contents = file_get_contents('php://stdin')) {
         lint($contents);
+    } else {
+        fwrite(STDERR, 'No file name or json input given'.PHP_EOL);
+        exit(1);
     }
 } else {
     if (!preg_match('{^https?://}i', $file)) {
@@ -94,7 +97,7 @@ function showUsage()
     echo 'Usage: jsonlint file [options]'.PHP_EOL;
     echo PHP_EOL;
     echo 'Options:'.PHP_EOL;
-    echo '-q, --quiet     Cause jsonlint to be quiet when no errors is found'.PHP_EOL;
+    echo '-q, --quiet     Cause jsonlint to be quiet when no errors are found'.PHP_EOL;
     echo '-h, --help      Show this message'.PHP_EOL;
     exit(0);
 }
diff --git a/vendor/seld/jsonlint/src/Seld/JsonLint/JsonParser.php b/vendor/seld/jsonlint/src/Seld/JsonLint/JsonParser.php
index d94d6bf..fc323db 100644
--- a/vendor/seld/jsonlint/src/Seld/JsonLint/JsonParser.php
+++ b/vendor/seld/jsonlint/src/Seld/JsonLint/JsonParser.php
@@ -10,7 +10,6 @@
  */
 
 namespace Seld\JsonLint;
-
 use stdClass;
 
 /**
@@ -30,13 +29,15 @@ class JsonParser
 {
     const DETECT_KEY_CONFLICTS = 1;
     const ALLOW_DUPLICATE_KEYS = 2;
+    const PARSE_TO_ASSOC = 4;
+
+    private $lexer;
 
     private $flags;
     private $stack;
     private $vstack; // semantic value stack
     private $lstack; // location stack
 
-    private $yy;
     private $symbols = array(
         'error'                 => 2,
         'JSONString'            => 3,
@@ -362,7 +363,11 @@ class JsonParser
         case 6:
             return $yyval->token = $tokens[$len-1];
         case 13:
-            $yyval->token = new stdClass;
+            if ($this->flags & self::PARSE_TO_ASSOC) {
+                $yyval->token = array();
+            } else {
+                $yyval->token = new stdClass;
+            }
             break;
         case 14:
             $yyval->token = $tokens[$len-1];
@@ -371,26 +376,49 @@ class JsonParser
             $yyval->token = array($tokens[$len-2], $tokens[$len]);
             break;
         case 16:
-            $yyval->token = new stdClass;
             $property = $tokens[$len][0] === '' ? '_empty_' : $tokens[$len][0];
-            $yyval->token->$property = $tokens[$len][1];
+            if ($this->flags & self::PARSE_TO_ASSOC) {
+                $yyval->token = array();
+                $yyval->token[$property] = $tokens[$len][1];
+            } else {
+                $yyval->token = new stdClass;
+                $yyval->token->$property = $tokens[$len][1];
+            }
             break;
         case 17:
-            $yyval->token = $tokens[$len-2];
-            $key = $tokens[$len][0] === '' ? '_empty_' : $tokens[$len][0];
-            if (($this->flags & self::DETECT_KEY_CONFLICTS) && isset($tokens[$len-2]->{$key})) {
-                $errStr = 'Parse error on line ' . ($yylineno+1) . ":\n";
-                $errStr .= $this->lexer->showPosition() . "\n";
-                $errStr .= "Duplicate key: ".$tokens[$len][0];
-                throw new ParsingException($errStr);
-            } elseif (($this->flags & self::ALLOW_DUPLICATE_KEYS) && isset($tokens[$len-2]->{$key})) {
-                $duplicateCount = 1;
-                do {
-                    $duplicateKey = $key . '.' . $duplicateCount++;
-                } while (isset($tokens[$len-2]->$duplicateKey));
-                $key = $duplicateKey;
+            if ($this->flags & self::PARSE_TO_ASSOC) {
+                $yyval->token =& $tokens[$len-2];
+                $key = $tokens[$len][0];
+                if (($this->flags & self::DETECT_KEY_CONFLICTS) && isset($tokens[$len-2][$key])) {
+                    $errStr = 'Parse error on line ' . ($yylineno+1) . ":\n";
+                    $errStr .= $this->lexer->showPosition() . "\n";
+                    $errStr .= "Duplicate key: ".$tokens[$len][0];
+                    throw new ParsingException($errStr);
+                } elseif (($this->flags & self::ALLOW_DUPLICATE_KEYS) && isset($tokens[$len-2][$key])) {
+                    $duplicateCount = 1;
+                    do {
+                        $duplicateKey = $key . '.' . $duplicateCount++;
+                    } while (isset($tokens[$len-2][$duplicateKey]));
+                    $key = $duplicateKey;
+                }
+                $tokens[$len-2][$key] = $tokens[$len][1];
+            } else {
+                $yyval->token = $tokens[$len-2];
+                $key = $tokens[$len][0] === '' ? '_empty_' : $tokens[$len][0];
+                if (($this->flags & self::DETECT_KEY_CONFLICTS) && isset($tokens[$len-2]->{$key})) {
+                    $errStr = 'Parse error on line ' . ($yylineno+1) . ":\n";
+                    $errStr .= $this->lexer->showPosition() . "\n";
+                    $errStr .= "Duplicate key: ".$tokens[$len][0];
+                    throw new ParsingException($errStr);
+                } elseif (($this->flags & self::ALLOW_DUPLICATE_KEYS) && isset($tokens[$len-2]->{$key})) {
+                    $duplicateCount = 1;
+                    do {
+                        $duplicateKey = $key . '.' . $duplicateCount++;
+                    } while (isset($tokens[$len-2]->$duplicateKey));
+                    $key = $duplicateKey;
+                }
+                $tokens[$len-2]->$key = $tokens[$len][1];
             }
-            $tokens[$len-2]->$key = $tokens[$len][1];
             break;
         case 18:
             $yyval->token = array();
diff --git a/vendor/seld/jsonlint/src/Seld/JsonLint/Lexer.php b/vendor/seld/jsonlint/src/Seld/JsonLint/Lexer.php
index fcaf335..9651f42 100644
--- a/vendor/seld/jsonlint/src/Seld/JsonLint/Lexer.php
+++ b/vendor/seld/jsonlint/src/Seld/JsonLint/Lexer.php
@@ -22,7 +22,7 @@ class Lexer
     private $rules = array(
         0 => '/^\s+/',
         1 => '/^-?([0-9]|[1-9][0-9]+)(\.[0-9]+)?([eE][+-]?[0-9]+)?\b/',
-        2 => '{^"(\\\\["bfnrt/\\\\]|\\\\u[a-fA-F0-9]{4}|[^\0-\x09\x0a-\x1f\\\\"])*"}',
+        2 => '{^"(?:\\\\["bfnrt/\\\\]|\\\\u[a-fA-F0-9]{4}|[^\0-\x09\x0a-\x1f\\\\"]+)*"}',
         3 => '/^\{/',
         4 => '/^\}/',
         5 => '/^\[/',
@@ -81,7 +81,7 @@ class Lexer
     public function showPosition()
     {
         $pre = str_replace("\n", '', $this->getPastInput());
-        $c = str_repeat('-', strlen($pre) - 1); // new Array(pre.length + 1).join("-");
+        $c = str_repeat('-', max(0, strlen($pre) - 1)); // new Array(pre.length + 1).join("-");
 
         return $pre . str_replace("\n", '', $this->getUpcomingInput()) . "\n" . $c . "^";
     }
@@ -146,7 +146,6 @@ class Lexer
                 );
                 $this->yytext .= $match[0];
                 $this->match .= $match[0];
-                $this->matches = $match;
                 $this->yyleng = strlen($this->yytext);
                 $this->more = false;
                 $this->input = substr($this->input, strlen($match[0]));
@@ -174,16 +173,6 @@ class Lexer
         );
     }
 
-    private function begin($condition)
-    {
-        $this->conditionStack[] = $condition;
-    }
-
-    private function popState()
-    {
-        return array_pop($this->conditionStack);
-    }
-
     private function getCurrentRules()
     {
         return $this->conditions[$this->conditionStack[count($this->conditionStack)-1]]['rules'];
@@ -191,7 +180,6 @@ class Lexer
 
     private function performAction($avoiding_name_collisions, $YY_START)
     {
-        $YYSTATE = $YY_START;
         switch ($avoiding_name_collisions) {
         case 0:/* skip whitespace */
             break;
diff --git a/vendor/seld/jsonlint/tests/JsonParserTest.php b/vendor/seld/jsonlint/tests/JsonParserTest.php
index 8067622..6342f13 100644
--- a/vendor/seld/jsonlint/tests/JsonParserTest.php
+++ b/vendor/seld/jsonlint/tests/JsonParserTest.php
@@ -114,6 +114,19 @@ bar"}');
         }
     }
 
+    public function testErrorAtBeginning()
+    {
+        $parser = new JsonParser();
+        try {
+            $parser->parse('
+
+');
+            $this->fail('Empty string should be invalid');
+        } catch (ParsingException $e) {
+            $this->assertContains("Parse error on line 1:\n\n^", $e->getMessage());
+        }
+    }
+
     public function testParsesMultiInARow()
     {
         $parser = new JsonParser();
@@ -173,6 +186,15 @@ bar"}');
         );
     }
 
+    public function testParseToArray()
+    {
+        $parser = new JsonParser();
+
+        $json = '{"one":"a", "two":{"three": "four"}, "": "empty"}';
+        $result = $parser->parse($json, JsonParser::PARSE_TO_ASSOC);
+        $this->assertSame(json_decode($json, true), $result);
+    }
+
     public function testFileWithBOM()
     {
         try {
diff --git a/vendor/symfony/console/Symfony/Component/Console/Application.php b/vendor/symfony/console/Symfony/Component/Console/Application.php
index c4154fc..6ea8175 100644
--- a/vendor/symfony/console/Symfony/Component/Console/Application.php
+++ b/vendor/symfony/console/Symfony/Component/Console/Application.php
@@ -13,6 +13,8 @@ namespace Symfony\Component\Console;
 
 use Symfony\Component\Console\Descriptor\TextDescriptor;
 use Symfony\Component\Console\Descriptor\XmlDescriptor;
+use Symfony\Component\Console\Helper\DebugFormatterHelper;
+use Symfony\Component\Console\Helper\ProcessHelper;
 use Symfony\Component\Console\Helper\QuestionHelper;
 use Symfony\Component\Console\Input\InputInterface;
 use Symfony\Component\Console\Input\ArgvInput;
@@ -221,7 +223,7 @@ class Application
     }
 
     /**
-     * Set an input definition set to be used with this application
+     * Set an input definition set to be used with this application.
      *
      * @param InputDefinition $definition The input definition
      *
@@ -249,24 +251,7 @@ class Application
      */
     public function getHelp()
     {
-        $messages = array(
-            $this->getLongVersion(),
-            '',
-            '<comment>Usage:</comment>',
-            '  [options] command [arguments]',
-            '',
-            '<comment>Options:</comment>',
-        );
-
-        foreach ($this->getDefinition()->getOptions() as $option) {
-            $messages[] = sprintf('  %-29s %s %s',
-                '<info>--'.$option->getName().'</info>',
-                $option->getShortcut() ? '<info>-'.$option->getShortcut().'</info>' : '  ',
-                $option->getDescription()
-            );
-        }
-
-        return implode(PHP_EOL, $messages);
+        return $this->getLongVersion();
     }
 
     /**
@@ -475,10 +460,10 @@ class Application
     {
         $namespaces = array();
         foreach ($this->commands as $command) {
-            $namespaces[] = $this->extractNamespace($command->getName());
+            $namespaces = array_merge($namespaces, $this->extractAllNamespaces($command->getName()));
 
             foreach ($command->getAliases() as $alias) {
-                $namespaces[] = $this->extractNamespace($alias);
+                $namespaces = array_merge($namespaces, $this->extractAllNamespaces($alias));
             }
         }
 
@@ -723,9 +708,9 @@ class Application
                 $trace = $e->getTrace();
                 array_unshift($trace, array(
                     'function' => '',
-                    'file'     => $e->getFile() != null ? $e->getFile() : 'n/a',
-                    'line'     => $e->getLine() != null ? $e->getLine() : 'n/a',
-                    'args'     => array(),
+                    'file' => $e->getFile() !== null ? $e->getFile() : 'n/a',
+                    'line' => $e->getLine() !== null ? $e->getLine() : 'n/a',
+                    'args' => array(),
                 ));
 
                 for ($i = 0, $count = count($trace); $i < $count; $i++) {
@@ -751,7 +736,7 @@ class Application
     }
 
     /**
-     * Tries to figure out the terminal width in which this application runs
+     * Tries to figure out the terminal width in which this application runs.
      *
      * @return int|null
      */
@@ -763,7 +748,7 @@ class Application
     }
 
     /**
-     * Tries to figure out the terminal height in which this application runs
+     * Tries to figure out the terminal height in which this application runs.
      *
      * @return int|null
      */
@@ -775,7 +760,7 @@ class Application
     }
 
     /**
-     * Tries to figure out the terminal dimensions based on the current environment
+     * Tries to figure out the terminal dimensions based on the current environment.
      *
      * @return array Array containing width and height
      */
@@ -785,7 +770,7 @@ class Application
             return $this->terminalDimensions;
         }
 
-        if (defined('PHP_WINDOWS_VERSION_BUILD')) {
+        if ('\\' === DIRECTORY_SEPARATOR) {
             // extract [w, H] from "wxh (WxH)"
             if (preg_match('/^(\d+)x\d+ \(\d+x(\d+)\)$/', trim(getenv('ANSICON')), $matches)) {
                 return array((int) $matches[1], (int) $matches[2]);
@@ -815,8 +800,8 @@ class Application
      *
      * Can be useful to force terminal dimensions for functional tests.
      *
-     * @param int     $width  The width
-     * @param int     $height The height
+     * @param int $width  The width
+     * @param int $height The height
      *
      * @return Application The current application
      */
@@ -843,8 +828,8 @@ class Application
 
         if (true === $input->hasParameterOption(array('--no-interaction', '-n'))) {
             $input->setInteractive(false);
-        } elseif (function_exists('posix_isatty') && $this->getHelperSet()->has('dialog')) {
-            $inputStream = $this->getHelperSet()->get('dialog')->getInputStream();
+        } elseif (function_exists('posix_isatty') && $this->getHelperSet()->has('question')) {
+            $inputStream = $this->getHelperSet()->get('question')->getInputStream();
             if (!@posix_isatty($inputStream)) {
                 $input->setInteractive(false);
             }
@@ -892,16 +877,20 @@ class Application
         $event = new ConsoleCommandEvent($command, $input, $output);
         $this->dispatcher->dispatch(ConsoleEvents::COMMAND, $event);
 
-        try {
-            $exitCode = $command->run($input, $output);
-        } catch (\Exception $e) {
-            $event = new ConsoleTerminateEvent($command, $input, $output, $e->getCode());
-            $this->dispatcher->dispatch(ConsoleEvents::TERMINATE, $event);
+        if ($event->commandShouldRun()) {
+            try {
+                $exitCode = $command->run($input, $output);
+            } catch (\Exception $e) {
+                $event = new ConsoleTerminateEvent($command, $input, $output, $e->getCode());
+                $this->dispatcher->dispatch(ConsoleEvents::TERMINATE, $event);
 
-            $event = new ConsoleExceptionEvent($command, $input, $output, $e, $event->getExitCode());
-            $this->dispatcher->dispatch(ConsoleEvents::EXCEPTION, $event);
+                $event = new ConsoleExceptionEvent($command, $input, $output, $e, $event->getExitCode());
+                $this->dispatcher->dispatch(ConsoleEvents::EXCEPTION, $event);
 
-            throw $event->getException();
+                throw $event->getException();
+            }
+        } else {
+            $exitCode = ConsoleCommandEvent::RETURN_CODE_DISABLED;
         }
 
         $event = new ConsoleTerminateEvent($command, $input, $output, $exitCode);
@@ -932,13 +921,13 @@ class Application
         return new InputDefinition(array(
             new InputArgument('command', InputArgument::REQUIRED, 'The command to execute'),
 
-            new InputOption('--help',           '-h', InputOption::VALUE_NONE, 'Display this help message.'),
-            new InputOption('--quiet',          '-q', InputOption::VALUE_NONE, 'Do not output any message.'),
+            new InputOption('--help',           '-h', InputOption::VALUE_NONE, 'Display this help message'),
+            new InputOption('--quiet',          '-q', InputOption::VALUE_NONE, 'Do not output any message'),
             new InputOption('--verbose',        '-v|vv|vvv', InputOption::VALUE_NONE, 'Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug'),
-            new InputOption('--version',        '-V', InputOption::VALUE_NONE, 'Display this application version.'),
-            new InputOption('--ansi',           '',   InputOption::VALUE_NONE, 'Force ANSI output.'),
-            new InputOption('--no-ansi',        '',   InputOption::VALUE_NONE, 'Disable ANSI output.'),
-            new InputOption('--no-interaction', '-n', InputOption::VALUE_NONE, 'Do not ask any interactive question.'),
+            new InputOption('--version',        '-V', InputOption::VALUE_NONE, 'Display this application version'),
+            new InputOption('--ansi',           '',   InputOption::VALUE_NONE, 'Force ANSI output'),
+            new InputOption('--no-ansi',        '',   InputOption::VALUE_NONE, 'Disable ANSI output'),
+            new InputOption('--no-interaction', '-n', InputOption::VALUE_NONE, 'Do not ask any interactive question'),
         ));
     }
 
@@ -964,12 +953,14 @@ class Application
             new DialogHelper(),
             new ProgressHelper(),
             new TableHelper(),
+            new DebugFormatterHelper(),
+            new ProcessHelper(),
             new QuestionHelper(),
         ));
     }
 
     /**
-     * Runs and parses stty -a if it's available, suppressing any error output
+     * Runs and parses stty -a if it's available, suppressing any error output.
      *
      * @return string
      */
@@ -992,7 +983,7 @@ class Application
     }
 
     /**
-     * Runs and parses mode CON if it's available, suppressing any error output
+     * Runs and parses mode CON if it's available, suppressing any error output.
      *
      * @return string <width>x<height> or null if it could not be parsed
      */
@@ -1048,10 +1039,10 @@ class Application
 
     /**
      * Finds alternative of $name among $collection,
-     * if nothing is found in $collection, try in $abbrevs
+     * if nothing is found in $collection, try in $abbrevs.
      *
-     * @param string               $name       The string
-     * @param array|\Traversable   $collection The collection
+     * @param string             $name       The string
+     * @param array|\Traversable $collection The collection
      *
      * @return array A sorted array of similar string
      */
@@ -1076,7 +1067,7 @@ class Application
                 }
 
                 $lev = levenshtein($subname, $parts[$i]);
-                if ($lev <= strlen($subname) / 3 || false !== strpos($parts[$i], $subname)) {
+                if ($lev <= strlen($subname) / 3 || '' !== $subname && false !== strpos($parts[$i], $subname)) {
                     $alternatives[$collectionName] = $exists ? $alternatives[$collectionName] + $lev : $lev;
                 } elseif ($exists) {
                     $alternatives[$collectionName] += $threshold;
@@ -1155,4 +1146,28 @@ class Application
 
         return $lines;
     }
+
+    /**
+     * Returns all namespaces of the command name.
+     *
+     * @param string $name The full name of the command
+     *
+     * @return array The namespaces of the command
+     */
+    private function extractAllNamespaces($name)
+    {
+        // -1 as third argument is needed to skip the command short name when exploding
+        $parts = explode(':', $name, -1);
+        $namespaces = array();
+
+        foreach ($parts as $part) {
+            if (count($namespaces)) {
+                $namespaces[] = end($namespaces).':'.$part;
+            } else {
+                $namespaces[] = $part;
+            }
+        }
+
+        return $namespaces;
+    }
 }
diff --git a/vendor/symfony/console/Symfony/Component/Console/CHANGELOG.md b/vendor/symfony/console/Symfony/Component/Console/CHANGELOG.md
index 7045994..07254c6 100644
--- a/vendor/symfony/console/Symfony/Component/Console/CHANGELOG.md
+++ b/vendor/symfony/console/Symfony/Component/Console/CHANGELOG.md
@@ -1,6 +1,12 @@
 CHANGELOG
 =========
 
+2.6.0
+-----
+
+ * added a Process helper
+ * added a DebugFormatter helper
+
 2.5.0
 -----
 
diff --git a/vendor/symfony/console/Symfony/Component/Console/Command/Command.php b/vendor/symfony/console/Symfony/Component/Console/Command/Command.php
index 21ac78c..0302cb1 100644
--- a/vendor/symfony/console/Symfony/Component/Console/Command/Command.php
+++ b/vendor/symfony/console/Symfony/Component/Console/Command/Command.php
@@ -65,7 +65,7 @@ class Command
         $this->configure();
 
         if (!$this->name) {
-            throw new \LogicException('The command name cannot be empty.');
+            throw new \LogicException(sprintf('The command defined in "%s" cannot have an empty name.', get_class($this)));
         }
     }
 
@@ -129,7 +129,7 @@ class Command
     }
 
     /**
-     * Checks whether the command is enabled or not in the current environment
+     * Checks whether the command is enabled or not in the current environment.
      *
      * Override this to check for x or y and return false if the command can not
      * run properly under the current conditions.
@@ -159,10 +159,11 @@ class Command
      * @param InputInterface  $input  An InputInterface instance
      * @param OutputInterface $output An OutputInterface instance
      *
-     * @return null|int     null or 0 if everything went fine, or an error code
+     * @return null|int null or 0 if everything went fine, or an error code
      *
      * @throws \LogicException When this abstract method is not implemented
-     * @see    setCode()
+     *
+     * @see setCode()
      */
     protected function execute(InputInterface $input, OutputInterface $output)
     {
@@ -202,7 +203,7 @@ class Command
      * @param InputInterface  $input  An InputInterface instance
      * @param OutputInterface $output An OutputInterface instance
      *
-     * @return int     The command exit code
+     * @return int The command exit code
      *
      * @throws \Exception
      *
@@ -213,16 +214,6 @@ class Command
      */
     public function run(InputInterface $input, OutputInterface $output)
     {
-        if (null !== $this->processTitle) {
-            if (function_exists('cli_set_process_title')) {
-                cli_set_process_title($this->processTitle);
-            } elseif (function_exists('setproctitle')) {
-                setproctitle($this->processTitle);
-            } elseif (OutputInterface::VERBOSITY_VERY_VERBOSE === $output->getVerbosity()) {
-                $output->writeln('<comment>Install the proctitle PECL to be able to change the process title.</comment>');
-            }
-        }
-
         // force the creation of the synopsis before the merge with the app definition
         $this->getSynopsis();
 
@@ -240,6 +231,16 @@ class Command
 
         $this->initialize($input, $output);
 
+        if (null !== $this->processTitle) {
+            if (function_exists('cli_set_process_title')) {
+                cli_set_process_title($this->processTitle);
+            } elseif (function_exists('setproctitle')) {
+                setproctitle($this->processTitle);
+            } elseif (OutputInterface::VERBOSITY_VERY_VERBOSE === $output->getVerbosity()) {
+                $output->writeln('<comment>Install the proctitle PECL to be able to change the process title.</comment>');
+            }
+        }
+
         if ($input->isInteractive()) {
             $this->interact($input, $output);
         }
@@ -287,7 +288,7 @@ class Command
      *
      * This method is not part of public API and should not be used directly.
      *
-     * @param bool    $mergeArgs Whether to merge or not the Application definition arguments to Command definition arguments
+     * @param bool $mergeArgs Whether to merge or not the Application definition arguments to Command definition arguments
      */
     public function mergeApplicationDefinition($mergeArgs = true)
     {
@@ -361,10 +362,10 @@ class Command
     /**
      * Adds an argument.
      *
-     * @param string  $name        The argument name
-     * @param int     $mode        The argument mode: InputArgument::REQUIRED or InputArgument::OPTIONAL
-     * @param string  $description A description text
-     * @param mixed   $default     The default value (for InputArgument::OPTIONAL mode only)
+     * @param string $name        The argument name
+     * @param int    $mode        The argument mode: InputArgument::REQUIRED or InputArgument::OPTIONAL
+     * @param string $description A description text
+     * @param mixed  $default     The default value (for InputArgument::OPTIONAL mode only)
      *
      * @return Command The current instance
      *
@@ -380,11 +381,11 @@ class Command
     /**
      * Adds an option.
      *
-     * @param string  $name        The option name
-     * @param string  $shortcut    The shortcut (can be null)
-     * @param int     $mode        The option mode: One of the InputOption::VALUE_* constants
-     * @param string  $description A description text
-     * @param mixed   $default     The default value (must be null for InputOption::VALUE_REQUIRED or InputOption::VALUE_NONE)
+     * @param string $name        The option name
+     * @param string $shortcut    The shortcut (can be null)
+     * @param int    $mode        The option mode: One of the InputOption::VALUE_* constants
+     * @param string $description A description text
+     * @param mixed  $default     The default value (must be null for InputOption::VALUE_REQUIRED or InputOption::VALUE_NONE)
      *
      * @return Command The current instance
      *
@@ -513,7 +514,7 @@ class Command
      * Returns the processed help for the command replacing the %command.name% and
      * %command.full_name% patterns with the real values dynamically.
      *
-     * @return string  The processed help for the command
+     * @return string The processed help for the command
      */
     public function getProcessedHelp()
     {
@@ -521,11 +522,11 @@ class Command
 
         $placeholders = array(
             '%command.name%',
-            '%command.full_name%'
+            '%command.full_name%',
         );
         $replacements = array(
             $name,
-            $_SERVER['PHP_SELF'].' '.$name
+            $_SERVER['PHP_SELF'].' '.$name,
         );
 
         return str_replace($placeholders, $replacements, $this->getHelp());
@@ -534,7 +535,7 @@ class Command
     /**
      * Sets the aliases for the command.
      *
-     * @param array $aliases An array of aliases for the command
+     * @param string[] $aliases An array of aliases for the command
      *
      * @return Command The current instance
      *
@@ -544,6 +545,10 @@ class Command
      */
     public function setAliases($aliases)
     {
+        if (!is_array($aliases) && !$aliases instanceof \Traversable) {
+            throw new \InvalidArgumentException('$aliases must be an array or an instance of \Traversable');
+        }
+
         foreach ($aliases as $alias) {
             $this->validateName($alias);
         }
@@ -614,7 +619,7 @@ class Command
     /**
      * Returns an XML representation of the command.
      *
-     * @param bool    $asDom Whether to return a DOM or an XML string
+     * @param bool $asDom Whether to return a DOM or an XML string
      *
      * @return string|\DOMDocument An XML string representing the command
      *
diff --git a/vendor/symfony/console/Symfony/Component/Console/Command/HelpCommand.php b/vendor/symfony/console/Symfony/Component/Console/Command/HelpCommand.php
index e76044a..d370da2 100644
--- a/vendor/symfony/console/Symfony/Component/Console/Command/HelpCommand.php
+++ b/vendor/symfony/console/Symfony/Component/Console/Command/HelpCommand.php
@@ -58,7 +58,7 @@ EOF
     }
 
     /**
-     * Sets the command
+     * Sets the command.
      *
      * @param Command $command The command to set
      */
@@ -83,7 +83,7 @@ EOF
         $helper = new DescriptorHelper();
         $helper->describe($output, $this->command, array(
             'format' => $input->getOption('format'),
-            'raw'    => $input->getOption('raw'),
+            'raw' => $input->getOption('raw'),
         ));
 
         $this->command = null;
diff --git a/vendor/symfony/console/Symfony/Component/Console/Command/ListCommand.php b/vendor/symfony/console/Symfony/Component/Console/Command/ListCommand.php
index 25c2120..58868e4 100644
--- a/vendor/symfony/console/Symfony/Component/Console/Command/ListCommand.php
+++ b/vendor/symfony/console/Symfony/Component/Console/Command/ListCommand.php
@@ -74,8 +74,8 @@ EOF
 
         $helper = new DescriptorHelper();
         $helper->describe($output, $this->getApplication(), array(
-            'format'    => $input->getOption('format'),
-            'raw_text'  => $input->getOption('raw'),
+            'format' => $input->getOption('format'),
+            'raw_text' => $input->getOption('raw'),
             'namespace' => $input->getArgument('namespace'),
         ));
     }
diff --git a/vendor/symfony/console/Symfony/Component/Console/ConsoleEvents.php b/vendor/symfony/console/Symfony/Component/Console/ConsoleEvents.php
index 12ede2d..1ed41b7 100644
--- a/vendor/symfony/console/Symfony/Component/Console/ConsoleEvents.php
+++ b/vendor/symfony/console/Symfony/Component/Console/ConsoleEvents.php
@@ -26,6 +26,8 @@ final class ConsoleEvents
      * The event listener method receives a Symfony\Component\Console\Event\ConsoleCommandEvent
      * instance.
      *
+     * @Event
+     *
      * @var string
      */
     const COMMAND = 'console.command';
@@ -37,6 +39,8 @@ final class ConsoleEvents
      * The event listener method receives a Symfony\Component\Console\Event\ConsoleTerminateEvent
      * instance.
      *
+     * @Event
+     *
      * @var string
      */
     const TERMINATE = 'console.terminate';
@@ -49,6 +53,8 @@ final class ConsoleEvents
      * a Symfony\Component\Console\Event\ConsoleExceptionEvent
      * instance.
      *
+     * @Event
+     *
      * @var string
      */
     const EXCEPTION = 'console.exception';
diff --git a/vendor/symfony/console/Symfony/Component/Console/Descriptor/ApplicationDescription.php b/vendor/symfony/console/Symfony/Component/Console/Descriptor/ApplicationDescription.php
index cdf1493..a0a5df2 100644
--- a/vendor/symfony/console/Symfony/Component/Console/Descriptor/ApplicationDescription.php
+++ b/vendor/symfony/console/Symfony/Component/Console/Descriptor/ApplicationDescription.php
@@ -16,6 +16,8 @@ use Symfony\Component\Console\Command\Command;
 
 /**
  * @author Jean-François Simon <jeanfrancois.simon@sensiolabs.com>
+ *
+ * @internal
  */
 class ApplicationDescription
 {
diff --git a/vendor/symfony/console/Symfony/Component/Console/Descriptor/Descriptor.php b/vendor/symfony/console/Symfony/Component/Console/Descriptor/Descriptor.php
index ab7acc6..49e2193 100644
--- a/vendor/symfony/console/Symfony/Component/Console/Descriptor/Descriptor.php
+++ b/vendor/symfony/console/Symfony/Component/Console/Descriptor/Descriptor.php
@@ -20,6 +20,8 @@ use Symfony\Component\Console\Output\OutputInterface;
 
 /**
  * @author Jean-François Simon <jeanfrancois.simon@sensiolabs.com>
+ *
+ * @internal
  */
 abstract class Descriptor implements DescriptorInterface
 {
@@ -59,8 +61,8 @@ abstract class Descriptor implements DescriptorInterface
     /**
      * Writes content to output.
      *
-     * @param string  $content
-     * @param bool    $decorated
+     * @param string $content
+     * @param bool   $decorated
      */
     protected function write($content, $decorated = false)
     {
diff --git a/vendor/symfony/console/Symfony/Component/Console/Descriptor/JsonDescriptor.php b/vendor/symfony/console/Symfony/Component/Console/Descriptor/JsonDescriptor.php
index 05adf0f..13785a4 100644
--- a/vendor/symfony/console/Symfony/Component/Console/Descriptor/JsonDescriptor.php
+++ b/vendor/symfony/console/Symfony/Component/Console/Descriptor/JsonDescriptor.php
@@ -21,6 +21,8 @@ use Symfony\Component\Console\Input\InputOption;
  * JSON descriptor.
  *
  * @author Jean-François Simon <contact@jfsimon.fr>
+ *
+ * @internal
  */
 class JsonDescriptor extends Descriptor
 {
@@ -97,11 +99,11 @@ class JsonDescriptor extends Descriptor
     private function getInputArgumentData(InputArgument $argument)
     {
         return array(
-            'name'        => $argument->getName(),
+            'name' => $argument->getName(),
             'is_required' => $argument->isRequired(),
-            'is_array'    => $argument->isArray(),
+            'is_array' => $argument->isArray(),
             'description' => $argument->getDescription(),
-            'default'     => $argument->getDefault(),
+            'default' => $argument->getDefault(),
         );
     }
 
@@ -113,13 +115,13 @@ class JsonDescriptor extends Descriptor
     private function getInputOptionData(InputOption $option)
     {
         return array(
-            'name'              => '--'.$option->getName(),
-            'shortcut'          => $option->getShortcut() ? '-'.implode('|-', explode('|', $option->getShortcut())) : '',
-            'accept_value'      => $option->acceptValue(),
+            'name' => '--'.$option->getName(),
+            'shortcut' => $option->getShortcut() ? '-'.implode('|-', explode('|', $option->getShortcut())) : '',
+            'accept_value' => $option->acceptValue(),
             'is_value_required' => $option->isValueRequired(),
-            'is_multiple'       => $option->isArray(),
-            'description'       => $option->getDescription(),
-            'default'           => $option->getDefault(),
+            'is_multiple' => $option->isArray(),
+            'description' => $option->getDescription(),
+            'default' => $option->getDefault(),
         );
     }
 
@@ -154,12 +156,12 @@ class JsonDescriptor extends Descriptor
         $command->mergeApplicationDefinition(false);
 
         return array(
-            'name'        => $command->getName(),
-            'usage'       => $command->getSynopsis(),
+            'name' => $command->getName(),
+            'usage' => $command->getSynopsis(),
             'description' => $command->getDescription(),
-            'help'        => $command->getProcessedHelp(),
-            'aliases'     => $command->getAliases(),
-            'definition'  => $this->getInputDefinitionData($command->getNativeDefinition()),
+            'help' => $command->getProcessedHelp(),
+            'aliases' => $command->getAliases(),
+            'definition' => $this->getInputDefinitionData($command->getNativeDefinition()),
         );
     }
 }
diff --git a/vendor/symfony/console/Symfony/Component/Console/Descriptor/MarkdownDescriptor.php b/vendor/symfony/console/Symfony/Component/Console/Descriptor/MarkdownDescriptor.php
index 7bc5808..78d48b9 100644
--- a/vendor/symfony/console/Symfony/Component/Console/Descriptor/MarkdownDescriptor.php
+++ b/vendor/symfony/console/Symfony/Component/Console/Descriptor/MarkdownDescriptor.php
@@ -21,6 +21,8 @@ use Symfony\Component\Console\Input\InputOption;
  * Markdown descriptor.
  *
  * @author Jean-François Simon <contact@jfsimon.fr>
+ *
+ * @internal
  */
 class MarkdownDescriptor extends Descriptor
 {
@@ -103,7 +105,7 @@ class MarkdownDescriptor extends Descriptor
             $this->write($help);
         }
 
-        if ($definition = $command->getNativeDefinition()) {
+        if ($command->getNativeDefinition()) {
             $this->write("\n\n");
             $this->describeInputDefinition($command->getNativeDefinition());
         }
@@ -128,7 +130,7 @@ class MarkdownDescriptor extends Descriptor
             $this->write("\n\n");
             $this->write(implode("\n", array_map(function ($commandName) {
                 return '* '.$commandName;
-            } , $namespace['commands'])));
+            }, $namespace['commands'])));
         }
 
         foreach ($description->getCommands() as $command) {
diff --git a/vendor/symfony/console/Symfony/Component/Console/Descriptor/TextDescriptor.php b/vendor/symfony/console/Symfony/Component/Console/Descriptor/TextDescriptor.php
index f979fa7..04e7264 100644
--- a/vendor/symfony/console/Symfony/Component/Console/Descriptor/TextDescriptor.php
+++ b/vendor/symfony/console/Symfony/Component/Console/Descriptor/TextDescriptor.php
@@ -21,6 +21,8 @@ use Symfony\Component\Console\Input\InputOption;
  * Text descriptor.
  *
  * @author Jean-François Simon <contact@jfsimon.fr>
+ *
+ * @internal
  */
 class TextDescriptor extends Descriptor
 {
@@ -157,10 +159,34 @@ class TextDescriptor extends Descriptor
                 $this->writeText("\n");
             }
         } else {
-            $width = $this->getColumnWidth($description->getCommands());
+            if ('' != $help = $application->getHelp()) {
+                $this->writeText("$help\n\n", $options);
+            }
 
-            $this->writeText($application->getHelp(), $options);
-            $this->writeText("\n\n");
+            $this->writeText("<comment>Usage:</comment>\n", $options);
+            $this->writeText(" [options] command [arguments]\n\n", $options);
+            $this->writeText('<comment>Options:</comment>', $options);
+
+            $inputOptions = $application->getDefinition()->getOptions();
+
+            $width = 0;
+            foreach ($inputOptions as $option) {
+                $nameLength = strlen($option->getName()) + 2;
+                if ($option->getShortcut()) {
+                    $nameLength += strlen($option->getShortcut()) + 3;
+                }
+                $width = max($width, $nameLength);
+            }
+            ++$width;
+
+            foreach ($inputOptions as $option) {
+                $this->writeText("\n", $options);
+                $this->describeInputOption($option, array_merge($options, array('name_width' => $width)));
+            }
+
+            $this->writeText("\n\n", $options);
+
+            $width = $this->getColumnWidth($description->getCommands());
 
             if ($describedNamespace) {
                 $this->writeText(sprintf("<comment>Available commands for the \"%s\" namespace:</comment>", $describedNamespace), $options);
@@ -177,7 +203,7 @@ class TextDescriptor extends Descriptor
 
                 foreach ($namespace['commands'] as $name) {
                     $this->writeText("\n");
-                    $this->writeText(sprintf("  <info>%-${width}s</info> %s", $name, $description->getCommand($name)->getDescription()), $options);
+                    $this->writeText(sprintf(" <info>%-${width}s</info> %s", $name, $description->getCommand($name)->getDescription()), $options);
                 }
             }
 
@@ -205,7 +231,7 @@ class TextDescriptor extends Descriptor
      */
     private function formatDefaultValue($default)
     {
-        if (version_compare(PHP_VERSION, '5.4', '<')) {
+        if (PHP_VERSION_ID < 50400) {
             return str_replace('\/', '/', json_encode($default));
         }
 
diff --git a/vendor/symfony/console/Symfony/Component/Console/Descriptor/XmlDescriptor.php b/vendor/symfony/console/Symfony/Component/Console/Descriptor/XmlDescriptor.php
index ac1e25e..5054686 100644
--- a/vendor/symfony/console/Symfony/Component/Console/Descriptor/XmlDescriptor.php
+++ b/vendor/symfony/console/Symfony/Component/Console/Descriptor/XmlDescriptor.php
@@ -21,6 +21,8 @@ use Symfony\Component\Console\Input\InputOption;
  * XML descriptor.
  *
  * @author Jean-François Simon <contact@jfsimon.fr>
+ *
+ * @internal
  */
 class XmlDescriptor extends Descriptor
 {
diff --git a/vendor/symfony/console/Symfony/Component/Console/Event/ConsoleCommandEvent.php b/vendor/symfony/console/Symfony/Component/Console/Event/ConsoleCommandEvent.php
index 47ac68b..56f5526 100644
--- a/vendor/symfony/console/Symfony/Component/Console/Event/ConsoleCommandEvent.php
+++ b/vendor/symfony/console/Symfony/Component/Console/Event/ConsoleCommandEvent.php
@@ -12,10 +12,51 @@
 namespace Symfony\Component\Console\Event;
 
 /**
- * Allows to do things before the command is executed.
+ * Allows to do things before the command is executed, like skipping the command or changing the input.
  *
  * @author Fabien Potencier <fabien@symfony.com>
  */
 class ConsoleCommandEvent extends ConsoleEvent
 {
+    /**
+     * The return code for skipped commands, this will also be passed into the terminate event
+     */
+    const RETURN_CODE_DISABLED = 113;
+
+    /**
+     * Indicates if the command should be run or skipped
+     *
+     * @var bool
+     */
+    private $commandShouldRun = true;
+
+    /**
+     * Disables the command, so it won't be run
+     *
+     * @return bool
+     */
+    public function disableCommand()
+    {
+        return $this->commandShouldRun = false;
+    }
+
+    /**
+     * Enables the command
+     *
+     * @return bool
+     */
+    public function enableCommand()
+    {
+        return $this->commandShouldRun = true;
+    }
+
+    /**
+     * Returns true if the command is runnable, false otherwise
+     *
+     * @return bool
+     */
+    public function commandShouldRun()
+    {
+        return $this->commandShouldRun;
+    }
 }
diff --git a/vendor/symfony/console/Symfony/Component/Console/Event/ConsoleExceptionEvent.php b/vendor/symfony/console/Symfony/Component/Console/Event/ConsoleExceptionEvent.php
index 7075903..603b7ee 100644
--- a/vendor/symfony/console/Symfony/Component/Console/Event/ConsoleExceptionEvent.php
+++ b/vendor/symfony/console/Symfony/Component/Console/Event/ConsoleExceptionEvent.php
@@ -58,7 +58,7 @@ class ConsoleExceptionEvent extends ConsoleEvent
     /**
      * Gets the exit code.
      *
-     * @return int     The command exit code
+     * @return int The command exit code
      */
     public function getExitCode()
     {
diff --git a/vendor/symfony/console/Symfony/Component/Console/Event/ConsoleTerminateEvent.php b/vendor/symfony/console/Symfony/Component/Console/Event/ConsoleTerminateEvent.php
index ea3318d..b6a5d7c 100644
--- a/vendor/symfony/console/Symfony/Component/Console/Event/ConsoleTerminateEvent.php
+++ b/vendor/symfony/console/Symfony/Component/Console/Event/ConsoleTerminateEvent.php
@@ -39,7 +39,7 @@ class ConsoleTerminateEvent extends ConsoleEvent
     /**
      * Sets the exit code.
      *
-     * @param int     $exitCode The command exit code
+     * @param int $exitCode The command exit code
      */
     public function setExitCode($exitCode)
     {
@@ -49,7 +49,7 @@ class ConsoleTerminateEvent extends ConsoleEvent
     /**
      * Gets the exit code.
      *
-     * @return int     The command exit code
+     * @return int The command exit code
      */
     public function getExitCode()
     {
diff --git a/vendor/symfony/console/Symfony/Component/Console/Formatter/OutputFormatter.php b/vendor/symfony/console/Symfony/Component/Console/Formatter/OutputFormatter.php
index ca5f287..774f65f 100644
--- a/vendor/symfony/console/Symfony/Component/Console/Formatter/OutputFormatter.php
+++ b/vendor/symfony/console/Symfony/Component/Console/Formatter/OutputFormatter.php
@@ -39,7 +39,7 @@ class OutputFormatter implements OutputFormatterInterface
     /**
      * Initializes console output formatter.
      *
-     * @param bool             $decorated Whether this formatter should actually decorate strings
+     * @param bool                            $decorated Whether this formatter should actually decorate strings
      * @param OutputFormatterStyleInterface[] $styles    Array of "name => FormatterStyle" instances
      *
      * @api
@@ -63,7 +63,7 @@ class OutputFormatter implements OutputFormatterInterface
     /**
      * Sets the decorated flag.
      *
-     * @param bool    $decorated Whether to decorate the messages or not
+     * @param bool $decorated Whether to decorate the messages or not
      *
      * @api
      */
@@ -75,7 +75,7 @@ class OutputFormatter implements OutputFormatterInterface
     /**
      * Gets the decorated flag.
      *
-     * @return bool    true if the output will decorate messages, false otherwise
+     * @return bool true if the output will decorate messages, false otherwise
      *
      * @api
      */
@@ -194,7 +194,7 @@ class OutputFormatter implements OutputFormatterInterface
      *
      * @param string $string
      *
-     * @return OutputFormatterStyle|bool    false if string is not format string
+     * @return OutputFormatterStyle|bool false if string is not format string
      */
     private function createStyleFromString($string)
     {
@@ -215,7 +215,11 @@ class OutputFormatter implements OutputFormatterInterface
             } elseif ('bg' == $match[0]) {
                 $style->setBackground($match[1]);
             } else {
-                $style->setOption($match[1]);
+                try {
+                    $style->setOption($match[1]);
+                } catch (\InvalidArgumentException $e) {
+                    return false;
+                }
             }
         }
 
diff --git a/vendor/symfony/console/Symfony/Component/Console/Formatter/OutputFormatterInterface.php b/vendor/symfony/console/Symfony/Component/Console/Formatter/OutputFormatterInterface.php
index 151adcd..52efa31 100644
--- a/vendor/symfony/console/Symfony/Component/Console/Formatter/OutputFormatterInterface.php
+++ b/vendor/symfony/console/Symfony/Component/Console/Formatter/OutputFormatterInterface.php
@@ -23,7 +23,7 @@ interface OutputFormatterInterface
     /**
      * Sets the decorated flag.
      *
-     * @param bool    $decorated Whether to decorate the messages or not
+     * @param bool $decorated Whether to decorate the messages or not
      *
      * @api
      */
@@ -32,7 +32,7 @@ interface OutputFormatterInterface
     /**
      * Gets the decorated flag.
      *
-     * @return bool    true if the output will decorate messages, false otherwise
+     * @return bool true if the output will decorate messages, false otherwise
      *
      * @api
      */
diff --git a/vendor/symfony/console/Symfony/Component/Console/Formatter/OutputFormatterStyle.php b/vendor/symfony/console/Symfony/Component/Console/Formatter/OutputFormatterStyle.php
index 5019cda..38be37a 100644
--- a/vendor/symfony/console/Symfony/Component/Console/Formatter/OutputFormatterStyle.php
+++ b/vendor/symfony/console/Symfony/Component/Console/Formatter/OutputFormatterStyle.php
@@ -21,31 +21,31 @@ namespace Symfony\Component\Console\Formatter;
 class OutputFormatterStyle implements OutputFormatterStyleInterface
 {
     private static $availableForegroundColors = array(
-        'black'     => array('set' => 30, 'unset' => 39),
-        'red'       => array('set' => 31, 'unset' => 39),
-        'green'     => array('set' => 32, 'unset' => 39),
-        'yellow'    => array('set' => 33, 'unset' => 39),
-        'blue'      => array('set' => 34, 'unset' => 39),
-        'magenta'   => array('set' => 35, 'unset' => 39),
-        'cyan'      => array('set' => 36, 'unset' => 39),
-        'white'     => array('set' => 37, 'unset' => 39)
+        'black' => array('set' => 30, 'unset' => 39),
+        'red' => array('set' => 31, 'unset' => 39),
+        'green' => array('set' => 32, 'unset' => 39),
+        'yellow' => array('set' => 33, 'unset' => 39),
+        'blue' => array('set' => 34, 'unset' => 39),
+        'magenta' => array('set' => 35, 'unset' => 39),
+        'cyan' => array('set' => 36, 'unset' => 39),
+        'white' => array('set' => 37, 'unset' => 39),
     );
     private static $availableBackgroundColors = array(
-        'black'     => array('set' => 40, 'unset' => 49),
-        'red'       => array('set' => 41, 'unset' => 49),
-        'green'     => array('set' => 42, 'unset' => 49),
-        'yellow'    => array('set' => 43, 'unset' => 49),
-        'blue'      => array('set' => 44, 'unset' => 49),
-        'magenta'   => array('set' => 45, 'unset' => 49),
-        'cyan'      => array('set' => 46, 'unset' => 49),
-        'white'     => array('set' => 47, 'unset' => 49)
+        'black' => array('set' => 40, 'unset' => 49),
+        'red' => array('set' => 41, 'unset' => 49),
+        'green' => array('set' => 42, 'unset' => 49),
+        'yellow' => array('set' => 43, 'unset' => 49),
+        'blue' => array('set' => 44, 'unset' => 49),
+        'magenta' => array('set' => 45, 'unset' => 49),
+        'cyan' => array('set' => 46, 'unset' => 49),
+        'white' => array('set' => 47, 'unset' => 49),
     );
     private static $availableOptions = array(
-        'bold'          => array('set' => 1, 'unset' => 22),
-        'underscore'    => array('set' => 4, 'unset' => 24),
-        'blink'         => array('set' => 5, 'unset' => 25),
-        'reverse'       => array('set' => 7, 'unset' => 27),
-        'conceal'       => array('set' => 8, 'unset' => 28)
+        'bold' => array('set' => 1, 'unset' => 22),
+        'underscore' => array('set' => 4, 'unset' => 24),
+        'blink' => array('set' => 5, 'unset' => 25),
+        'reverse' => array('set' => 7, 'unset' => 27),
+        'conceal' => array('set' => 8, 'unset' => 28),
     );
 
     private $foreground;
@@ -160,7 +160,6 @@ class OutputFormatterStyle implements OutputFormatterStyleInterface
      * @param string $option The option name
      *
      * @throws \InvalidArgumentException When the option name isn't defined
-     *
      */
     public function unsetOption($option)
     {
diff --git a/vendor/symfony/console/Symfony/Component/Console/Formatter/OutputFormatterStyleStack.php b/vendor/symfony/console/Symfony/Component/Console/Formatter/OutputFormatterStyleStack.php
index e63912c..c8de803 100644
--- a/vendor/symfony/console/Symfony/Component/Console/Formatter/OutputFormatterStyleStack.php
+++ b/vendor/symfony/console/Symfony/Component/Console/Formatter/OutputFormatterStyleStack.php
@@ -62,7 +62,7 @@ class OutputFormatterStyleStack
      *
      * @return OutputFormatterStyleInterface
      *
-     * @throws \InvalidArgumentException  When style tags incorrectly nested
+     * @throws \InvalidArgumentException When style tags incorrectly nested
      */
     public function pop(OutputFormatterStyleInterface $style = null)
     {
diff --git a/vendor/symfony/console/Symfony/Component/Console/Helper/DebugFormatterHelper.php b/vendor/symfony/console/Symfony/Component/Console/Helper/DebugFormatterHelper.php
new file mode 100644
index 0000000..cdb620d
--- /dev/null
+++ b/vendor/symfony/console/Symfony/Component/Console/Helper/DebugFormatterHelper.php
@@ -0,0 +1,127 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Console\Helper;
+
+/**
+ * Helps outputting debug information when running an external program from a command.
+ *
+ * An external program can be a Process, an HTTP request, or anything else.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ */
+class DebugFormatterHelper extends Helper
+{
+    private $colors = array('black', 'red', 'green', 'yellow', 'blue', 'magenta', 'cyan', 'white');
+    private $started = array();
+    private $count = -1;
+
+    /**
+     * Starts a debug formatting session
+     *
+     * @param string $id      The id of the formatting session
+     * @param string $message The message to display
+     * @param string $prefix  The prefix to use
+     *
+     * @return string
+     */
+    public function start($id, $message, $prefix = 'RUN')
+    {
+        $this->started[$id] = array('border' => ++$this->count % count($this->colors));
+
+        return sprintf("%s<bg=blue;fg=white> %s </> <fg=blue>%s</>\n", $this->getBorder($id), $prefix, $message);
+    }
+
+    /**
+     * Adds progress to a formatting session
+     *
+     * @param string $id          The id of the formatting session
+     * @param string $buffer      The message to display
+     * @param bool   $error       Whether to consider the buffer as error
+     * @param string $prefix      The prefix for output
+     * @param string $errorPrefix The prefix for error output
+     *
+     * @return string
+     */
+    public function progress($id, $buffer, $error = false, $prefix = 'OUT', $errorPrefix = 'ERR')
+    {
+        $message = '';
+
+        if ($error) {
+            if (isset($this->started[$id]['out'])) {
+                $message .= "\n";
+                unset($this->started[$id]['out']);
+            }
+            if (!isset($this->started[$id]['err'])) {
+                $message .= sprintf("%s<bg=red;fg=white> %s </> ", $this->getBorder($id), $errorPrefix);
+                $this->started[$id]['err'] = true;
+            }
+
+            $message .= str_replace("\n", sprintf("\n%s<bg=red;fg=white> %s </> ", $this->getBorder($id), $errorPrefix), $buffer);
+        } else {
+            if (isset($this->started[$id]['err'])) {
+                $message .= "\n";
+                unset($this->started[$id]['err']);
+            }
+            if (!isset($this->started[$id]['out'])) {
+                $message .= sprintf("%s<bg=green;fg=white> %s </> ", $this->getBorder($id), $prefix);
+                $this->started[$id]['out'] = true;
+            }
+
+            $message .= str_replace("\n", sprintf("\n%s<bg=green;fg=white> %s </> ", $this->getBorder($id), $prefix), $buffer);
+        }
+
+        return $message;
+    }
+
+    /**
+     * Stops a formatting session
+     *
+     * @param string $id         The id of the formatting session
+     * @param string $message    The message to display
+     * @param bool   $successful Whether to consider the result as success
+     * @param string $prefix     The prefix for the end output
+     *
+     * @return string
+     */
+    public function stop($id, $message, $successful, $prefix = 'RES')
+    {
+        $trailingEOL = isset($this->started[$id]['out']) || isset($this->started[$id]['err']) ? "\n" : '';
+
+        if ($successful) {
+            return sprintf("%s%s<bg=green;fg=white> %s </> <fg=green>%s</>\n", $trailingEOL, $this->getBorder($id), $prefix, $message);
+        }
+
+        $message = sprintf("%s%s<bg=red;fg=white> %s </> <fg=red>%s</>\n", $trailingEOL, $this->getBorder($id), $prefix, $message);
+
+        unset($this->started[$id]['out'], $this->started[$id]['err']);
+
+        return $message;
+    }
+
+    /**
+     * @param string $id The id of the formatting session
+     *
+     * @return string
+     */
+    private function getBorder($id)
+    {
+        return sprintf('<bg=%s> </>', $this->colors[$this->started[$id]['border']]);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function getName()
+    {
+        return 'debug_formatter';
+    }
+}
diff --git a/vendor/symfony/console/Symfony/Component/Console/Helper/DescriptorHelper.php b/vendor/symfony/console/Symfony/Component/Console/Helper/DescriptorHelper.php
index d58e0bf..c324c99 100644
--- a/vendor/symfony/console/Symfony/Component/Console/Helper/DescriptorHelper.php
+++ b/vendor/symfony/console/Symfony/Component/Console/Helper/DescriptorHelper.php
@@ -36,10 +36,10 @@ class DescriptorHelper extends Helper
     public function __construct()
     {
         $this
-            ->register('txt',  new TextDescriptor())
-            ->register('xml',  new XmlDescriptor())
+            ->register('txt', new TextDescriptor())
+            ->register('xml', new XmlDescriptor())
             ->register('json', new JsonDescriptor())
-            ->register('md',   new MarkdownDescriptor())
+            ->register('md', new MarkdownDescriptor())
         ;
     }
 
@@ -59,8 +59,8 @@ class DescriptorHelper extends Helper
     public function describe(OutputInterface $output, $object, array $options = array())
     {
         $options = array_merge(array(
-            'raw_text'  => false,
-            'format'    => 'txt',
+            'raw_text' => false,
+            'format' => 'txt',
         ), $options);
 
         if (!isset($this->descriptors[$options['format']])) {
diff --git a/vendor/symfony/console/Symfony/Component/Console/Helper/DialogHelper.php b/vendor/symfony/console/Symfony/Component/Console/Helper/DialogHelper.php
index 0362dd4..5885180 100644
--- a/vendor/symfony/console/Symfony/Component/Console/Helper/DialogHelper.php
+++ b/vendor/symfony/console/Symfony/Component/Console/Helper/DialogHelper.php
@@ -35,11 +35,11 @@ class DialogHelper extends InputAwareHelper
      * @param string|array    $question     The question to ask
      * @param array           $choices      List of choices to pick from
      * @param bool|string     $default      The default answer if the user enters nothing
-     * @param bool|int        $attempts Max number of times to ask before giving up (false by default, which means infinite)
+     * @param bool|int        $attempts     Max number of times to ask before giving up (false by default, which means infinite)
      * @param string          $errorMessage Message which will be shown if invalid value from choice list would be picked
      * @param bool            $multiselect  Select more than one value separated by comma
      *
-     * @return int|string|array     The selected value or values (the key of the choices array)
+     * @return int|string|array The selected value or values (the key of the choices array)
      *
      * @throws \InvalidArgumentException
      */
@@ -153,7 +153,8 @@ class DialogHelper extends InputAwareHelper
 
                     // Pop the last character off the end of our string
                     $ret = substr($ret, 0, $i);
-                } elseif ("\033" === $c) { // Did we read an escape sequence?
+                } elseif ("\033" === $c) {
+                    // Did we read an escape sequence?
                     $c .= fread($inputStream, 2);
 
                     // A = Up Arrow. B = Down Arrow
@@ -232,7 +233,7 @@ class DialogHelper extends InputAwareHelper
      * @param string|array    $question The question to ask
      * @param bool            $default  The default answer if the user enters nothing
      *
-     * @return bool    true if the user has confirmed, false otherwise
+     * @return bool true if the user has confirmed, false otherwise
      */
     public function askConfirmation(OutputInterface $output, $question, $default = true)
     {
@@ -249,19 +250,19 @@ class DialogHelper extends InputAwareHelper
     }
 
     /**
-     * Asks a question to the user, the response is hidden
+     * Asks a question to the user, the response is hidden.
      *
      * @param OutputInterface $output   An Output instance
      * @param string|array    $question The question
      * @param bool            $fallback In case the response can not be hidden, whether to fallback on non-hidden question or not
      *
-     * @return string         The answer
+     * @return string The answer
      *
      * @throws \RuntimeException In case the fallback is deactivated and the response can not be hidden
      */
     public function askHiddenResponse(OutputInterface $output, $question, $fallback = true)
     {
-        if (defined('PHP_WINDOWS_VERSION_BUILD')) {
+        if ('\\' === DIRECTORY_SEPARATOR) {
             $exe = __DIR__.'/../Resources/bin/hiddeninput.exe';
 
             // handle code running from a phar
@@ -360,11 +361,10 @@ class DialogHelper extends InputAwareHelper
      * @param int|false       $attempts  Max number of times to ask before giving up (false by default, which means infinite)
      * @param bool            $fallback  In case the response can not be hidden, whether to fallback on non-hidden question or not
      *
-     * @return string         The response
+     * @return string The response
      *
      * @throws \Exception        When any of the validators return an error
      * @throws \RuntimeException In case the fallback is deactivated and the response can not be hidden
-     *
      */
     public function askHiddenResponseAndValidate(OutputInterface $output, $question, $validator, $attempts = false, $fallback = true)
     {
@@ -390,7 +390,7 @@ class DialogHelper extends InputAwareHelper
     }
 
     /**
-     * Returns the helper's input stream
+     * Returns the helper's input stream.
      *
      * @return string
      */
@@ -408,9 +408,9 @@ class DialogHelper extends InputAwareHelper
     }
 
     /**
-     * Return a valid Unix shell
+     * Return a valid Unix shell.
      *
-     * @return string|bool     The valid shell name, false in case no valid shell is found
+     * @return string|bool The valid shell name, false in case no valid shell is found
      */
     private function getShell()
     {
@@ -446,14 +446,14 @@ class DialogHelper extends InputAwareHelper
     }
 
     /**
-     * Validate an attempt
+     * Validate an attempt.
      *
-     * @param callable         $interviewer  A callable that will ask for a question and return the result
-     * @param OutputInterface  $output       An Output instance
-     * @param callable         $validator    A PHP callback
-     * @param int|false        $attempts     Max number of times to ask before giving up ; false will ask infinitely
+     * @param callable        $interviewer A callable that will ask for a question and return the result
+     * @param OutputInterface $output      An Output instance
+     * @param callable        $validator   A PHP callback
+     * @param int|false       $attempts    Max number of times to ask before giving up ; false will ask infinitely
      *
-     * @return string   The validated response
+     * @return string The validated response
      *
      * @throws \Exception In case the max number of attempts has been reached and no valid response has been given
      */
diff --git a/vendor/symfony/console/Symfony/Component/Console/Helper/Helper.php b/vendor/symfony/console/Symfony/Component/Console/Helper/Helper.php
index cc32055..78a73ee 100644
--- a/vendor/symfony/console/Symfony/Component/Console/Helper/Helper.php
+++ b/vendor/symfony/console/Symfony/Component/Console/Helper/Helper.php
@@ -47,7 +47,7 @@ abstract class Helper implements HelperInterface
      *
      * @param string $string The string to check its length
      *
-     * @return int     The length of the string
+     * @return int The length of the string
      */
     public static function strlen($string)
     {
diff --git a/vendor/symfony/console/Symfony/Component/Console/Helper/HelperSet.php b/vendor/symfony/console/Symfony/Component/Console/Helper/HelperSet.php
index 76fa2e4..467be86 100644
--- a/vendor/symfony/console/Symfony/Component/Console/Helper/HelperSet.php
+++ b/vendor/symfony/console/Symfony/Component/Console/Helper/HelperSet.php
@@ -56,7 +56,7 @@ class HelperSet implements \IteratorAggregate
      *
      * @param string $name The helper name
      *
-     * @return bool    true if the helper is defined, false otherwise
+     * @return bool true if the helper is defined, false otherwise
      */
     public function has($name)
     {
diff --git a/vendor/symfony/console/Symfony/Component/Console/Helper/ProcessHelper.php b/vendor/symfony/console/Symfony/Component/Console/Helper/ProcessHelper.php
new file mode 100644
index 0000000..0c9da73
--- /dev/null
+++ b/vendor/symfony/console/Symfony/Component/Console/Helper/ProcessHelper.php
@@ -0,0 +1,142 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Console\Helper;
+
+use Symfony\Component\Console\Output\OutputInterface;
+use Symfony\Component\Process\Exception\ProcessFailedException;
+use Symfony\Component\Process\Process;
+use Symfony\Component\Process\ProcessBuilder;
+
+/**
+ * The ProcessHelper class provides helpers to run external processes.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ */
+class ProcessHelper extends Helper
+{
+    /**
+     * Runs an external process.
+     *
+     * @param OutputInterface      $output    An OutputInterface instance
+     * @param string|array|Process $cmd       An instance of Process or an array of arguments to escape and run or a command to run
+     * @param string|null          $error     An error message that must be displayed if something went wrong
+     * @param callable|null        $callback  A PHP callback to run whenever there is some
+     *                                        output available on STDOUT or STDERR
+     * @param int                  $verbosity The threshold for verbosity
+     *
+     * @return Process The process that ran
+     */
+    public function run(OutputInterface $output, $cmd, $error = null, $callback = null, $verbosity = OutputInterface::VERBOSITY_VERY_VERBOSE)
+    {
+        $formatter = $this->getHelperSet()->get('debug_formatter');
+
+        if (is_array($cmd)) {
+            $process = ProcessBuilder::create($cmd)->getProcess();
+        } elseif ($cmd instanceof Process) {
+            $process = $cmd;
+        } else {
+            $process = new Process($cmd);
+        }
+
+        if ($verbosity <= $output->getVerbosity()) {
+            $output->write($formatter->start(spl_object_hash($process), $this->escapeString($process->getCommandLine())));
+        }
+
+        if ($output->isDebug()) {
+            $callback = $this->wrapCallback($output, $process, $callback);
+        }
+
+        $process->run($callback);
+
+        if ($verbosity <= $output->getVerbosity()) {
+            $message = $process->isSuccessful() ? 'Command ran successfully' : sprintf('%s Command did not run successfully', $process->getExitCode());
+            $output->write($formatter->stop(spl_object_hash($process), $message, $process->isSuccessful()));
+        }
+
+        if (!$process->isSuccessful() && null !== $error) {
+            $output->writeln(sprintf('<error>%s</error>', $this->escapeString($error)));
+        }
+
+        return $process;
+    }
+
+    /**
+     * Runs the process.
+     *
+     * This is identical to run() except that an exception is thrown if the process
+     * exits with a non-zero exit code.
+     *
+     * @param OutputInterface $output   An OutputInterface instance
+     * @param string|Process  $cmd      An instance of Process or a command to run
+     * @param string|null     $error    An error message that must be displayed if something went wrong
+     * @param callable|null   $callback A PHP callback to run whenever there is some
+     *                                  output available on STDOUT or STDERR
+     *
+     * @return Process The process that ran
+     *
+     * @throws ProcessFailedException
+     *
+     * @see run()
+     */
+    public function mustRun(OutputInterface $output, $cmd, $error = null, $callback = null)
+    {
+        $process = $this->run($output, $cmd, $error, $callback);
+
+        if (!$process->isSuccessful()) {
+            throw new ProcessFailedException($process);
+        }
+
+        return $process;
+    }
+
+    /**
+     * Wraps a Process callback to add debugging output.
+     *
+     * @param OutputInterface $output   An OutputInterface interface
+     * @param Process         $process  The Process
+     * @param callable|null   $callback A PHP callable
+     *
+     * @return callable
+     */
+    public function wrapCallback(OutputInterface $output, Process $process, $callback = null)
+    {
+        $formatter = $this->getHelperSet()->get('debug_formatter');
+
+        $that = $this;
+
+        return function ($type, $buffer) use ($output, $process, $callback, $formatter, $that) {
+            $output->write($formatter->progress(spl_object_hash($process), $that->escapeString($buffer), Process::ERR === $type));
+
+            if (null !== $callback) {
+                call_user_func($callback, $type, $buffer);
+            }
+        };
+    }
+
+    /**
+     * This method is public for PHP 5.3 compatibility, it should be private.
+     *
+     * @internal
+     */
+    public function escapeString($str)
+    {
+        return str_replace('<', '\\<', $str);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function getName()
+    {
+        return 'process';
+    }
+}
diff --git a/vendor/symfony/console/Symfony/Component/Console/Helper/ProgressBar.php b/vendor/symfony/console/Symfony/Component/Console/Helper/ProgressBar.php
index 99c0dfc..893664e 100644
--- a/vendor/symfony/console/Symfony/Component/Console/Helper/ProgressBar.php
+++ b/vendor/symfony/console/Symfony/Component/Console/Helper/ProgressBar.php
@@ -11,7 +11,6 @@
 
 namespace Symfony\Component\Console\Helper;
 
-use Symfony\Component\Console\Output\NullOutput;
 use Symfony\Component\Console\Output\OutputInterface;
 
 /**
@@ -23,26 +22,26 @@ use Symfony\Component\Console\Output\OutputInterface;
 class ProgressBar
 {
     // options
-    private $barWidth     = 28;
-    private $barChar      = '=';
+    private $barWidth = 28;
+    private $barChar;
     private $emptyBarChar = '-';
     private $progressChar = '>';
-    private $format       = null;
-    private $redrawFreq   = 1;
+    private $format = null;
+    private $redrawFreq = 1;
 
     /**
      * @var OutputInterface
      */
     private $output;
-    private $step;
+    private $step = 0;
     private $max;
     private $startTime;
     private $stepWidth;
-    private $percent;
-    private $lastMessagesLength;
-    private $barCharOriginal;
+    private $percent = 0.0;
+    private $lastMessagesLength = 0;
     private $formatLineCount;
     private $messages;
+    private $overwrite = true;
 
     private static $formatters;
     private static $formats;
@@ -55,20 +54,22 @@ class ProgressBar
      */
     public function __construct(OutputInterface $output, $max = 0)
     {
-        // Disabling output when it does not support ANSI codes as it would result in a broken display anyway.
-        $this->output = $output->isDecorated() ? $output : new NullOutput();
-        $this->max = (int) $max;
-        $this->stepWidth = $this->max > 0 ? Helper::strlen($this->max) : 4;
+        $this->output = $output;
+        $this->setMaxSteps($max);
 
-        if (!self::$formatters) {
-            self::$formatters = self::initPlaceholderFormatters();
-        }
+        if (!$this->output->isDecorated()) {
+            // disable overwrite when output does not support ANSI codes.
+            $this->overwrite = false;
 
-        if (!self::$formats) {
-            self::$formats = self::initFormats();
+            if ($this->max > 10) {
+                // set a reasonable redraw frequency so output isn't flooded
+                $this->setRedrawFrequency($max / 10);
+            }
         }
 
         $this->setFormat($this->determineBestFormat());
+
+        $this->startTime = time();
     }
 
     /**
@@ -150,7 +151,7 @@ class ProgressBar
     /**
      * Gets the progress bar start time.
      *
-     * @return int     The progress bar start time
+     * @return int The progress bar start time
      */
     public function getStartTime()
     {
@@ -160,7 +161,7 @@ class ProgressBar
     /**
      * Gets the progress bar maximal steps.
      *
-     * @return int     The progress bar max steps
+     * @return int The progress bar max steps
      */
     public function getMaxSteps()
     {
@@ -170,17 +171,31 @@ class ProgressBar
     /**
      * Gets the progress bar step.
      *
-     * @return int     The progress bar step
+     * @deprecated since 2.6, to be removed in 3.0. Use {@link getProgress()} instead.
+     *
+     * @return int The progress bar step
      */
     public function getStep()
     {
+        return $this->getProgress();
+    }
+
+    /**
+     * Gets the current step position.
+     *
+     * @return int The progress bar step
+     */
+    public function getProgress()
+    {
         return $this->step;
     }
 
     /**
      * Gets the progress bar step width.
      *
-     * @return int     The progress bar step width
+     * @internal This method is public for PHP 5.3 compatibility, it should not be used.
+     *
+     * @return int The progress bar step width
      */
     public function getStepWidth()
     {
@@ -190,7 +205,7 @@ class ProgressBar
     /**
      * Gets the current progress bar percent.
      *
-     * @return int     The current progress bar percent
+     * @return float The current progress bar percent
      */
     public function getProgressPercent()
     {
@@ -200,7 +215,7 @@ class ProgressBar
     /**
      * Sets the progress bar width.
      *
-     * @param int     $size The progress bar size
+     * @param int $size The progress bar size
      */
     public function setBarWidth($size)
     {
@@ -210,7 +225,7 @@ class ProgressBar
     /**
      * Gets the progress bar width.
      *
-     * @return int     The progress bar size
+     * @return int The progress bar size
      */
     public function getBarWidth()
     {
@@ -234,6 +249,10 @@ class ProgressBar
      */
     public function getBarCharacter()
     {
+        if (null === $this->barChar) {
+            return $this->max ? '=' : $this->emptyBarChar;
+        }
+
         return $this->barChar;
     }
 
@@ -285,10 +304,10 @@ class ProgressBar
     public function setFormat($format)
     {
         // try to use the _nomax variant if available
-        if (!$this->max && isset(self::$formats[$format.'_nomax'])) {
-            $this->format = self::$formats[$format.'_nomax'];
-        } elseif (isset(self::$formats[$format])) {
-            $this->format = self::$formats[$format];
+        if (!$this->max && null !== self::getFormatDefinition($format.'_nomax')) {
+            $this->format = self::getFormatDefinition($format.'_nomax');
+        } elseif (null !== self::getFormatDefinition($format)) {
+            $this->format = self::getFormatDefinition($format);
         } else {
             $this->format = $format;
         }
@@ -299,7 +318,7 @@ class ProgressBar
     /**
      * Sets the redraw frequency.
      *
-     * @param int     $freq The frequency in steps
+     * @param int $freq The frequency in steps
      */
     public function setRedrawFrequency($freq)
     {
@@ -308,18 +327,17 @@ class ProgressBar
 
     /**
      * Starts the progress output.
+     *
+     * @param int|null $max Number of steps to complete the bar (0 if indeterminate), null to leave unchanged
      */
-    public function start()
+    public function start($max = null)
     {
         $this->startTime = time();
         $this->step = 0;
-        $this->percent = 0;
-        $this->lastMessagesLength = 0;
-        $this->barCharOriginal = '';
+        $this->percent = 0.0;
 
-        if (!$this->max) {
-            $this->barCharOriginal = $this->barChar;
-            $this->barChar = $this->emptyBarChar;
+        if (null !== $max) {
+            $this->setMaxSteps($max);
         }
 
         $this->display();
@@ -328,41 +346,61 @@ class ProgressBar
     /**
      * Advances the progress output X steps.
      *
-     * @param int     $step Number of steps to advance
+     * @param int $step Number of steps to advance
      *
      * @throws \LogicException
      */
     public function advance($step = 1)
     {
-        $this->setCurrent($this->step + $step);
+        $this->setProgress($this->step + $step);
     }
 
     /**
      * Sets the current progress.
      *
-     * @param int     $step The current progress
+     * @deprecated since 2.6, to be removed in 3.0. Use {@link setProgress()} instead.
+     *
+     * @param int $step The current progress
      *
      * @throws \LogicException
      */
     public function setCurrent($step)
     {
-        if (null === $this->startTime) {
-            throw new \LogicException('You must start the progress bar before calling setCurrent().');
-        }
+        $this->setProgress($step);
+    }
+
+    /**
+     * Sets whether to overwrite the progressbar, false for new line
+     *
+     * @param bool $overwrite
+     */
+    public function setOverwrite($overwrite)
+    {
+        $this->overwrite = (bool) $overwrite;
+    }
 
+    /**
+     * Sets the current progress.
+     *
+     * @param int $step The current progress
+     *
+     * @throws \LogicException
+     */
+    public function setProgress($step)
+    {
         $step = (int) $step;
         if ($step < $this->step) {
             throw new \LogicException('You can\'t regress the progress bar.');
         }
 
-        if ($this->max > 0 && $step > $this->max) {
-            throw new \LogicException('You can\'t advance the progress bar past the max value.');
+        if ($this->max && $step > $this->max) {
+            $this->max = $step;
         }
 
         $prevPeriod = intval($this->step / $this->redrawFreq);
         $currPeriod = intval($step / $this->redrawFreq);
         $this->step = $step;
-        $this->percent = $this->max > 0 ? (float) $this->step / $this->max : 0;
+        $this->percent = $this->max ? (float) $this->step / $this->max : 0;
         if ($prevPeriod !== $currPeriod || $this->max === $step) {
             $this->display();
         }
@@ -373,32 +411,25 @@ class ProgressBar
      */
     public function finish()
     {
-        if (null === $this->startTime) {
-            throw new \LogicException('You must start the progress bar before calling finish().');
-        }
-
         if (!$this->max) {
-            $this->barChar = $this->barCharOriginal;
             $this->max = $this->step;
-            $this->setCurrent($this->max);
-            $this->max = 0;
-            $this->barChar = $this->emptyBarChar;
-        } else {
-            $this->setCurrent($this->max);
         }
 
-        $this->startTime = null;
+        if ($this->step === $this->max && !$this->overwrite) {
+            // prevent double 100% output
+            return;
+        }
+
+        $this->setProgress($this->max);
     }
 
     /**
      * Outputs the current progress string.
-     *
-     * @throws \LogicException
      */
     public function display()
     {
-        if (null === $this->startTime) {
-            throw new \LogicException('You must start the progress bar before calling display().');
+        if (OutputInterface::VERBOSITY_QUIET === $this->output->getVerbosity()) {
+            return;
         }
 
         // these 3 variables can be removed in favor of using $this in the closure when support for PHP 5.3 will be dropped.
@@ -431,10 +462,25 @@ class ProgressBar
      */
     public function clear()
     {
+        if (!$this->overwrite) {
+            return;
+        }
+
         $this->overwrite(str_repeat("\n", $this->formatLineCount));
     }
 
     /**
+     * Sets the progress bar maximal steps.
+     *
+     * @param int     The progress bar max steps
+     */
+    private function setMaxSteps($max)
+    {
+        $this->max = max(0, (int) $max);
+        $this->stepWidth = $this->max ? Helper::strlen($this->max) : 4;
+    }
+
+    /**
      * Overwrites a previous message to the output.
      *
      * @param string $message The message
@@ -452,8 +498,14 @@ class ProgressBar
             }
         }
 
-        // move back to the beginning of the progress bar before redrawing it
-        $this->output->write("\x0D");
+        if ($this->overwrite) {
+            // move back to the beginning of the progress bar before redrawing it
+            $this->output->write("\x0D");
+        } elseif ($this->step > 0) {
+            // move to new line
+            $this->output->writeln('');
+        }
+
         if ($this->formatLineCount) {
             $this->output->write(sprintf("\033[%dA", $this->formatLineCount));
         }
@@ -473,13 +525,13 @@ class ProgressBar
         switch ($this->output->getVerbosity()) {
             // OutputInterface::VERBOSITY_QUIET: display is disabled anyway
             case OutputInterface::VERBOSITY_VERBOSE:
-                return $this->max > 0 ? 'verbose' : 'verbose_nomax';
+                return $this->max ? 'verbose' : 'verbose_nomax';
             case OutputInterface::VERBOSITY_VERY_VERBOSE:
-                return $this->max > 0 ? 'very_verbose' : 'very_verbose_nomax';
+                return $this->max ? 'very_verbose' : 'very_verbose_nomax';
             case OutputInterface::VERBOSITY_DEBUG:
-                return $this->max > 0 ? 'debug' : 'debug_nomax';
+                return $this->max ? 'debug' : 'debug_nomax';
             default:
-                return $this->max > 0 ? 'normal' : 'normal_nomax';
+                return $this->max ? 'normal' : 'normal_nomax';
         }
     }
 
@@ -487,7 +539,7 @@ class ProgressBar
     {
         return array(
             'bar' => function (ProgressBar $bar, OutputInterface $output) {
-                $completeBars = floor($bar->getMaxSteps() > 0 ? $bar->getProgressPercent() * $bar->getBarWidth() : $bar->getStep() % $bar->getBarWidth());
+                $completeBars = floor($bar->getMaxSteps() > 0 ? $bar->getProgressPercent() * $bar->getBarWidth() : $bar->getProgress() % $bar->getBarWidth());
                 $display = str_repeat($bar->getBarCharacter(), $completeBars);
                 if ($completeBars < $bar->getBarWidth()) {
                     $emptyBars = $bar->getBarWidth() - $completeBars - Helper::strlenWithoutDecoration($output->getFormatter(), $bar->getProgressCharacter());
@@ -504,10 +556,10 @@ class ProgressBar
                     throw new \LogicException('Unable to display the remaining time if the maximum number of steps is not set.');
                 }
 
-                if (!$bar->getStep()) {
+                if (!$bar->getProgress()) {
                     $remaining = 0;
                 } else {
-                    $remaining = round((time() - $bar->getStartTime()) / $bar->getStep() * ($bar->getMaxSteps() - $bar->getStep()));
+                    $remaining = round((time() - $bar->getStartTime()) / $bar->getProgress() * ($bar->getMaxSteps() - $bar->getProgress()));
                 }
 
                 return Helper::formatTime($remaining);
@@ -517,10 +569,10 @@ class ProgressBar
                     throw new \LogicException('Unable to display the estimated time if the maximum number of steps is not set.');
                 }
 
-                if (!$bar->getStep()) {
+                if (!$bar->getProgress()) {
                     $estimated = 0;
                 } else {
-                    $estimated = round((time() - $bar->getStartTime()) / $bar->getStep() * $bar->getMaxSteps());
+                    $estimated = round((time() - $bar->getStartTime()) / $bar->getProgress() * $bar->getMaxSteps());
                 }
 
                 return Helper::formatTime($estimated);
@@ -529,7 +581,7 @@ class ProgressBar
                 return Helper::formatMemory(memory_get_usage(true));
             },
             'current' => function (ProgressBar $bar) {
-                return str_pad($bar->getStep(), $bar->getStepWidth(), ' ', STR_PAD_LEFT);
+                return str_pad($bar->getProgress(), $bar->getStepWidth(), ' ', STR_PAD_LEFT);
             },
             'max' => function (ProgressBar $bar) {
                 return $bar->getMaxSteps();
@@ -543,17 +595,17 @@ class ProgressBar
     private static function initFormats()
     {
         return array(
-            'normal'             => ' %current%/%max% [%bar%] %percent:3s%%',
-            'normal_nomax'       => ' %current% [%bar%]',
+            'normal' => ' %current%/%max% [%bar%] %percent:3s%%',
+            'normal_nomax' => ' %current% [%bar%]',
 
-            'verbose'            => ' %current%/%max% [%bar%] %percent:3s%% %elapsed:6s%',
-            'verbose_nomax'      => ' %current% [%bar%] %elapsed:6s%',
+            'verbose' => ' %current%/%max% [%bar%] %percent:3s%% %elapsed:6s%',
+            'verbose_nomax' => ' %current% [%bar%] %elapsed:6s%',
 
-            'very_verbose'       => ' %current%/%max% [%bar%] %percent:3s%% %elapsed:6s%/%estimated:-6s%',
+            'very_verbose' => ' %current%/%max% [%bar%] %percent:3s%% %elapsed:6s%/%estimated:-6s%',
             'very_verbose_nomax' => ' %current% [%bar%] %elapsed:6s%',
 
-            'debug'              => ' %current%/%max% [%bar%] %percent:3s%% %elapsed:6s%/%estimated:-6s% %memory:6s%',
-            'debug_nomax'        => ' %current% [%bar%] %elapsed:6s% %memory:6s%',
+            'debug' => ' %current%/%max% [%bar%] %percent:3s%% %elapsed:6s%/%estimated:-6s% %memory:6s%',
+            'debug_nomax' => ' %current% [%bar%] %elapsed:6s% %memory:6s%',
         );
     }
 }
diff --git a/vendor/symfony/console/Symfony/Component/Console/Helper/ProgressHelper.php b/vendor/symfony/console/Symfony/Component/Console/Helper/ProgressHelper.php
index d0acf05..abd1c2b 100644
--- a/vendor/symfony/console/Symfony/Component/Console/Helper/ProgressHelper.php
+++ b/vendor/symfony/console/Symfony/Component/Console/Helper/ProgressHelper.php
@@ -24,20 +24,20 @@ use Symfony\Component\Console\Output\OutputInterface;
  */
 class ProgressHelper extends Helper
 {
-    const FORMAT_QUIET         = ' %percent%%';
-    const FORMAT_NORMAL        = ' %current%/%max% [%bar%] %percent%%';
-    const FORMAT_VERBOSE       = ' %current%/%max% [%bar%] %percent%% Elapsed: %elapsed%';
-    const FORMAT_QUIET_NOMAX   = ' %current%';
-    const FORMAT_NORMAL_NOMAX  = ' %current% [%bar%]';
+    const FORMAT_QUIET = ' %percent%%';
+    const FORMAT_NORMAL = ' %current%/%max% [%bar%] %percent%%';
+    const FORMAT_VERBOSE = ' %current%/%max% [%bar%] %percent%% Elapsed: %elapsed%';
+    const FORMAT_QUIET_NOMAX = ' %current%';
+    const FORMAT_NORMAL_NOMAX = ' %current% [%bar%]';
     const FORMAT_VERBOSE_NOMAX = ' %current% [%bar%] Elapsed: %elapsed%';
 
     // options
-    private $barWidth     = 28;
-    private $barChar      = '=';
+    private $barWidth = 28;
+    private $barChar = '=';
     private $emptyBarChar = '-';
     private $progressChar = '>';
-    private $format       = null;
-    private $redrawFreq   = 1;
+    private $format = null;
+    private $redrawFreq = 1;
 
     private $lastMessagesLength;
     private $barCharOriginal;
@@ -48,28 +48,28 @@ class ProgressHelper extends Helper
     private $output;
 
     /**
-     * Current step
+     * Current step.
      *
      * @var int
      */
     private $current;
 
     /**
-     * Maximum number of steps
+     * Maximum number of steps.
      *
      * @var int
      */
     private $max;
 
     /**
-     * Start time of the progress bar
+     * Start time of the progress bar.
      *
      * @var int
      */
     private $startTime;
 
     /**
-     * List of formatting variables
+     * List of formatting variables.
      *
      * @var array
      */
@@ -82,26 +82,26 @@ class ProgressHelper extends Helper
     );
 
     /**
-     * Available formatting variables
+     * Available formatting variables.
      *
      * @var array
      */
     private $formatVars;
 
     /**
-     * Stored format part widths (used for padding)
+     * Stored format part widths (used for padding).
      *
      * @var array
      */
     private $widths = array(
         'current' => 4,
-        'max'     => 4,
+        'max' => 4,
         'percent' => 3,
         'elapsed' => 6,
     );
 
     /**
-     * Various time formats
+     * Various time formats.
      *
      * @var array
      */
@@ -186,11 +186,11 @@ class ProgressHelper extends Helper
     public function start(OutputInterface $output, $max = null)
     {
         $this->startTime = time();
-        $this->current   = 0;
-        $this->max       = (int) $max;
+        $this->current = 0;
+        $this->max = (int) $max;
 
         // Disabling output when it does not support ANSI codes as it would result in a broken display anyway.
-        $this->output    = $output->isDecorated() ? $output : new NullOutput();
+        $this->output = $output->isDecorated() ? $output : new NullOutput();
         $this->lastMessagesLength = 0;
         $this->barCharOriginal = '';
 
@@ -225,8 +225,8 @@ class ProgressHelper extends Helper
     /**
      * Advances the progress output X steps.
      *
-     * @param int     $step   Number of steps to advance
-     * @param bool    $redraw Whether to redraw or not
+     * @param int  $step   Number of steps to advance
+     * @param bool $redraw Whether to redraw or not
      *
      * @throws \LogicException
      */
@@ -238,8 +238,8 @@ class ProgressHelper extends Helper
     /**
      * Sets the current progress.
      *
-     * @param int     $current The current progress
-     * @param bool    $redraw  Whether to redraw or not
+     * @param int  $current The current progress
+     * @param bool $redraw  Whether to redraw or not
      *
      * @throws \LogicException
      */
@@ -272,7 +272,7 @@ class ProgressHelper extends Helper
     /**
      * Outputs the current progress string.
      *
-     * @param bool    $finish Forces the end result
+     * @param bool $finish Forces the end result
      *
      * @throws \LogicException
      */
@@ -334,24 +334,24 @@ class ProgressHelper extends Helper
         }
 
         if ($this->max > 0) {
-            $this->widths['max']     = $this->strlen($this->max);
+            $this->widths['max'] = $this->strlen($this->max);
             $this->widths['current'] = $this->widths['max'];
         } else {
             $this->barCharOriginal = $this->barChar;
-            $this->barChar         = $this->emptyBarChar;
+            $this->barChar = $this->emptyBarChar;
         }
     }
 
     /**
      * Generates the array map of format variables to values.
      *
-     * @param bool    $finish Forces the end result
+     * @param bool $finish Forces the end result
      *
      * @return array Array of format vars and values
      */
     private function generate($finish = false)
     {
-        $vars    = array();
+        $vars = array();
         $percent = 0;
         if ($this->max > 0) {
             $percent = (float) $this->current / $this->max;
@@ -403,7 +403,7 @@ class ProgressHelper extends Helper
     /**
      * Converts seconds into human-readable format.
      *
-     * @param int     $secs Number of seconds
+     * @param int $secs Number of seconds
      *
      * @return string Time in readable format
      */
@@ -428,8 +428,8 @@ class ProgressHelper extends Helper
     /**
      * Overwrites a previous message to the output.
      *
-     * @param OutputInterface $output   An Output instance
-     * @param string          $message  The message
+     * @param OutputInterface $output  An Output instance
+     * @param string          $message The message
      */
     private function overwrite(OutputInterface $output, $message)
     {
diff --git a/vendor/symfony/console/Symfony/Component/Console/Helper/QuestionHelper.php b/vendor/symfony/console/Symfony/Component/Console/Helper/QuestionHelper.php
index 0500b41..caa0914 100644
--- a/vendor/symfony/console/Symfony/Component/Console/Helper/QuestionHelper.php
+++ b/vendor/symfony/console/Symfony/Component/Console/Helper/QuestionHelper.php
@@ -164,7 +164,7 @@ class QuestionHelper extends Helper
      * Autocompletes a question.
      *
      * @param OutputInterface $output
-     * @param Question $question
+     * @param Question        $question
      *
      * @return string
      */
@@ -208,7 +208,8 @@ class QuestionHelper extends Helper
 
                 // Pop the last character off the end of our string
                 $ret = substr($ret, 0, $i);
-            } elseif ("\033" === $c) { // Did we read an escape sequence?
+            } elseif ("\033" === $c) {
+                // Did we read an escape sequence?
                 $c .= fread($inputStream, 2);
 
                 // A = Up Arrow. B = Down Arrow
@@ -280,15 +281,15 @@ class QuestionHelper extends Helper
     /**
      * Gets a hidden response from user.
      *
-     * @param OutputInterface $output   An Output instance
+     * @param OutputInterface $output An Output instance
      *
-     * @return string         The answer
+     * @return string The answer
      *
      * @throws \RuntimeException In case the fallback is deactivated and the response cannot be hidden
      */
     private function getHiddenResponse(OutputInterface $output, $inputStream)
     {
-        if (defined('PHP_WINDOWS_VERSION_BUILD')) {
+        if ('\\' === DIRECTORY_SEPARATOR) {
             $exe = __DIR__.'/../Resources/bin/hiddeninput.exe';
 
             // handle code running from a phar
@@ -340,11 +341,11 @@ class QuestionHelper extends Helper
     /**
      * Validates an attempt.
      *
-     * @param callable        $interviewer  A callable that will ask for a question and return the result
-     * @param OutputInterface $output       An Output instance
-     * @param Question        $question     A Question instance
+     * @param callable        $interviewer A callable that will ask for a question and return the result
+     * @param OutputInterface $output      An Output instance
+     * @param Question        $question    A Question instance
      *
-     * @return string   The validated response
+     * @return string The validated response
      *
      * @throws \Exception In case the max number of attempts has been reached and no valid response has been given
      */
@@ -354,7 +355,13 @@ class QuestionHelper extends Helper
         $attempts = $question->getMaxAttempts();
         while (null === $attempts || $attempts--) {
             if (null !== $error) {
-                $output->writeln($this->getHelperSet()->get('formatter')->formatBlock($error->getMessage(), 'error'));
+                if (null !== $this->getHelperSet() && $this->getHelperSet()->has('formatter')) {
+                    $message = $this->getHelperSet()->get('formatter')->formatBlock($error->getMessage(), 'error');
+                } else {
+                    $message = '<error>'.$error->getMessage().'</error>';
+                }
+
+                $output->writeln($message);
             }
 
             try {
@@ -369,7 +376,7 @@ class QuestionHelper extends Helper
     /**
      * Returns a valid unix shell.
      *
-     * @return string|bool     The valid shell name, false in case no valid shell is found
+     * @return string|bool The valid shell name, false in case no valid shell is found
      */
     private function getShell()
     {
diff --git a/vendor/symfony/console/Symfony/Component/Console/Helper/Table.php b/vendor/symfony/console/Symfony/Component/Console/Helper/Table.php
index 5a3dbc1..5b4ad69 100644
--- a/vendor/symfony/console/Symfony/Component/Console/Helper/Table.php
+++ b/vendor/symfony/console/Symfony/Component/Console/Helper/Table.php
@@ -174,8 +174,9 @@ class Table
 
         $this->rows[] = array_values($row);
 
-        $keys = array_keys($this->rows);
-        $rowKey = array_pop($keys);
+        end($this->rows);
+        $rowKey = key($this->rows);
+        reset($this->rows);
 
         foreach ($row as $key => $cellValue) {
             if (!strstr($cellValue, "\n")) {
@@ -296,9 +297,9 @@ class Table
     /**
      * Renders table cell with padding.
      *
-     * @param array   $row
-     * @param int     $column
-     * @param string  $cellFormat
+     * @param array  $row
+     * @param int    $column
+     * @param string $cellFormat
      */
     private function renderCell(array $row, $column, $cellFormat)
     {
@@ -339,7 +340,7 @@ class Table
     /**
      * Gets column width.
      *
-     * @param int     $column
+     * @param int $column
      *
      * @return int
      */
@@ -364,8 +365,8 @@ class Table
     /**
      * Gets cell width.
      *
-     * @param array   $row
-     * @param int     $column
+     * @param array $row
+     * @param int   $column
      *
      * @return int
      */
diff --git a/vendor/symfony/console/Symfony/Component/Console/Helper/TableHelper.php b/vendor/symfony/console/Symfony/Component/Console/Helper/TableHelper.php
index eeb670e..fc6861c 100644
--- a/vendor/symfony/console/Symfony/Component/Console/Helper/TableHelper.php
+++ b/vendor/symfony/console/Symfony/Component/Console/Helper/TableHelper.php
@@ -45,7 +45,7 @@ class TableHelper extends Helper
      *
      * @return TableHelper
      *
-     * @throws InvalidArgumentException when the table layout is not known
+     * @throws \InvalidArgumentException when the table layout is not known
      */
     public function setLayout($layout)
     {
@@ -64,7 +64,6 @@ class TableHelper extends Helper
 
             default:
                 throw new \InvalidArgumentException(sprintf('Invalid table layout "%s".', $layout));
-                break;
         };
 
         return $this;
@@ -220,7 +219,7 @@ class TableHelper extends Helper
     /**
      * Sets cell padding type.
      *
-     * @param int     $padType STR_PAD_*
+     * @param int $padType STR_PAD_*
      *
      * @return TableHelper
      */
diff --git a/vendor/symfony/console/Symfony/Component/Console/Helper/TableStyle.php b/vendor/symfony/console/Symfony/Component/Console/Helper/TableStyle.php
index 338f1a0..580f9ab 100644
--- a/vendor/symfony/console/Symfony/Component/Console/Helper/TableStyle.php
+++ b/vendor/symfony/console/Symfony/Component/Console/Helper/TableStyle.php
@@ -228,7 +228,7 @@ class TableStyle
     /**
      * Sets cell padding type.
      *
-     * @param int     $padType STR_PAD_*
+     * @param int $padType STR_PAD_*
      *
      * @return TableStyle
      */
diff --git a/vendor/symfony/console/Symfony/Component/Console/Input/ArgvInput.php b/vendor/symfony/console/Symfony/Component/Console/Input/ArgvInput.php
index 3a0f0a7..f5cc5d1 100644
--- a/vendor/symfony/console/Symfony/Component/Console/Input/ArgvInput.php
+++ b/vendor/symfony/console/Symfony/Component/Console/Input/ArgvInput.php
@@ -33,8 +33,8 @@ namespace Symfony\Component\Console\Input;
  *
  * @author Fabien Potencier <fabien@symfony.com>
  *
- * @see    http://www.gnu.org/software/libc/manual/html_node/Argument-Syntax.html
- * @see    http://www.opengroup.org/onlinepubs/009695399/basedefs/xbd_chap12.html#tag_12_02
+ * @see http://www.gnu.org/software/libc/manual/html_node/Argument-Syntax.html
+ * @see http://www.opengroup.org/onlinepubs/009695399/basedefs/xbd_chap12.html#tag_12_02
  *
  * @api
  */
@@ -169,7 +169,7 @@ class ArgvInput extends Input
         // if input is expecting another argument, add it
         if ($this->definition->hasArgument($c)) {
             $arg = $this->definition->getArgument($c);
-            $this->arguments[$arg->getName()] = $arg->isArray()? array($token) : $token;
+            $this->arguments[$arg->getName()] = $arg->isArray() ? array($token) : $token;
 
         // if last argument isArray(), append token to last argument
         } elseif ($this->definition->hasArgument($c - 1) && $this->definition->getArgument($c - 1)->isArray()) {
@@ -278,7 +278,7 @@ class ArgvInput extends Input
      *
      * @param string|array $values The value(s) to look for in the raw parameters (can be an array)
      *
-     * @return bool    true if the value is contained in the raw parameters
+     * @return bool true if the value is contained in the raw parameters
      */
     public function hasParameterOption($values)
     {
@@ -309,9 +309,11 @@ class ArgvInput extends Input
     public function getParameterOption($values, $default = false)
     {
         $values = (array) $values;
-
         $tokens = $this->tokens;
-        while ($token = array_shift($tokens)) {
+
+        while (0 < count($tokens)) {
+            $token = array_shift($tokens);
+
             foreach ($values as $value) {
                 if ($token === $value || 0 === strpos($token, $value.'=')) {
                     if (false !== $pos = strpos($token, '=')) {
@@ -327,7 +329,7 @@ class ArgvInput extends Input
     }
 
     /**
-     * Returns a stringified representation of the args passed to the command
+     * Returns a stringified representation of the args passed to the command.
      *
      * @return string
      */
@@ -336,7 +338,7 @@ class ArgvInput extends Input
         $self = $this;
         $tokens = array_map(function ($token) use ($self) {
             if (preg_match('{^(-[^=]+=)(.+)}', $token, $match)) {
-                return $match[1] . $self->escapeToken($match[2]);
+                return $match[1].$self->escapeToken($match[2]);
             }
 
             if ($token && $token[0] !== '-') {
diff --git a/vendor/symfony/console/Symfony/Component/Console/Input/ArrayInput.php b/vendor/symfony/console/Symfony/Component/Console/Input/ArrayInput.php
index 27d9132..f3222bb 100644
--- a/vendor/symfony/console/Symfony/Component/Console/Input/ArrayInput.php
+++ b/vendor/symfony/console/Symfony/Component/Console/Input/ArrayInput.php
@@ -65,7 +65,7 @@ class ArrayInput extends Input
      *
      * @param string|array $values The values to look for in the raw parameters (can be an array)
      *
-     * @return bool    true if the value is contained in the raw parameters
+     * @return bool true if the value is contained in the raw parameters
      */
     public function hasParameterOption($values)
     {
@@ -111,7 +111,7 @@ class ArrayInput extends Input
     }
 
     /**
-     * Returns a stringified representation of the args passed to the command
+     * Returns a stringified representation of the args passed to the command.
      *
      * @return string
      */
@@ -120,7 +120,7 @@ class ArrayInput extends Input
         $params = array();
         foreach ($this->parameters as $param => $val) {
             if ($param && '-' === $param[0]) {
-                $params[] = $param . ('' != $val ? '='.$this->escapeToken($val) : '');
+                $params[] = $param.('' != $val ? '='.$this->escapeToken($val) : '');
             } else {
                 $params[] = $this->escapeToken($val);
             }
diff --git a/vendor/symfony/console/Symfony/Component/Console/Input/Input.php b/vendor/symfony/console/Symfony/Component/Console/Input/Input.php
index 494dd42..5e7c140 100644
--- a/vendor/symfony/console/Symfony/Component/Console/Input/Input.php
+++ b/vendor/symfony/console/Symfony/Component/Console/Input/Input.php
@@ -81,7 +81,7 @@ abstract class Input implements InputInterface
     /**
      * Checks if the input is interactive.
      *
-     * @return bool    Returns true if the input is interactive
+     * @return bool Returns true if the input is interactive
      */
     public function isInteractive()
     {
@@ -91,7 +91,7 @@ abstract class Input implements InputInterface
     /**
      * Sets the input interactivity.
      *
-     * @param bool    $interactive If the input should be interactive
+     * @param bool $interactive If the input should be interactive
      */
     public function setInteractive($interactive)
     {
@@ -146,9 +146,9 @@ abstract class Input implements InputInterface
     /**
      * Returns true if an InputArgument object exists by name or position.
      *
-     * @param string|int     $name The InputArgument name or position
+     * @param string|int $name The InputArgument name or position
      *
-     * @return bool    true if the InputArgument object exists, false otherwise
+     * @return bool true if the InputArgument object exists, false otherwise
      */
     public function hasArgument($name)
     {
@@ -186,8 +186,8 @@ abstract class Input implements InputInterface
     /**
      * Sets an option value by name.
      *
-     * @param string         $name  The option name
-     * @param string|bool    $value The option value
+     * @param string      $name  The option name
+     * @param string|bool $value The option value
      *
      * @throws \InvalidArgumentException When option given doesn't exist
      */
@@ -205,7 +205,7 @@ abstract class Input implements InputInterface
      *
      * @param string $name The InputOption name
      *
-     * @return bool    true if the InputOption object exists, false otherwise
+     * @return bool true if the InputOption object exists, false otherwise
      */
     public function hasOption($name)
     {
@@ -213,7 +213,7 @@ abstract class Input implements InputInterface
     }
 
     /**
-     * Escapes a token through escapeshellarg if it contains unsafe chars
+     * Escapes a token through escapeshellarg if it contains unsafe chars.
      *
      * @param string $token
      *
diff --git a/vendor/symfony/console/Symfony/Component/Console/Input/InputArgument.php b/vendor/symfony/console/Symfony/Component/Console/Input/InputArgument.php
index bf9c99e..1167da9 100644
--- a/vendor/symfony/console/Symfony/Component/Console/Input/InputArgument.php
+++ b/vendor/symfony/console/Symfony/Component/Console/Input/InputArgument.php
@@ -32,10 +32,10 @@ class InputArgument
     /**
      * Constructor.
      *
-     * @param string  $name        The argument name
-     * @param int     $mode        The argument mode: self::REQUIRED or self::OPTIONAL
-     * @param string  $description A description text
-     * @param mixed   $default     The default value (for self::OPTIONAL mode only)
+     * @param string $name        The argument name
+     * @param int    $mode        The argument mode: self::REQUIRED or self::OPTIONAL
+     * @param string $description A description text
+     * @param mixed  $default     The default value (for self::OPTIONAL mode only)
      *
      * @throws \InvalidArgumentException When argument mode is not valid
      *
@@ -49,8 +49,8 @@ class InputArgument
             throw new \InvalidArgumentException(sprintf('Argument mode "%s" is not valid.', $mode));
         }
 
-        $this->name        = $name;
-        $this->mode        = $mode;
+        $this->name = $name;
+        $this->mode = $mode;
         $this->description = $description;
 
         $this->setDefault($default);
@@ -69,7 +69,7 @@ class InputArgument
     /**
      * Returns true if the argument is required.
      *
-     * @return bool    true if parameter mode is self::REQUIRED, false otherwise
+     * @return bool true if parameter mode is self::REQUIRED, false otherwise
      */
     public function isRequired()
     {
@@ -79,7 +79,7 @@ class InputArgument
     /**
      * Returns true if the argument can take multiple values.
      *
-     * @return bool    true if mode is self::IS_ARRAY, false otherwise
+     * @return bool true if mode is self::IS_ARRAY, false otherwise
      */
     public function isArray()
     {
diff --git a/vendor/symfony/console/Symfony/Component/Console/Input/InputDefinition.php b/vendor/symfony/console/Symfony/Component/Console/Input/InputDefinition.php
index 46579a2..48edb16 100644
--- a/vendor/symfony/console/Symfony/Component/Console/Input/InputDefinition.php
+++ b/vendor/symfony/console/Symfony/Component/Console/Input/InputDefinition.php
@@ -11,11 +11,6 @@
 
 namespace Symfony\Component\Console\Input;
 
-if (!defined('JSON_UNESCAPED_UNICODE')) {
-    define('JSON_UNESCAPED_SLASHES', 64);
-    define('JSON_UNESCAPED_UNICODE', 256);
-}
-
 use Symfony\Component\Console\Descriptor\TextDescriptor;
 use Symfony\Component\Console\Descriptor\XmlDescriptor;
 use Symfony\Component\Console\Output\BufferedOutput;
@@ -87,9 +82,9 @@ class InputDefinition
      */
     public function setArguments($arguments = array())
     {
-        $this->arguments          = array();
-        $this->requiredCount      = 0;
-        $this->hasOptional        = false;
+        $this->arguments = array();
+        $this->requiredCount = 0;
+        $this->hasOptional = false;
         $this->hasAnArrayArgument = false;
         $this->addArguments($arguments);
     }
@@ -149,7 +144,7 @@ class InputDefinition
     /**
      * Returns an InputArgument by name or by position.
      *
-     * @param string|int     $name The InputArgument name or position
+     * @param string|int $name The InputArgument name or position
      *
      * @return InputArgument An InputArgument object
      *
@@ -171,9 +166,9 @@ class InputDefinition
     /**
      * Returns true if an InputArgument object exists by name or position.
      *
-     * @param string|int     $name The InputArgument name or position
+     * @param string|int $name The InputArgument name or position
      *
-     * @return bool    true if the InputArgument object exists, false otherwise
+     * @return bool true if the InputArgument object exists, false otherwise
      *
      * @api
      */
@@ -199,7 +194,7 @@ class InputDefinition
     /**
      * Returns the number of InputArguments.
      *
-     * @return int     The number of InputArguments
+     * @return int The number of InputArguments
      */
     public function getArgumentCount()
     {
@@ -209,7 +204,7 @@ class InputDefinition
     /**
      * Returns the number of required InputArguments.
      *
-     * @return int     The number of required InputArguments
+     * @return int The number of required InputArguments
      */
     public function getArgumentRequiredCount()
     {
@@ -315,7 +310,7 @@ class InputDefinition
      *
      * @param string $name The InputOption name
      *
-     * @return bool    true if the InputOption object exists, false otherwise
+     * @return bool true if the InputOption object exists, false otherwise
      *
      * @api
      */
@@ -341,7 +336,7 @@ class InputDefinition
      *
      * @param string $name The InputOption shortcut
      *
-     * @return bool    true if the InputOption object exists, false otherwise
+     * @return bool true if the InputOption object exists, false otherwise
      */
     public function hasShortcut($name)
     {
@@ -436,7 +431,7 @@ class InputDefinition
     /**
      * Returns an XML representation of the InputDefinition.
      *
-     * @param bool    $asDom Whether to return a DOM or an XML string
+     * @param bool $asDom Whether to return a DOM or an XML string
      *
      * @return string|\DOMDocument An XML string representing the InputDefinition
      *
diff --git a/vendor/symfony/console/Symfony/Component/Console/Input/InputInterface.php b/vendor/symfony/console/Symfony/Component/Console/Input/InputInterface.php
index befa272..6ef2f26 100644
--- a/vendor/symfony/console/Symfony/Component/Console/Input/InputInterface.php
+++ b/vendor/symfony/console/Symfony/Component/Console/Input/InputInterface.php
@@ -33,7 +33,7 @@ interface InputInterface
      *
      * @param string|array $values The values to look for in the raw parameters (can be an array)
      *
-     * @return bool    true if the value is contained in the raw parameters
+     * @return bool true if the value is contained in the raw parameters
      */
     public function hasParameterOption($values);
 
@@ -95,9 +95,9 @@ interface InputInterface
     /**
      * Returns true if an InputArgument object exists by name or position.
      *
-     * @param string|int     $name The InputArgument name or position
+     * @param string|int $name The InputArgument name or position
      *
-     * @return bool    true if the InputArgument object exists, false otherwise
+     * @return bool true if the InputArgument object exists, false otherwise
      */
     public function hasArgument($name);
 
@@ -120,8 +120,8 @@ interface InputInterface
     /**
      * Sets an option value by name.
      *
-     * @param string         $name  The option name
-     * @param string|bool    $value The option value
+     * @param string      $name  The option name
+     * @param string|bool $value The option value
      *
      * @throws \InvalidArgumentException When option given doesn't exist
      */
@@ -132,7 +132,7 @@ interface InputInterface
      *
      * @param string $name The InputOption name
      *
-     * @return bool    true if the InputOption object exists, false otherwise
+     * @return bool true if the InputOption object exists, false otherwise
      */
     public function hasOption($name);
 
@@ -146,7 +146,7 @@ interface InputInterface
     /**
      * Sets the input interactivity.
      *
-     * @param bool    $interactive If the input should be interactive
+     * @param bool $interactive If the input should be interactive
      */
     public function setInteractive($interactive);
 }
diff --git a/vendor/symfony/console/Symfony/Component/Console/Input/InputOption.php b/vendor/symfony/console/Symfony/Component/Console/Input/InputOption.php
index 18d05e9..3a48ca3 100644
--- a/vendor/symfony/console/Symfony/Component/Console/Input/InputOption.php
+++ b/vendor/symfony/console/Symfony/Component/Console/Input/InputOption.php
@@ -20,7 +20,7 @@ namespace Symfony\Component\Console\Input;
  */
 class InputOption
 {
-    const VALUE_NONE     = 1;
+    const VALUE_NONE = 1;
     const VALUE_REQUIRED = 2;
     const VALUE_OPTIONAL = 4;
     const VALUE_IS_ARRAY = 8;
@@ -77,9 +77,9 @@ class InputOption
             throw new \InvalidArgumentException(sprintf('Option mode "%s" is not valid.', $mode));
         }
 
-        $this->name        = $name;
-        $this->shortcut    = $shortcut;
-        $this->mode        = $mode;
+        $this->name = $name;
+        $this->shortcut = $shortcut;
+        $this->mode = $mode;
         $this->description = $description;
 
         if ($this->isArray() && !$this->acceptValue()) {
@@ -112,7 +112,7 @@ class InputOption
     /**
      * Returns true if the option accepts a value.
      *
-     * @return bool    true if value mode is not self::VALUE_NONE, false otherwise
+     * @return bool true if value mode is not self::VALUE_NONE, false otherwise
      */
     public function acceptValue()
     {
@@ -122,7 +122,7 @@ class InputOption
     /**
      * Returns true if the option requires a value.
      *
-     * @return bool    true if value mode is self::VALUE_REQUIRED, false otherwise
+     * @return bool true if value mode is self::VALUE_REQUIRED, false otherwise
      */
     public function isValueRequired()
     {
@@ -132,7 +132,7 @@ class InputOption
     /**
      * Returns true if the option takes an optional value.
      *
-     * @return bool    true if value mode is self::VALUE_OPTIONAL, false otherwise
+     * @return bool true if value mode is self::VALUE_OPTIONAL, false otherwise
      */
     public function isValueOptional()
     {
@@ -142,7 +142,7 @@ class InputOption
     /**
      * Returns true if the option can take multiple values.
      *
-     * @return bool    true if mode is self::VALUE_IS_ARRAY, false otherwise
+     * @return bool true if mode is self::VALUE_IS_ARRAY, false otherwise
      */
     public function isArray()
     {
@@ -194,9 +194,10 @@ class InputOption
     }
 
     /**
-     * Checks whether the given option equals this one
+     * Checks whether the given option equals this one.
      *
      * @param InputOption $option option to compare
+     *
      * @return bool
      */
     public function equals(InputOption $option)
diff --git a/vendor/symfony/console/Symfony/Component/Console/LICENSE b/vendor/symfony/console/Symfony/Component/Console/LICENSE
index 0b3292c..43028bc 100644
--- a/vendor/symfony/console/Symfony/Component/Console/LICENSE
+++ b/vendor/symfony/console/Symfony/Component/Console/LICENSE
@@ -1,4 +1,4 @@
-Copyright (c) 2004-2014 Fabien Potencier
+Copyright (c) 2004-2015 Fabien Potencier
 
 Permission is hereby granted, free of charge, to any person obtaining a copy
 of this software and associated documentation files (the "Software"), to deal
diff --git a/vendor/symfony/console/Symfony/Component/Console/Logger/ConsoleLogger.php b/vendor/symfony/console/Symfony/Component/Console/Logger/ConsoleLogger.php
index dbd2e8b..cf5d49c 100644
--- a/vendor/symfony/console/Symfony/Component/Console/Logger/ConsoleLogger.php
+++ b/vendor/symfony/console/Symfony/Component/Console/Logger/ConsoleLogger.php
@@ -43,7 +43,7 @@ class ConsoleLogger extends AbstractLogger
         LogLevel::WARNING => OutputInterface::VERBOSITY_NORMAL,
         LogLevel::NOTICE => OutputInterface::VERBOSITY_VERBOSE,
         LogLevel::INFO => OutputInterface::VERBOSITY_VERY_VERBOSE,
-        LogLevel::DEBUG => OutputInterface::VERBOSITY_DEBUG
+        LogLevel::DEBUG => OutputInterface::VERBOSITY_DEBUG,
     );
     /**
      * @var array
@@ -56,7 +56,7 @@ class ConsoleLogger extends AbstractLogger
         LogLevel::WARNING => self::INFO,
         LogLevel::NOTICE => self::INFO,
         LogLevel::INFO => self::INFO,
-        LogLevel::DEBUG => self::INFO
+        LogLevel::DEBUG => self::INFO,
     );
 
     /**
@@ -96,8 +96,10 @@ class ConsoleLogger extends AbstractLogger
      * Interpolates context values into the message placeholders
      *
      * @author PHP Framework Interoperability Group
-     * @param  string $message
-     * @param  array  $context
+     *
+     * @param string $message
+     * @param array  $context
+     *
      * @return string
      */
     private function interpolate($message, array $context)
diff --git a/vendor/symfony/console/Symfony/Component/Console/Output/NullOutput.php b/vendor/symfony/console/Symfony/Component/Console/Output/NullOutput.php
index afcb631..557f8af 100644
--- a/vendor/symfony/console/Symfony/Component/Console/Output/NullOutput.php
+++ b/vendor/symfony/console/Symfony/Component/Console/Output/NullOutput.php
@@ -74,7 +74,7 @@ class NullOutput implements OutputInterface
     {
         return self::VERBOSITY_QUIET;
     }
-    
+
     public function isQuiet()
     {
         return true;
diff --git a/vendor/symfony/console/Symfony/Component/Console/Output/Output.php b/vendor/symfony/console/Symfony/Component/Console/Output/Output.php
index 22c81cd..cb0e40d 100644
--- a/vendor/symfony/console/Symfony/Component/Console/Output/Output.php
+++ b/vendor/symfony/console/Symfony/Component/Console/Output/Output.php
@@ -158,8 +158,8 @@ abstract class Output implements OutputInterface
     /**
      * Writes a message to the output.
      *
-     * @param string  $message A message to write to the output
-     * @param bool    $newline Whether to add a newline or not
+     * @param string $message A message to write to the output
+     * @param bool   $newline Whether to add a newline or not
      */
     abstract protected function doWrite($message, $newline);
 }
diff --git a/vendor/symfony/console/Symfony/Component/Console/Output/OutputInterface.php b/vendor/symfony/console/Symfony/Component/Console/Output/OutputInterface.php
index ad128c6..f7f3063 100644
--- a/vendor/symfony/console/Symfony/Component/Console/Output/OutputInterface.php
+++ b/vendor/symfony/console/Symfony/Component/Console/Output/OutputInterface.php
@@ -22,15 +22,15 @@ use Symfony\Component\Console\Formatter\OutputFormatterInterface;
  */
 interface OutputInterface
 {
-    const VERBOSITY_QUIET        = 0;
-    const VERBOSITY_NORMAL       = 1;
-    const VERBOSITY_VERBOSE      = 2;
+    const VERBOSITY_QUIET = 0;
+    const VERBOSITY_NORMAL = 1;
+    const VERBOSITY_VERBOSE = 2;
     const VERBOSITY_VERY_VERBOSE = 3;
-    const VERBOSITY_DEBUG        = 4;
+    const VERBOSITY_DEBUG = 4;
 
     const OUTPUT_NORMAL = 0;
-    const OUTPUT_RAW    = 1;
-    const OUTPUT_PLAIN  = 2;
+    const OUTPUT_RAW = 1;
+    const OUTPUT_PLAIN = 2;
 
     /**
      * Writes a message to the output.
@@ -60,7 +60,7 @@ interface OutputInterface
     /**
      * Sets the verbosity of the output.
      *
-     * @param int     $level The level of verbosity (one of the VERBOSITY constants)
+     * @param int $level The level of verbosity (one of the VERBOSITY constants)
      *
      * @api
      */
@@ -69,7 +69,7 @@ interface OutputInterface
     /**
      * Gets the current verbosity of the output.
      *
-     * @return int     The current level of verbosity (one of the VERBOSITY constants)
+     * @return int The current level of verbosity (one of the VERBOSITY constants)
      *
      * @api
      */
@@ -78,7 +78,7 @@ interface OutputInterface
     /**
      * Sets the decorated flag.
      *
-     * @param bool    $decorated Whether to decorate the messages
+     * @param bool $decorated Whether to decorate the messages
      *
      * @api
      */
@@ -87,7 +87,7 @@ interface OutputInterface
     /**
      * Gets the decorated flag.
      *
-     * @return bool    true if the output will decorate messages, false otherwise
+     * @return bool true if the output will decorate messages, false otherwise
      *
      * @api
      */
@@ -105,7 +105,7 @@ interface OutputInterface
     /**
      * Returns current output formatter instance.
      *
-     * @return  OutputFormatterInterface
+     * @return OutputFormatterInterface
      *
      * @api
      */
diff --git a/vendor/symfony/console/Symfony/Component/Console/Output/StreamOutput.php b/vendor/symfony/console/Symfony/Component/Console/Output/StreamOutput.php
index 23d49d2..8de10b4 100644
--- a/vendor/symfony/console/Symfony/Component/Console/Output/StreamOutput.php
+++ b/vendor/symfony/console/Symfony/Component/Console/Output/StreamOutput.php
@@ -90,7 +90,7 @@ class StreamOutput extends Output
      *  -  Windows without Ansicon and ConEmu
      *  -  non tty consoles
      *
-     * @return bool    true if the stream supports colorization, false otherwise
+     * @return bool true if the stream supports colorization, false otherwise
      */
     protected function hasColorSupport()
     {
diff --git a/vendor/symfony/console/Symfony/Component/Console/Question/ChoiceQuestion.php b/vendor/symfony/console/Symfony/Component/Console/Question/ChoiceQuestion.php
index 59808e1..e1da7a8 100644
--- a/vendor/symfony/console/Symfony/Component/Console/Question/ChoiceQuestion.php
+++ b/vendor/symfony/console/Symfony/Component/Console/Question/ChoiceQuestion.php
@@ -23,6 +23,13 @@ class ChoiceQuestion extends Question
     private $prompt = ' > ';
     private $errorMessage = 'Value "%s" is invalid';
 
+    /**
+     * Constructor.
+     *
+     * @param string $question The question to ask to the user
+     * @param array  $choices  The list of available choices
+     * @param mixed  $default  The default answer to return
+     */
     public function __construct($question, array $choices, $default = null)
     {
         parent::__construct($question, $default);
@@ -47,7 +54,7 @@ class ChoiceQuestion extends Question
      *
      * When multiselect is set to true, multiple choices can be answered.
      *
-     * @param bool    $multiselect
+     * @param bool $multiselect
      *
      * @return ChoiceQuestion The current instance
      */
@@ -100,6 +107,11 @@ class ChoiceQuestion extends Question
         return $this;
     }
 
+    /**
+     * Returns the default answer validator.
+     *
+     * @return callable
+     */
     private function getDefaultValidator()
     {
         $choices = $this->choices;
diff --git a/vendor/symfony/console/Symfony/Component/Console/Question/ConfirmationQuestion.php b/vendor/symfony/console/Symfony/Component/Console/Question/ConfirmationQuestion.php
index 0438640..09ac74f 100644
--- a/vendor/symfony/console/Symfony/Component/Console/Question/ConfirmationQuestion.php
+++ b/vendor/symfony/console/Symfony/Component/Console/Question/ConfirmationQuestion.php
@@ -18,6 +18,12 @@ namespace Symfony\Component\Console\Question;
  */
 class ConfirmationQuestion extends Question
 {
+    /**
+     * Constructor.
+     *
+     * @param string $question The question to ask to the user
+     * @param bool   $default  The default answer to return, true or false
+     */
     public function __construct($question, $default = true)
     {
         parent::__construct($question, (bool) $default);
@@ -25,6 +31,11 @@ class ConfirmationQuestion extends Question
         $this->setNormalizer($this->getDefaultNormalizer());
     }
 
+    /**
+     * Returns the default answer normalizer.
+     *
+     * @return callable
+     */
     private function getDefaultNormalizer()
     {
         $default = $this->getDefault();
diff --git a/vendor/symfony/console/Symfony/Component/Console/Question/Question.php b/vendor/symfony/console/Symfony/Component/Console/Question/Question.php
index 3003f19..9f776d5 100644
--- a/vendor/symfony/console/Symfony/Component/Console/Question/Question.php
+++ b/vendor/symfony/console/Symfony/Component/Console/Question/Question.php
@@ -72,7 +72,7 @@ class Question
     /**
      * Sets whether the user response must be hidden or not.
      *
-     * @param bool    $hidden
+     * @param bool $hidden
      *
      * @return Question The current instance
      *
@@ -102,7 +102,7 @@ class Question
     /**
      * Sets whether to fallback on non-hidden question if the response can not be hidden.
      *
-     * @param bool    $fallback
+     * @param bool $fallback
      *
      * @return Question The current instance
      */
@@ -116,7 +116,7 @@ class Question
     /**
      * Gets values for the autocompleter.
      *
-     * @return null|array|Traversable
+     * @return null|array|\Traversable
      */
     public function getAutocompleterValues()
     {
@@ -126,7 +126,7 @@ class Question
     /**
      * Sets values for the autocompleter.
      *
-     * @param null|array|Traversable $values
+     * @param null|array|\Traversable $values
      *
      * @return Question The current instance
      *
@@ -165,7 +165,7 @@ class Question
     }
 
     /**
-     * Gets the validator for the question
+     * Gets the validator for the question.
      *
      * @return null|callable
      */
@@ -179,7 +179,7 @@ class Question
      *
      * Null means an unlimited number of attempts.
      *
-     * @param null|int     $attempts
+     * @param null|int $attempts
      *
      * @return Question The current instance
      *
@@ -211,9 +211,9 @@ class Question
     /**
      * Sets a normalizer for the response.
      *
-     * The normalizer can ba a callable (a string), a closure or a class implementing __invoke.
+     * The normalizer can be a callable (a string), a closure or a class implementing __invoke.
      *
-     * @param string|Closure $normalizer
+     * @param string|\Closure $normalizer
      *
      * @return Question The current instance
      */
@@ -229,7 +229,7 @@ class Question
      *
      * The normalizer can ba a callable (a string), a closure or a class implementing __invoke.
      *
-     * @return string|Closure
+     * @return string|\Closure
      */
     public function getNormalizer()
     {
diff --git a/vendor/symfony/console/Symfony/Component/Console/README.md b/vendor/symfony/console/Symfony/Component/Console/README.md
index bfc7044..00722e6 100644
--- a/vendor/symfony/console/Symfony/Component/Console/README.md
+++ b/vendor/symfony/console/Symfony/Component/Console/README.md
@@ -5,10 +5,12 @@ Console eases the creation of beautiful and testable command line interfaces.
 
 The Application object manages the CLI application:
 
-    use Symfony\Component\Console\Application;
+```php
+use Symfony\Component\Console\Application;
 
-    $console = new Application();
-    $console->run();
+$console = new Application();
+$console->run();
+```
 
 The ``run()`` method parses the arguments and options passed on the command
 line and executes the right command.
@@ -16,23 +18,25 @@ line and executes the right command.
 Registering a new command can easily be done via the ``register()`` method,
 which returns a ``Command`` instance:
 
-    use Symfony\Component\Console\Input\InputInterface;
-    use Symfony\Component\Console\Input\InputArgument;
-    use Symfony\Component\Console\Input\InputOption;
-    use Symfony\Component\Console\Output\OutputInterface;
-
-    $console
-        ->register('ls')
-        ->setDefinition(array(
-            new InputArgument('dir', InputArgument::REQUIRED, 'Directory name'),
-        ))
-        ->setDescription('Displays the files in the given directory')
-        ->setCode(function (InputInterface $input, OutputInterface $output) {
-            $dir = $input->getArgument('dir');
-
-            $output->writeln(sprintf('Dir listing for <info>%s</info>', $dir));
-        })
-    ;
+```php
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Input\InputArgument;
+use Symfony\Component\Console\Input\InputOption;
+use Symfony\Component\Console\Output\OutputInterface;
+
+$console
+    ->register('ls')
+    ->setDefinition(array(
+        new InputArgument('dir', InputArgument::REQUIRED, 'Directory name'),
+    ))
+    ->setDescription('Displays the files in the given directory')
+    ->setCode(function (InputInterface $input, OutputInterface $output) {
+        $dir = $input->getArgument('dir');
+
+        $output->writeln(sprintf('Dir listing for <info>%s</info>', $dir));
+    })
+;
+```
 
 You can also register new commands via classes.
 
diff --git a/vendor/symfony/console/Symfony/Component/Console/Shell.php b/vendor/symfony/console/Symfony/Component/Console/Shell.php
index 75a1174..4167746 100644
--- a/vendor/symfony/console/Symfony/Component/Console/Shell.php
+++ b/vendor/symfony/console/Symfony/Component/Console/Shell.php
@@ -163,7 +163,7 @@ EOF;
      *
      * @param string $text The last segment of the entered text
      *
-     * @return bool|array    A list of guessed strings or true
+     * @return bool|array A list of guessed strings or true
      */
     private function autocompleter($text)
     {
diff --git a/vendor/symfony/console/Symfony/Component/Console/Tester/ApplicationTester.php b/vendor/symfony/console/Symfony/Component/Console/Tester/ApplicationTester.php
index 1630a97..da8a19c 100644
--- a/vendor/symfony/console/Symfony/Component/Console/Tester/ApplicationTester.php
+++ b/vendor/symfony/console/Symfony/Component/Console/Tester/ApplicationTester.php
@@ -56,7 +56,7 @@ class ApplicationTester
      * @param array $input   An array of arguments and options
      * @param array $options An array of options
      *
-     * @return int     The command exit code
+     * @return int The command exit code
      */
     public function run(array $input, $options = array())
     {
@@ -79,7 +79,7 @@ class ApplicationTester
     /**
      * Gets the display returned by the last execution of the application.
      *
-     * @param bool    $normalize Whether to normalize end of lines to \n or not
+     * @param bool $normalize Whether to normalize end of lines to \n or not
      *
      * @return string The display
      */
@@ -119,7 +119,7 @@ class ApplicationTester
     /**
      * Gets the status code returned by the last execution of the application.
      *
-     * @return int     The status code
+     * @return int The status code
      */
     public function getStatusCode()
     {
diff --git a/vendor/symfony/console/Symfony/Component/Console/Tester/CommandTester.php b/vendor/symfony/console/Symfony/Component/Console/Tester/CommandTester.php
index fe94d1e..a6d5359 100644
--- a/vendor/symfony/console/Symfony/Component/Console/Tester/CommandTester.php
+++ b/vendor/symfony/console/Symfony/Component/Console/Tester/CommandTester.php
@@ -42,16 +42,16 @@ class CommandTester
     /**
      * Executes the command.
      *
-     * Available options:
+     * Available execution options:
      *
      *  * interactive: Sets the input interactive flag
      *  * decorated:   Sets the output decorated flag
      *  * verbosity:   Sets the output verbosity flag
      *
-     * @param array $input   An array of arguments and options
-     * @param array $options An array of options
+     * @param array $input   An array of command arguments and options
+     * @param array $options An array of execution options
      *
-     * @return int     The command exit code
+     * @return int The command exit code
      */
     public function execute(array $input, array $options = array())
     {
@@ -83,7 +83,7 @@ class CommandTester
     /**
      * Gets the display returned by the last execution of the command.
      *
-     * @param bool    $normalize Whether to normalize end of lines to \n or not
+     * @param bool $normalize Whether to normalize end of lines to \n or not
      *
      * @return string The display
      */
@@ -123,7 +123,7 @@ class CommandTester
     /**
      * Gets the status code returned by the last execution of the application.
      *
-     * @return int     The status code
+     * @return int The status code
      */
     public function getStatusCode()
     {
diff --git a/vendor/symfony/console/Symfony/Component/Console/Tests/ApplicationTest.php b/vendor/symfony/console/Symfony/Component/Console/Tests/ApplicationTest.php
index 59f0de1..912295a 100644
--- a/vendor/symfony/console/Symfony/Component/Console/Tests/ApplicationTest.php
+++ b/vendor/symfony/console/Symfony/Component/Console/Tests/ApplicationTest.php
@@ -45,6 +45,8 @@ class ApplicationTest extends \PHPUnit_Framework_TestCase
         require_once self::$fixturesPath.'/Foo5Command.php';
         require_once self::$fixturesPath.'/FoobarCommand.php';
         require_once self::$fixturesPath.'/BarBucCommand.php';
+        require_once self::$fixturesPath.'/FooSubnamespaced1Command.php';
+        require_once self::$fixturesPath.'/FooSubnamespaced2Command.php';
     }
 
     protected function normalizeLineBreaks($text)
@@ -95,7 +97,7 @@ class ApplicationTest extends \PHPUnit_Framework_TestCase
     public function testHelp()
     {
         $application = new Application();
-        $this->assertStringEqualsFile(self::$fixturesPath.'/application_gethelp.txt', $this->normalizeLineBreaks($application->getHelp()), '->setHelp() returns a help message');
+        $this->assertStringEqualsFile(self::$fixturesPath.'/application_gethelp.txt', $this->normalizeLineBreaks($application->getHelp()), '->getHelp() returns a help message');
     }
 
     public function testAll()
@@ -201,6 +203,14 @@ class ApplicationTest extends \PHPUnit_Framework_TestCase
         $this->assertEquals('foo', $application->findNamespace('foo'), '->findNamespace() returns the given namespace if it exists');
     }
 
+    public function testFindNamespaceWithSubnamespaces()
+    {
+        $application = new Application();
+        $application->add(new \FooSubnamespaced1Command());
+        $application->add(new \FooSubnamespaced2Command());
+        $this->assertEquals('foo', $application->findNamespace('foo'), '->findNamespace() returns commands even if the commands are only contained in subnamespaces');
+    }
+
     /**
      * @expectedException        \InvalidArgumentException
      * @expectedExceptionMessage The namespace "f" is ambiguous (foo, foo1).
@@ -270,7 +280,7 @@ class ApplicationTest extends \PHPUnit_Framework_TestCase
         return array(
             array('f', 'Command "f" is not defined.'),
             array('a', 'Command "a" is ambiguous (afoobar, afoobar1 and 1 more).'),
-            array('foo:b', 'Command "foo:b" is ambiguous (foo:bar, foo:bar1 and 1 more).')
+            array('foo:b', 'Command "foo:b" is ambiguous (foo:bar, foo:bar1 and 1 more).'),
         );
     }
 
@@ -317,7 +327,7 @@ class ApplicationTest extends \PHPUnit_Framework_TestCase
     {
         return array(
             array('foo3:baR'),
-            array('foO3:bar')
+            array('foO3:bar'),
         );
     }
 
@@ -445,6 +455,18 @@ class ApplicationTest extends \PHPUnit_Framework_TestCase
         $this->assertEquals('foo:sublong', $application->findNamespace('f:sub'));
     }
 
+    /**
+     * @expectedException \InvalidArgumentException
+     * @expectedExceptionMessage Command "foo::bar" is not defined.
+     */
+    public function testFindWithDoubleColonInNameThrowsException()
+    {
+        $application = new Application();
+        $application->add(new \FooCommand());
+        $application->add(new \Foo4Command());
+        $application->find('foo::bar');
+    }
+
     public function testSetCatchExceptions()
     {
         $application = $this->getMock('Symfony\Component\Console\Application', array('getTerminalWidth'));
@@ -468,8 +490,10 @@ class ApplicationTest extends \PHPUnit_Framework_TestCase
         }
     }
 
-    public function testAsText()
+    public function testLegacyAsText()
     {
+        $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED);
+
         $application = new Application();
         $application->add(new \FooCommand());
         $this->ensureStaticCommandHelp($application);
@@ -477,8 +501,10 @@ class ApplicationTest extends \PHPUnit_Framework_TestCase
         $this->assertStringEqualsFile(self::$fixturesPath.'/application_astext2.txt', $this->normalizeLineBreaks($application->asText('foo')), '->asText() returns a text representation of the application');
     }
 
-    public function testAsXml()
+    public function testLegacyAsXml()
     {
+        $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED);
+
         $application = new Application();
         $application->add(new \FooCommand());
         $this->ensureStaticCommandHelp($application);
@@ -536,10 +562,10 @@ class ApplicationTest extends \PHPUnit_Framework_TestCase
         $tester = new ApplicationTester($application);
 
         $tester->run(array('command' => 'foo'), array('decorated' => false));
-        $this->assertStringEqualsFile(self::$fixturesPath.'/application_renderexception_doublewidth1.txt', $tester->getDisplay(true), '->renderException() renderes a pretty exceptions with previous exceptions');
+        $this->assertStringEqualsFile(self::$fixturesPath.'/application_renderexception_doublewidth1.txt', $tester->getDisplay(true), '->renderException() renders a pretty exceptions with previous exceptions');
 
         $tester->run(array('command' => 'foo'), array('decorated' => true));
-        $this->assertStringEqualsFile(self::$fixturesPath.'/application_renderexception_doublewidth1decorated.txt', $tester->getDisplay(true), '->renderException() renderes a pretty exceptions with previous exceptions');
+        $this->assertStringEqualsFile(self::$fixturesPath.'/application_renderexception_doublewidth1decorated.txt', $tester->getDisplay(true), '->renderException() renders a pretty exceptions with previous exceptions');
 
         $application = $this->getMock('Symfony\Component\Console\Application', array('getTerminalWidth'));
         $application->setAutoExit(false);
@@ -891,6 +917,22 @@ class ApplicationTest extends \PHPUnit_Framework_TestCase
         $this->assertContains('before.foo.after.caught.', $tester->getDisplay());
     }
 
+    public function testRunWithDispatcherSkippingCommand()
+    {
+        $application = new Application();
+        $application->setDispatcher($this->getDispatcher(true));
+        $application->setAutoExit(false);
+
+        $application->register('foo')->setCode(function (InputInterface $input, OutputInterface $output) {
+            $output->write('foo.');
+        });
+
+        $tester = new ApplicationTester($application);
+        $exitCode = $tester->run(array('command' => 'foo'));
+        $this->assertContains('before.after.', $tester->getDisplay());
+        $this->assertEquals(ConsoleCommandEvent::RETURN_CODE_DISABLED, $exitCode);
+    }
+
     public function testTerminalDimensions()
     {
         $application = new Application();
@@ -906,16 +948,22 @@ class ApplicationTest extends \PHPUnit_Framework_TestCase
         $this->assertSame(array($width, 80), $application->getTerminalDimensions());
     }
 
-    protected function getDispatcher()
+    protected function getDispatcher($skipCommand = false)
     {
         $dispatcher = new EventDispatcher();
-        $dispatcher->addListener('console.command', function (ConsoleCommandEvent $event) {
+        $dispatcher->addListener('console.command', function (ConsoleCommandEvent $event) use ($skipCommand) {
             $event->getOutput()->write('before.');
+
+            if ($skipCommand) {
+                $event->disableCommand();
+            }
         });
-        $dispatcher->addListener('console.terminate', function (ConsoleTerminateEvent $event) {
+        $dispatcher->addListener('console.terminate', function (ConsoleTerminateEvent $event) use ($skipCommand) {
             $event->getOutput()->write('after.');
 
-            $event->setExitCode(128);
+            if (!$skipCommand) {
+                $event->setExitCode(113);
+            }
         });
         $dispatcher->addListener('console.exception', function (ConsoleExceptionEvent $event) {
             $event->getOutput()->writeln('caught.');
@@ -947,6 +995,24 @@ class ApplicationTest extends \PHPUnit_Framework_TestCase
 
         $this->assertEquals('interact called'.PHP_EOL.'called'.PHP_EOL, $tester->getDisplay(), 'Application runs the default set command if different from \'list\' command');
     }
+
+    public function testCanCheckIfTerminalIsInteractive()
+    {
+        if (!function_exists('posix_isatty')) {
+            $this->markTestSkipped('posix_isatty function is required');
+        }
+
+        $application = new CustomDefaultCommandApplication();
+        $application->setAutoExit(false);
+
+        $tester = new ApplicationTester($application);
+        $tester->run(array('command' => 'help'));
+
+        $this->assertFalse($tester->getInput()->hasParameterOption(array('--no-interaction', '-n')));
+
+        $inputStream = $application->getHelperSet()->get('question')->getInputStream();
+        $this->assertEquals($tester->getInput()->isInteractive(), @posix_isatty($inputStream));
+    }
 }
 
 class CustomApplication extends Application
diff --git a/vendor/symfony/console/Symfony/Component/Console/Tests/Command/CommandTest.php b/vendor/symfony/console/Symfony/Component/Console/Tests/Command/CommandTest.php
index 872bb7f..36c14dd 100644
--- a/vendor/symfony/console/Symfony/Component/Console/Tests/Command/CommandTest.php
+++ b/vendor/symfony/console/Symfony/Component/Console/Tests/Command/CommandTest.php
@@ -41,7 +41,7 @@ class CommandTest extends \PHPUnit_Framework_TestCase
 
     /**
      * @expectedException        \LogicException
-     * @expectedExceptionMessage The command name cannot be empty.
+     * @expectedExceptionMessage The command defined in "Symfony\Component\Console\Command\Command" cannot have an empty name.
      */
     public function testCommandNameCannotBeEmpty()
     {
@@ -111,7 +111,7 @@ class CommandTest extends \PHPUnit_Framework_TestCase
     {
         return array(
             array(''),
-            array('foo:')
+            array('foo:'),
         );
     }
 
@@ -211,7 +211,7 @@ class CommandTest extends \PHPUnit_Framework_TestCase
         $m = $r->getMethod('mergeApplicationDefinition');
         $m->setAccessible(true);
         $m->invoke($command, false);
-        $this->assertTrue($command->getDefinition()->hasOption('bar'), '->mergeApplicationDefinition(false) merges the application and the commmand options');
+        $this->assertTrue($command->getDefinition()->hasOption('bar'), '->mergeApplicationDefinition(false) merges the application and the command options');
         $this->assertFalse($command->getDefinition()->hasArgument('foo'), '->mergeApplicationDefinition(false) does not merge the application arguments');
 
         $m->invoke($command, true);
@@ -243,7 +243,7 @@ class CommandTest extends \PHPUnit_Framework_TestCase
      * @expectedException        \LogicException
      * @expectedExceptionMessage You must override the execute() method in the concrete command class.
      */
-    public function testExecuteMethodNeedsToBeOverriden()
+    public function testExecuteMethodNeedsToBeOverridden()
     {
         $command = new Command('foo');
         $command->run(new StringInput(''), new NullOutput());
@@ -318,8 +318,10 @@ class CommandTest extends \PHPUnit_Framework_TestCase
         $output->writeln('from the code...');
     }
 
-    public function testAsText()
+    public function testLegacyAsText()
     {
+        $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED);
+
         $command = new \TestCommand();
         $command->setApplication(new Application());
         $tester = new CommandTester($command);
@@ -327,8 +329,10 @@ class CommandTest extends \PHPUnit_Framework_TestCase
         $this->assertStringEqualsFile(self::$fixturesPath.'/command_astext.txt', $command->asText(), '->asText() returns a text representation of the command');
     }
 
-    public function testAsXml()
+    public function testLegacyAsXml()
     {
+        $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED);
+
         $command = new \TestCommand();
         $command->setApplication(new Application());
         $tester = new CommandTester($command);
diff --git a/vendor/symfony/console/Symfony/Component/Console/Tests/Command/ListCommandTest.php b/vendor/symfony/console/Symfony/Component/Console/Tests/Command/ListCommandTest.php
index ca50874..fbb9fee 100644
--- a/vendor/symfony/console/Symfony/Component/Console/Tests/Command/ListCommandTest.php
+++ b/vendor/symfony/console/Symfony/Component/Console/Tests/Command/ListCommandTest.php
@@ -49,7 +49,6 @@ EOF;
 
     public function testExecuteListsCommandsWithNamespaceArgument()
     {
-
         require_once realpath(__DIR__.'/../Fixtures/FooCommand.php');
         $application = new Application();
         $application->add(new \FooCommand());
diff --git a/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/FooSubnamespaced1Command.php b/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/FooSubnamespaced1Command.php
new file mode 100644
index 0000000..fc50c72
--- /dev/null
+++ b/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/FooSubnamespaced1Command.php
@@ -0,0 +1,26 @@
+<?php
+
+use Symfony\Component\Console\Command\Command;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Output\OutputInterface;
+
+class FooSubnamespaced1Command extends Command
+{
+    public $input;
+    public $output;
+
+    protected function configure()
+    {
+        $this
+            ->setName('foo:bar:baz')
+            ->setDescription('The foo:bar:baz command')
+            ->setAliases(array('foobarbaz'))
+        ;
+    }
+
+    protected function execute(InputInterface $input, OutputInterface $output)
+    {
+        $this->input = $input;
+        $this->output = $output;
+    }
+}
diff --git a/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/FooSubnamespaced2Command.php b/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/FooSubnamespaced2Command.php
new file mode 100644
index 0000000..1cf31ff
--- /dev/null
+++ b/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/FooSubnamespaced2Command.php
@@ -0,0 +1,26 @@
+<?php
+
+use Symfony\Component\Console\Command\Command;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Output\OutputInterface;
+
+class FooSubnamespaced2Command extends Command
+{
+    public $input;
+    public $output;
+
+    protected function configure()
+    {
+        $this
+            ->setName('foo:go:bret')
+            ->setDescription('The foo:bar:go command')
+            ->setAliases(array('foobargo'))
+        ;
+    }
+
+    protected function execute(InputInterface $input, OutputInterface $output)
+    {
+        $this->input = $input;
+        $this->output = $output;
+    }
+}
diff --git a/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/application_1.json b/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/application_1.json
index 09adbd4..7f8d92e 100644
--- a/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/application_1.json
+++ b/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/application_1.json
@@ -1 +1 @@
-{"commands":[{"name":"help","usage":"help [--xml] [--format=\"...\"] [--raw] [command_name]","description":"Displays help for a command","help":"The <info>help<\/info> command displays help for a given command:\n\n  <info>php app\/console help list<\/info>\n\nYou can also output the help in other formats by using the <comment>--format<\/comment> option:\n\n  <info>php app\/console help --format=xml list<\/info>\n\nTo display the list of available commands, please use the <info>list<\/info> command.","aliases":[],"definition":{"arguments":{"command_name":{"name":"command_name","is_required":false,"is_array":false,"description":"The command name","default":"help"}},"options":{"xml":{"name":"--xml","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"To output help as XML","default":false},"format":{"name":"--format","shortcut":"","accept_value":true,"is_value_required":true,"is_multiple":false,"description":"To output help in other formats","default":"txt"},"raw":{"name":"--raw","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"To output raw command help","default":false},"help":{"name":"--help","shortcut":"-h","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Display this help message.","default":false},"quiet":{"name":"--quiet","shortcut":"-q","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Do not output any message.","default":false},"verbose":{"name":"--verbose","shortcut":"-v|-vv|-vvv","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug","default":false},"version":{"name":"--version","shortcut":"-V","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Display this application version.","default":false},"ansi":{"name":"--ansi","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Force ANSI output.","default":false},"no-ansi":{"name":"--no-ansi","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Disable ANSI output.","default":false},"no-interaction":{"name":"--no-interaction","shortcut":"-n","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Do not ask any interactive question.","default":false}}}},{"name":"list","usage":"list [--xml] [--raw] [--format=\"...\"] [namespace]","description":"Lists commands","help":"The <info>list<\/info> command lists all commands:\n\n  <info>php app\/console list<\/info>\n\nYou can also display the commands for a specific namespace:\n\n  <info>php app\/console list test<\/info>\n\nYou can also output the information in other formats by using the <comment>--format<\/comment> option:\n\n  <info>php app\/console list --format=xml<\/info>\n\nIt's also possible to get raw list of commands (useful for embedding command runner):\n\n  <info>php app\/console list --raw<\/info>","aliases":[],"definition":{"arguments":{"namespace":{"name":"namespace","is_required":false,"is_array":false,"description":"The namespace name","default":null}},"options":{"xml":{"name":"--xml","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"To output list as XML","default":false},"raw":{"name":"--raw","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"To output raw command list","default":false},"format":{"name":"--format","shortcut":"","accept_value":true,"is_value_required":true,"is_multiple":false,"description":"To output list in other formats","default":"txt"}}}}],"namespaces":[{"id":"_global","commands":["help","list"]}]}
+{"commands":[{"name":"help","usage":"help [--xml] [--format=\"...\"] [--raw] [command_name]","description":"Displays help for a command","help":"The <info>help<\/info> command displays help for a given command:\n\n  <info>php app\/console help list<\/info>\n\nYou can also output the help in other formats by using the <comment>--format<\/comment> option:\n\n  <info>php app\/console help --format=xml list<\/info>\n\nTo display the list of available commands, please use the <info>list<\/info> command.","aliases":[],"definition":{"arguments":{"command_name":{"name":"command_name","is_required":false,"is_array":false,"description":"The command name","default":"help"}},"options":{"xml":{"name":"--xml","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"To output help as XML","default":false},"format":{"name":"--format","shortcut":"","accept_value":true,"is_value_required":true,"is_multiple":false,"description":"To output help in other formats","default":"txt"},"raw":{"name":"--raw","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"To output raw command help","default":false},"help":{"name":"--help","shortcut":"-h","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Display this help message","default":false},"quiet":{"name":"--quiet","shortcut":"-q","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Do not output any message","default":false},"verbose":{"name":"--verbose","shortcut":"-v|-vv|-vvv","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug","default":false},"version":{"name":"--version","shortcut":"-V","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Display this application version","default":false},"ansi":{"name":"--ansi","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Force ANSI output","default":false},"no-ansi":{"name":"--no-ansi","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Disable ANSI output","default":false},"no-interaction":{"name":"--no-interaction","shortcut":"-n","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Do not ask any interactive question","default":false}}}},{"name":"list","usage":"list [--xml] [--raw] [--format=\"...\"] [namespace]","description":"Lists commands","help":"The <info>list<\/info> command lists all commands:\n\n  <info>php app\/console list<\/info>\n\nYou can also display the commands for a specific namespace:\n\n  <info>php app\/console list test<\/info>\n\nYou can also output the information in other formats by using the <comment>--format<\/comment> option:\n\n  <info>php app\/console list --format=xml<\/info>\n\nIt's also possible to get raw list of commands (useful for embedding command runner):\n\n  <info>php app\/console list --raw<\/info>","aliases":[],"definition":{"arguments":{"namespace":{"name":"namespace","is_required":false,"is_array":false,"description":"The namespace name","default":null}},"options":{"xml":{"name":"--xml","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"To output list as XML","default":false},"raw":{"name":"--raw","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"To output raw command list","default":false},"format":{"name":"--format","shortcut":"","accept_value":true,"is_value_required":true,"is_multiple":false,"description":"To output list in other formats","default":"txt"}}}}],"namespaces":[{"id":"_global","commands":["help","list"]}]}
diff --git a/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/application_1.md b/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/application_1.md
index a789251..e380416 100644
--- a/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/application_1.md
+++ b/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/application_1.md
@@ -70,7 +70,7 @@ To display the list of available commands, please use the <info>list</info> comm
 * Accept value: no
 * Is value required: no
 * Is multiple: no
-* Description: Display this help message.
+* Description: Display this help message
 * Default: `false`
 
 **quiet:**
@@ -80,7 +80,7 @@ To display the list of available commands, please use the <info>list</info> comm
 * Accept value: no
 * Is value required: no
 * Is multiple: no
-* Description: Do not output any message.
+* Description: Do not output any message
 * Default: `false`
 
 **verbose:**
@@ -100,7 +100,7 @@ To display the list of available commands, please use the <info>list</info> comm
 * Accept value: no
 * Is value required: no
 * Is multiple: no
-* Description: Display this application version.
+* Description: Display this application version
 * Default: `false`
 
 **ansi:**
@@ -110,7 +110,7 @@ To display the list of available commands, please use the <info>list</info> comm
 * Accept value: no
 * Is value required: no
 * Is multiple: no
-* Description: Force ANSI output.
+* Description: Force ANSI output
 * Default: `false`
 
 **no-ansi:**
@@ -120,7 +120,7 @@ To display the list of available commands, please use the <info>list</info> comm
 * Accept value: no
 * Is value required: no
 * Is multiple: no
-* Description: Disable ANSI output.
+* Description: Disable ANSI output
 * Default: `false`
 
 **no-interaction:**
@@ -130,7 +130,7 @@ To display the list of available commands, please use the <info>list</info> comm
 * Accept value: no
 * Is value required: no
 * Is multiple: no
-* Description: Do not ask any interactive question.
+* Description: Do not ask any interactive question
 * Default: `false`
 
 list
diff --git a/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/application_1.txt b/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/application_1.txt
index 24ab4a0..dff9875 100644
--- a/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/application_1.txt
+++ b/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/application_1.txt
@@ -1,17 +1,17 @@
 <info>Console Tool</info>
 
 <comment>Usage:</comment>
-  [options] command [arguments]
+ [options] command [arguments]
 
 <comment>Options:</comment>
-  <info>--help</info>           <info>-h</info> Display this help message.
-  <info>--quiet</info>          <info>-q</info> Do not output any message.
-  <info>--verbose</info>        <info>-v|vv|vvv</info> Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
-  <info>--version</info>        <info>-V</info> Display this application version.
-  <info>--ansi</info>              Force ANSI output.
-  <info>--no-ansi</info>           Disable ANSI output.
-  <info>--no-interaction</info> <info>-n</info> Do not ask any interactive question.
+ <info>--help</info> (-h)           Display this help message
+ <info>--quiet</info> (-q)          Do not output any message
+ <info>--verbose</info> (-v|vv|vvv) Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
+ <info>--version</info> (-V)        Display this application version
+ <info>--ansi</info>                Force ANSI output
+ <info>--no-ansi</info>             Disable ANSI output
+ <info>--no-interaction</info> (-n) Do not ask any interactive question
 
 <comment>Available commands:</comment>
-  <info>help  </info> Displays help for a command
-  <info>list  </info> Lists commands
+ <info>help  </info> Displays help for a command
+ <info>list  </info> Lists commands
diff --git a/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/application_1.xml b/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/application_1.xml
index bfe5de0..1763108 100644
--- a/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/application_1.xml
+++ b/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/application_1.xml
@@ -36,25 +36,25 @@
           <description>To output raw command help</description>
         </option>
         <option name="--help" shortcut="-h" accept_value="0" is_value_required="0" is_multiple="0">
-          <description>Display this help message.</description>
+          <description>Display this help message</description>
         </option>
         <option name="--quiet" shortcut="-q" accept_value="0" is_value_required="0" is_multiple="0">
-          <description>Do not output any message.</description>
+          <description>Do not output any message</description>
         </option>
         <option name="--verbose" shortcut="-v" shortcuts="-v|-vv|-vvv" accept_value="0" is_value_required="0" is_multiple="0">
           <description>Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug</description>
         </option>
         <option name="--version" shortcut="-V" accept_value="0" is_value_required="0" is_multiple="0">
-          <description>Display this application version.</description>
+          <description>Display this application version</description>
         </option>
         <option name="--ansi" shortcut="" accept_value="0" is_value_required="0" is_multiple="0">
-          <description>Force ANSI output.</description>
+          <description>Force ANSI output</description>
         </option>
         <option name="--no-ansi" shortcut="" accept_value="0" is_value_required="0" is_multiple="0">
-          <description>Disable ANSI output.</description>
+          <description>Disable ANSI output</description>
         </option>
         <option name="--no-interaction" shortcut="-n" accept_value="0" is_value_required="0" is_multiple="0">
-          <description>Do not ask any interactive question.</description>
+          <description>Do not ask any interactive question</description>
         </option>
       </options>
     </command>
diff --git a/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/application_2.json b/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/application_2.json
index 27745c1..1655d47 100644
--- a/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/application_2.json
+++ b/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/application_2.json
@@ -1 +1 @@
-{"commands":[{"name":"help","usage":"help [--xml] [--format=\"...\"] [--raw] [command_name]","description":"Displays help for a command","help":"The <info>help<\/info> command displays help for a given command:\n\n  <info>php app\/console help list<\/info>\n\nYou can also output the help in other formats by using the <comment>--format<\/comment> option:\n\n  <info>php app\/console help --format=xml list<\/info>\n\nTo display the list of available commands, please use the <info>list<\/info> command.","aliases":[],"definition":{"arguments":{"command_name":{"name":"command_name","is_required":false,"is_array":false,"description":"The command name","default":"help"}},"options":{"xml":{"name":"--xml","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"To output help as XML","default":false},"format":{"name":"--format","shortcut":"","accept_value":true,"is_value_required":true,"is_multiple":false,"description":"To output help in other formats","default":"txt"},"raw":{"name":"--raw","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"To output raw command help","default":false},"help":{"name":"--help","shortcut":"-h","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Display this help message.","default":false},"quiet":{"name":"--quiet","shortcut":"-q","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Do not output any message.","default":false},"verbose":{"name":"--verbose","shortcut":"-v|-vv|-vvv","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug","default":false},"version":{"name":"--version","shortcut":"-V","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Display this application version.","default":false},"ansi":{"name":"--ansi","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Force ANSI output.","default":false},"no-ansi":{"name":"--no-ansi","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Disable ANSI output.","default":false},"no-interaction":{"name":"--no-interaction","shortcut":"-n","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Do not ask any interactive question.","default":false}}}},{"name":"list","usage":"list [--xml] [--raw] [--format=\"...\"] [namespace]","description":"Lists commands","help":"The <info>list<\/info> command lists all commands:\n\n  <info>php app\/console list<\/info>\n\nYou can also display the commands for a specific namespace:\n\n  <info>php app\/console list test<\/info>\n\nYou can also output the information in other formats by using the <comment>--format<\/comment> option:\n\n  <info>php app\/console list --format=xml<\/info>\n\nIt's also possible to get raw list of commands (useful for embedding command runner):\n\n  <info>php app\/console list --raw<\/info>","aliases":[],"definition":{"arguments":{"namespace":{"name":"namespace","is_required":false,"is_array":false,"description":"The namespace name","default":null}},"options":{"xml":{"name":"--xml","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"To output list as XML","default":false},"raw":{"name":"--raw","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"To output raw command list","default":false},"format":{"name":"--format","shortcut":"","accept_value":true,"is_value_required":true,"is_multiple":false,"description":"To output list in other formats","default":"txt"}}}},{"name":"descriptor:command1","usage":"descriptor:command1","description":"command 1 description","help":"command 1 help","aliases":["alias1","alias2"],"definition":{"arguments":[],"options":{"help":{"name":"--help","shortcut":"-h","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Display this help message.","default":false},"quiet":{"name":"--quiet","shortcut":"-q","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Do not output any message.","default":false},"verbose":{"name":"--verbose","shortcut":"-v|-vv|-vvv","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug","default":false},"version":{"name":"--version","shortcut":"-V","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Display this application version.","default":false},"ansi":{"name":"--ansi","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Force ANSI output.","default":false},"no-ansi":{"name":"--no-ansi","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Disable ANSI output.","default":false},"no-interaction":{"name":"--no-interaction","shortcut":"-n","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Do not ask any interactive question.","default":false}}}},{"name":"descriptor:command2","usage":"descriptor:command2 [-o|--option_name] argument_name","description":"command 2 description","help":"command 2 help","aliases":[],"definition":{"arguments":{"argument_name":{"name":"argument_name","is_required":true,"is_array":false,"description":"","default":null}},"options":{"option_name":{"name":"--option_name","shortcut":"-o","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"","default":false},"help":{"name":"--help","shortcut":"-h","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Display this help message.","default":false},"quiet":{"name":"--quiet","shortcut":"-q","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Do not output any message.","default":false},"verbose":{"name":"--verbose","shortcut":"-v|-vv|-vvv","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug","default":false},"version":{"name":"--version","shortcut":"-V","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Display this application version.","default":false},"ansi":{"name":"--ansi","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Force ANSI output.","default":false},"no-ansi":{"name":"--no-ansi","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Disable ANSI output.","default":false},"no-interaction":{"name":"--no-interaction","shortcut":"-n","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Do not ask any interactive question.","default":false}}}}],"namespaces":[{"id":"_global","commands":["alias1","alias2","help","list"]},{"id":"descriptor","commands":["descriptor:command1","descriptor:command2"]}]}
+{"commands":[{"name":"help","usage":"help [--xml] [--format=\"...\"] [--raw] [command_name]","description":"Displays help for a command","help":"The <info>help<\/info> command displays help for a given command:\n\n  <info>php app\/console help list<\/info>\n\nYou can also output the help in other formats by using the <comment>--format<\/comment> option:\n\n  <info>php app\/console help --format=xml list<\/info>\n\nTo display the list of available commands, please use the <info>list<\/info> command.","aliases":[],"definition":{"arguments":{"command_name":{"name":"command_name","is_required":false,"is_array":false,"description":"The command name","default":"help"}},"options":{"xml":{"name":"--xml","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"To output help as XML","default":false},"format":{"name":"--format","shortcut":"","accept_value":true,"is_value_required":true,"is_multiple":false,"description":"To output help in other formats","default":"txt"},"raw":{"name":"--raw","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"To output raw command help","default":false},"help":{"name":"--help","shortcut":"-h","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Display this help message","default":false},"quiet":{"name":"--quiet","shortcut":"-q","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Do not output any message","default":false},"verbose":{"name":"--verbose","shortcut":"-v|-vv|-vvv","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug","default":false},"version":{"name":"--version","shortcut":"-V","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Display this application version","default":false},"ansi":{"name":"--ansi","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Force ANSI output","default":false},"no-ansi":{"name":"--no-ansi","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Disable ANSI output","default":false},"no-interaction":{"name":"--no-interaction","shortcut":"-n","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Do not ask any interactive question","default":false}}}},{"name":"list","usage":"list [--xml] [--raw] [--format=\"...\"] [namespace]","description":"Lists commands","help":"The <info>list<\/info> command lists all commands:\n\n  <info>php app\/console list<\/info>\n\nYou can also display the commands for a specific namespace:\n\n  <info>php app\/console list test<\/info>\n\nYou can also output the information in other formats by using the <comment>--format<\/comment> option:\n\n  <info>php app\/console list --format=xml<\/info>\n\nIt's also possible to get raw list of commands (useful for embedding command runner):\n\n  <info>php app\/console list --raw<\/info>","aliases":[],"definition":{"arguments":{"namespace":{"name":"namespace","is_required":false,"is_array":false,"description":"The namespace name","default":null}},"options":{"xml":{"name":"--xml","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"To output list as XML","default":false},"raw":{"name":"--raw","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"To output raw command list","default":false},"format":{"name":"--format","shortcut":"","accept_value":true,"is_value_required":true,"is_multiple":false,"description":"To output list in other formats","default":"txt"}}}},{"name":"descriptor:command1","usage":"descriptor:command1","description":"command 1 description","help":"command 1 help","aliases":["alias1","alias2"],"definition":{"arguments":[],"options":{"help":{"name":"--help","shortcut":"-h","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Display this help message","default":false},"quiet":{"name":"--quiet","shortcut":"-q","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Do not output any message","default":false},"verbose":{"name":"--verbose","shortcut":"-v|-vv|-vvv","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug","default":false},"version":{"name":"--version","shortcut":"-V","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Display this application version","default":false},"ansi":{"name":"--ansi","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Force ANSI output","default":false},"no-ansi":{"name":"--no-ansi","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Disable ANSI output","default":false},"no-interaction":{"name":"--no-interaction","shortcut":"-n","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Do not ask any interactive question","default":false}}}},{"name":"descriptor:command2","usage":"descriptor:command2 [-o|--option_name] argument_name","description":"command 2 description","help":"command 2 help","aliases":[],"definition":{"arguments":{"argument_name":{"name":"argument_name","is_required":true,"is_array":false,"description":"","default":null}},"options":{"option_name":{"name":"--option_name","shortcut":"-o","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"","default":false},"help":{"name":"--help","shortcut":"-h","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Display this help message","default":false},"quiet":{"name":"--quiet","shortcut":"-q","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Do not output any message","default":false},"verbose":{"name":"--verbose","shortcut":"-v|-vv|-vvv","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug","default":false},"version":{"name":"--version","shortcut":"-V","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Display this application version","default":false},"ansi":{"name":"--ansi","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Force ANSI output","default":false},"no-ansi":{"name":"--no-ansi","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Disable ANSI output","default":false},"no-interaction":{"name":"--no-interaction","shortcut":"-n","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Do not ask any interactive question","default":false}}}}],"namespaces":[{"id":"_global","commands":["alias1","alias2","help","list"]},{"id":"descriptor","commands":["descriptor:command1","descriptor:command2"]}]}
diff --git a/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/application_2.md b/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/application_2.md
index e52ecd3..7492886 100644
--- a/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/application_2.md
+++ b/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/application_2.md
@@ -77,7 +77,7 @@ To display the list of available commands, please use the <info>list</info> comm
 * Accept value: no
 * Is value required: no
 * Is multiple: no
-* Description: Display this help message.
+* Description: Display this help message
 * Default: `false`
 
 **quiet:**
@@ -87,7 +87,7 @@ To display the list of available commands, please use the <info>list</info> comm
 * Accept value: no
 * Is value required: no
 * Is multiple: no
-* Description: Do not output any message.
+* Description: Do not output any message
 * Default: `false`
 
 **verbose:**
@@ -107,7 +107,7 @@ To display the list of available commands, please use the <info>list</info> comm
 * Accept value: no
 * Is value required: no
 * Is multiple: no
-* Description: Display this application version.
+* Description: Display this application version
 * Default: `false`
 
 **ansi:**
@@ -117,7 +117,7 @@ To display the list of available commands, please use the <info>list</info> comm
 * Accept value: no
 * Is value required: no
 * Is multiple: no
-* Description: Force ANSI output.
+* Description: Force ANSI output
 * Default: `false`
 
 **no-ansi:**
@@ -127,7 +127,7 @@ To display the list of available commands, please use the <info>list</info> comm
 * Accept value: no
 * Is value required: no
 * Is multiple: no
-* Description: Disable ANSI output.
+* Description: Disable ANSI output
 * Default: `false`
 
 **no-interaction:**
@@ -137,7 +137,7 @@ To display the list of available commands, please use the <info>list</info> comm
 * Accept value: no
 * Is value required: no
 * Is multiple: no
-* Description: Do not ask any interactive question.
+* Description: Do not ask any interactive question
 * Default: `false`
 
 list
@@ -223,7 +223,7 @@ command 1 help
 * Accept value: no
 * Is value required: no
 * Is multiple: no
-* Description: Display this help message.
+* Description: Display this help message
 * Default: `false`
 
 **quiet:**
@@ -233,7 +233,7 @@ command 1 help
 * Accept value: no
 * Is value required: no
 * Is multiple: no
-* Description: Do not output any message.
+* Description: Do not output any message
 * Default: `false`
 
 **verbose:**
@@ -253,7 +253,7 @@ command 1 help
 * Accept value: no
 * Is value required: no
 * Is multiple: no
-* Description: Display this application version.
+* Description: Display this application version
 * Default: `false`
 
 **ansi:**
@@ -263,7 +263,7 @@ command 1 help
 * Accept value: no
 * Is value required: no
 * Is multiple: no
-* Description: Force ANSI output.
+* Description: Force ANSI output
 * Default: `false`
 
 **no-ansi:**
@@ -273,7 +273,7 @@ command 1 help
 * Accept value: no
 * Is value required: no
 * Is multiple: no
-* Description: Disable ANSI output.
+* Description: Disable ANSI output
 * Default: `false`
 
 **no-interaction:**
@@ -283,7 +283,7 @@ command 1 help
 * Accept value: no
 * Is value required: no
 * Is multiple: no
-* Description: Do not ask any interactive question.
+* Description: Do not ask any interactive question
 * Default: `false`
 
 descriptor:command2
@@ -324,7 +324,7 @@ command 2 help
 * Accept value: no
 * Is value required: no
 * Is multiple: no
-* Description: Display this help message.
+* Description: Display this help message
 * Default: `false`
 
 **quiet:**
@@ -334,7 +334,7 @@ command 2 help
 * Accept value: no
 * Is value required: no
 * Is multiple: no
-* Description: Do not output any message.
+* Description: Do not output any message
 * Default: `false`
 
 **verbose:**
@@ -354,7 +354,7 @@ command 2 help
 * Accept value: no
 * Is value required: no
 * Is multiple: no
-* Description: Display this application version.
+* Description: Display this application version
 * Default: `false`
 
 **ansi:**
@@ -364,7 +364,7 @@ command 2 help
 * Accept value: no
 * Is value required: no
 * Is multiple: no
-* Description: Force ANSI output.
+* Description: Force ANSI output
 * Default: `false`
 
 **no-ansi:**
@@ -374,7 +374,7 @@ command 2 help
 * Accept value: no
 * Is value required: no
 * Is multiple: no
-* Description: Disable ANSI output.
+* Description: Disable ANSI output
 * Default: `false`
 
 **no-interaction:**
@@ -384,5 +384,5 @@ command 2 help
 * Accept value: no
 * Is value required: no
 * Is multiple: no
-* Description: Do not ask any interactive question.
+* Description: Do not ask any interactive question
 * Default: `false`
diff --git a/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/application_2.txt b/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/application_2.txt
index 78580d0..80619a7 100644
--- a/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/application_2.txt
+++ b/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/application_2.txt
@@ -1,22 +1,22 @@
 <info>My Symfony application</info> version <comment>v1.0</comment>
 
 <comment>Usage:</comment>
-  [options] command [arguments]
+ [options] command [arguments]
 
 <comment>Options:</comment>
-  <info>--help</info>           <info>-h</info> Display this help message.
-  <info>--quiet</info>          <info>-q</info> Do not output any message.
-  <info>--verbose</info>        <info>-v|vv|vvv</info> Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
-  <info>--version</info>        <info>-V</info> Display this application version.
-  <info>--ansi</info>              Force ANSI output.
-  <info>--no-ansi</info>           Disable ANSI output.
-  <info>--no-interaction</info> <info>-n</info> Do not ask any interactive question.
+ <info>--help</info> (-h)           Display this help message
+ <info>--quiet</info> (-q)          Do not output any message
+ <info>--verbose</info> (-v|vv|vvv) Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
+ <info>--version</info> (-V)        Display this application version
+ <info>--ansi</info>                Force ANSI output
+ <info>--no-ansi</info>             Disable ANSI output
+ <info>--no-interaction</info> (-n) Do not ask any interactive question
 
 <comment>Available commands:</comment>
-  <info>alias1               </info> command 1 description
-  <info>alias2               </info> command 1 description
-  <info>help                 </info> Displays help for a command
-  <info>list                 </info> Lists commands
+ <info>alias1               </info> command 1 description
+ <info>alias2               </info> command 1 description
+ <info>help                 </info> Displays help for a command
+ <info>list                 </info> Lists commands
 <comment>descriptor</comment>
-  <info>descriptor:command1  </info> command 1 description
-  <info>descriptor:command2  </info> command 2 description
+ <info>descriptor:command1  </info> command 1 description
+ <info>descriptor:command2  </info> command 2 description
diff --git a/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/application_2.xml b/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/application_2.xml
index 9fc3a21..a7d65b4 100644
--- a/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/application_2.xml
+++ b/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/application_2.xml
@@ -36,25 +36,25 @@
           <description>To output raw command help</description>
         </option>
         <option name="--help" shortcut="-h" accept_value="0" is_value_required="0" is_multiple="0">
-          <description>Display this help message.</description>
+          <description>Display this help message</description>
         </option>
         <option name="--quiet" shortcut="-q" accept_value="0" is_value_required="0" is_multiple="0">
-          <description>Do not output any message.</description>
+          <description>Do not output any message</description>
         </option>
         <option name="--verbose" shortcut="-v" shortcuts="-v|-vv|-vvv" accept_value="0" is_value_required="0" is_multiple="0">
           <description>Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug</description>
         </option>
         <option name="--version" shortcut="-V" accept_value="0" is_value_required="0" is_multiple="0">
-          <description>Display this application version.</description>
+          <description>Display this application version</description>
         </option>
         <option name="--ansi" shortcut="" accept_value="0" is_value_required="0" is_multiple="0">
-          <description>Force ANSI output.</description>
+          <description>Force ANSI output</description>
         </option>
         <option name="--no-ansi" shortcut="" accept_value="0" is_value_required="0" is_multiple="0">
-          <description>Disable ANSI output.</description>
+          <description>Disable ANSI output</description>
         </option>
         <option name="--no-interaction" shortcut="-n" accept_value="0" is_value_required="0" is_multiple="0">
-          <description>Do not ask any interactive question.</description>
+          <description>Do not ask any interactive question</description>
         </option>
       </options>
     </command>
@@ -109,25 +109,25 @@
       <arguments/>
       <options>
         <option name="--help" shortcut="-h" accept_value="0" is_value_required="0" is_multiple="0">
-          <description>Display this help message.</description>
+          <description>Display this help message</description>
         </option>
         <option name="--quiet" shortcut="-q" accept_value="0" is_value_required="0" is_multiple="0">
-          <description>Do not output any message.</description>
+          <description>Do not output any message</description>
         </option>
         <option name="--verbose" shortcut="-v" shortcuts="-v|-vv|-vvv" accept_value="0" is_value_required="0" is_multiple="0">
           <description>Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug</description>
         </option>
         <option name="--version" shortcut="-V" accept_value="0" is_value_required="0" is_multiple="0">
-          <description>Display this application version.</description>
+          <description>Display this application version</description>
         </option>
         <option name="--ansi" shortcut="" accept_value="0" is_value_required="0" is_multiple="0">
-          <description>Force ANSI output.</description>
+          <description>Force ANSI output</description>
         </option>
         <option name="--no-ansi" shortcut="" accept_value="0" is_value_required="0" is_multiple="0">
-          <description>Disable ANSI output.</description>
+          <description>Disable ANSI output</description>
         </option>
         <option name="--no-interaction" shortcut="-n" accept_value="0" is_value_required="0" is_multiple="0">
-          <description>Do not ask any interactive question.</description>
+          <description>Do not ask any interactive question</description>
         </option>
       </options>
     </command>
@@ -147,25 +147,25 @@
           <description></description>
         </option>
         <option name="--help" shortcut="-h" accept_value="0" is_value_required="0" is_multiple="0">
-          <description>Display this help message.</description>
+          <description>Display this help message</description>
         </option>
         <option name="--quiet" shortcut="-q" accept_value="0" is_value_required="0" is_multiple="0">
-          <description>Do not output any message.</description>
+          <description>Do not output any message</description>
         </option>
         <option name="--verbose" shortcut="-v" shortcuts="-v|-vv|-vvv" accept_value="0" is_value_required="0" is_multiple="0">
           <description>Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug</description>
         </option>
         <option name="--version" shortcut="-V" accept_value="0" is_value_required="0" is_multiple="0">
-          <description>Display this application version.</description>
+          <description>Display this application version</description>
         </option>
         <option name="--ansi" shortcut="" accept_value="0" is_value_required="0" is_multiple="0">
-          <description>Force ANSI output.</description>
+          <description>Force ANSI output</description>
         </option>
         <option name="--no-ansi" shortcut="" accept_value="0" is_value_required="0" is_multiple="0">
-          <description>Disable ANSI output.</description>
+          <description>Disable ANSI output</description>
         </option>
         <option name="--no-interaction" shortcut="-n" accept_value="0" is_value_required="0" is_multiple="0">
-          <description>Do not ask any interactive question.</description>
+          <description>Do not ask any interactive question</description>
         </option>
       </options>
     </command>
diff --git a/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/application_astext1.txt b/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/application_astext1.txt
index dca37e2..c87fde4 100644
--- a/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/application_astext1.txt
+++ b/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/application_astext1.txt
@@ -1,20 +1,20 @@
 <info>Console Tool</info>
 
 <comment>Usage:</comment>
-  [options] command [arguments]
+ [options] command [arguments]
 
 <comment>Options:</comment>
-  <info>--help</info>           <info>-h</info> Display this help message.
-  <info>--quiet</info>          <info>-q</info> Do not output any message.
-  <info>--verbose</info>        <info>-v|vv|vvv</info> Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
-  <info>--version</info>        <info>-V</info> Display this application version.
-  <info>--ansi</info>              Force ANSI output.
-  <info>--no-ansi</info>           Disable ANSI output.
-  <info>--no-interaction</info> <info>-n</info> Do not ask any interactive question.
+ <info>--help</info> (-h)           Display this help message
+ <info>--quiet</info> (-q)          Do not output any message
+ <info>--verbose</info> (-v|vv|vvv) Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
+ <info>--version</info> (-V)        Display this application version
+ <info>--ansi</info>                Force ANSI output
+ <info>--no-ansi</info>             Disable ANSI output
+ <info>--no-interaction</info> (-n) Do not ask any interactive question
 
 <comment>Available commands:</comment>
-  <info>afoobar  </info> The foo:bar command
-  <info>help     </info> Displays help for a command
-  <info>list     </info> Lists commands
+ <info>afoobar  </info> The foo:bar command
+ <info>help     </info> Displays help for a command
+ <info>list     </info> Lists commands
 <comment>foo</comment>
-  <info>foo:bar  </info> The foo:bar command
+ <info>foo:bar  </info> The foo:bar command
diff --git a/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/application_astext2.txt b/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/application_astext2.txt
index 827c406..130ac52 100644
--- a/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/application_astext2.txt
+++ b/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/application_astext2.txt
@@ -1,16 +1,16 @@
 <info>Console Tool</info>
 
 <comment>Usage:</comment>
-  [options] command [arguments]
+ [options] command [arguments]
 
 <comment>Options:</comment>
-  <info>--help</info>           <info>-h</info> Display this help message.
-  <info>--quiet</info>          <info>-q</info> Do not output any message.
-  <info>--verbose</info>        <info>-v|vv|vvv</info> Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
-  <info>--version</info>        <info>-V</info> Display this application version.
-  <info>--ansi</info>              Force ANSI output.
-  <info>--no-ansi</info>           Disable ANSI output.
-  <info>--no-interaction</info> <info>-n</info> Do not ask any interactive question.
+ <info>--help</info> (-h)           Display this help message
+ <info>--quiet</info> (-q)          Do not output any message
+ <info>--verbose</info> (-v|vv|vvv) Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
+ <info>--version</info> (-V)        Display this application version
+ <info>--ansi</info>                Force ANSI output
+ <info>--no-ansi</info>             Disable ANSI output
+ <info>--no-interaction</info> (-n) Do not ask any interactive question
 
 <comment>Available commands for the "foo" namespace:</comment>
-  <info>foo:bar  </info> The foo:bar command
+ <info>foo:bar  </info> The foo:bar command
diff --git a/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/application_asxml1.txt b/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/application_asxml1.txt
index 94a6863..d956781 100644
--- a/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/application_asxml1.txt
+++ b/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/application_asxml1.txt
@@ -36,25 +36,25 @@
       <description>To output raw command help</description>
     </option>
     <option name="--help" shortcut="-h" accept_value="0" is_value_required="0" is_multiple="0">
-      <description>Display this help message.</description>
+      <description>Display this help message</description>
     </option>
     <option name="--quiet" shortcut="-q" accept_value="0" is_value_required="0" is_multiple="0">
-      <description>Do not output any message.</description>
+      <description>Do not output any message</description>
     </option>
     <option name="--verbose" shortcut="-v" shortcuts="-v|-vv|-vvv" accept_value="0" is_value_required="0" is_multiple="0">
       <description>Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug</description>
     </option>
     <option name="--version" shortcut="-V" accept_value="0" is_value_required="0" is_multiple="0">
-      <description>Display this application version.</description>
+      <description>Display this application version</description>
     </option>
     <option name="--ansi" shortcut="" accept_value="0" is_value_required="0" is_multiple="0">
-      <description>Force ANSI output.</description>
+      <description>Force ANSI output</description>
     </option>
     <option name="--no-ansi" shortcut="" accept_value="0" is_value_required="0" is_multiple="0">
-      <description>Disable ANSI output.</description>
+      <description>Disable ANSI output</description>
     </option>
     <option name="--no-interaction" shortcut="-n" accept_value="0" is_value_required="0" is_multiple="0">
-      <description>Do not ask any interactive question.</description>
+      <description>Do not ask any interactive question</description>
     </option>
   </options>
 </command>
@@ -108,25 +108,25 @@
   <arguments/>
     <options>
       <option name="--help" shortcut="-h" accept_value="0" is_value_required="0" is_multiple="0">
-        <description>Display this help message.</description>
+        <description>Display this help message</description>
       </option>
       <option name="--quiet" shortcut="-q" accept_value="0" is_value_required="0" is_multiple="0">
-        <description>Do not output any message.</description>
+        <description>Do not output any message</description>
       </option>
       <option name="--verbose" shortcut="-v" shortcuts="-v|-vv|-vvv" accept_value="0" is_value_required="0" is_multiple="0">
         <description>Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug</description>
       </option>
       <option name="--version" shortcut="-V" accept_value="0" is_value_required="0" is_multiple="0">
-        <description>Display this application version.</description>
+        <description>Display this application version</description>
       </option>
       <option name="--ansi" shortcut="" accept_value="0" is_value_required="0" is_multiple="0">
-        <description>Force ANSI output.</description>
+        <description>Force ANSI output</description>
       </option>
       <option name="--no-ansi" shortcut="" accept_value="0" is_value_required="0" is_multiple="0">
-        <description>Disable ANSI output.</description>
+        <description>Disable ANSI output</description>
       </option>
       <option name="--no-interaction" shortcut="-n" accept_value="0" is_value_required="0" is_multiple="0">
-        <description>Do not ask any interactive question.</description>
+        <description>Do not ask any interactive question</description>
       </option>
     </options>
 </command>
diff --git a/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/application_asxml2.txt b/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/application_asxml2.txt
index 5d61d2a..0b30b20 100644
--- a/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/application_asxml2.txt
+++ b/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/application_asxml2.txt
@@ -11,25 +11,25 @@
   <arguments/>
     <options>
       <option name="--help" shortcut="-h" accept_value="0" is_value_required="0" is_multiple="0">
-        <description>Display this help message.</description>
+        <description>Display this help message</description>
       </option>
       <option name="--quiet" shortcut="-q" accept_value="0" is_value_required="0" is_multiple="0">
-        <description>Do not output any message.</description>
+        <description>Do not output any message</description>
       </option>
       <option name="--verbose" shortcut="-v" shortcuts="-v|-vv|-vvv" accept_value="0" is_value_required="0" is_multiple="0">
         <description>Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug</description>
       </option>
       <option name="--version" shortcut="-V" accept_value="0" is_value_required="0" is_multiple="0">
-        <description>Display this application version.</description>
+        <description>Display this application version</description>
       </option>
       <option name="--ansi" shortcut="" accept_value="0" is_value_required="0" is_multiple="0">
-        <description>Force ANSI output.</description>
+        <description>Force ANSI output</description>
       </option>
       <option name="--no-ansi" shortcut="" accept_value="0" is_value_required="0" is_multiple="0">
-        <description>Disable ANSI output.</description>
+        <description>Disable ANSI output</description>
       </option>
       <option name="--no-interaction" shortcut="-n" accept_value="0" is_value_required="0" is_multiple="0">
-        <description>Do not ask any interactive question.</description>
+        <description>Do not ask any interactive question</description>
       </option>
     </options>
 </command>
diff --git a/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/application_gethelp.txt b/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/application_gethelp.txt
index 79c36f9..0c16e3c 100644
--- a/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/application_gethelp.txt
+++ b/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/application_gethelp.txt
@@ -1,13 +1 @@
-<info>Console Tool</info>
-
-<comment>Usage:</comment>
-  [options] command [arguments]
-
-<comment>Options:</comment>
-  <info>--help</info>           <info>-h</info> Display this help message.
-  <info>--quiet</info>          <info>-q</info> Do not output any message.
-  <info>--verbose</info>        <info>-v|vv|vvv</info> Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
-  <info>--version</info>        <info>-V</info> Display this application version.
-  <info>--ansi</info>              Force ANSI output.
-  <info>--no-ansi</info>           Disable ANSI output.
-  <info>--no-interaction</info> <info>-n</info> Do not ask any interactive question.
\ No newline at end of file
+<info>Console Tool</info>
\ No newline at end of file
diff --git a/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/application_run1.txt b/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/application_run1.txt
index 5e9554f..0df294a 100644
--- a/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/application_run1.txt
+++ b/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/application_run1.txt
@@ -1,17 +1,17 @@
 Console Tool
 
 Usage:
-  [options] command [arguments]
+ [options] command [arguments]
 
 Options:
-  --help           -h Display this help message.
-  --quiet          -q Do not output any message.
-  --verbose        -v|vv|vvv Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
-  --version        -V Display this application version.
-  --ansi              Force ANSI output.
-  --no-ansi           Disable ANSI output.
-  --no-interaction -n Do not ask any interactive question.
+ --help (-h)           Display this help message
+ --quiet (-q)          Do not output any message
+ --verbose (-v|vv|vvv) Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
+ --version (-V)        Display this application version
+ --ansi                Force ANSI output
+ --no-ansi             Disable ANSI output
+ --no-interaction (-n) Do not ask any interactive question
 
 Available commands:
-  help   Displays help for a command
-  list   Lists commands
+ help   Displays help for a command
+ list   Lists commands
diff --git a/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/application_run2.txt b/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/application_run2.txt
index 33c2442..6963c0f 100644
--- a/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/application_run2.txt
+++ b/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/application_run2.txt
@@ -9,13 +9,13 @@ Options:
  --xml                 To output help as XML
  --format              To output help in other formats (default: "txt")
  --raw                 To output raw command help
- --help (-h)           Display this help message.
- --quiet (-q)          Do not output any message.
+ --help (-h)           Display this help message
+ --quiet (-q)          Do not output any message
  --verbose (-v|vv|vvv) Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
- --version (-V)        Display this application version.
- --ansi                Force ANSI output.
- --no-ansi             Disable ANSI output.
- --no-interaction (-n) Do not ask any interactive question.
+ --version (-V)        Display this application version
+ --ansi                Force ANSI output
+ --no-ansi             Disable ANSI output
+ --no-interaction (-n) Do not ask any interactive question
 
 Help:
  The help command displays help for a given command:
diff --git a/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/command_astext.txt b/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/command_astext.txt
index 8b6c74c..5d70351 100644
--- a/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/command_astext.txt
+++ b/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/command_astext.txt
@@ -6,13 +6,13 @@
  <info>command              </info> The command to execute
 
 <comment>Options:</comment>
- <info>--help</info> (-h)           Display this help message.
- <info>--quiet</info> (-q)          Do not output any message.
+ <info>--help</info> (-h)           Display this help message
+ <info>--quiet</info> (-q)          Do not output any message
  <info>--verbose</info> (-v|vv|vvv) Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
- <info>--version</info> (-V)        Display this application version.
- <info>--ansi</info>                Force ANSI output.
- <info>--no-ansi</info>             Disable ANSI output.
- <info>--no-interaction</info> (-n) Do not ask any interactive question.
+ <info>--version</info> (-V)        Display this application version
+ <info>--ansi</info>                Force ANSI output
+ <info>--no-ansi</info>             Disable ANSI output
+ <info>--no-interaction</info> (-n) Do not ask any interactive question
 
 <comment>Help:</comment>
  help
diff --git a/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/command_asxml.txt b/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/command_asxml.txt
index 4b0012d..57542fa 100644
--- a/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/command_asxml.txt
+++ b/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/command_asxml.txt
@@ -14,25 +14,25 @@
   </arguments>
   <options>
     <option name="--help" shortcut="-h" accept_value="0" is_value_required="0" is_multiple="0">
-      <description>Display this help message.</description>
+      <description>Display this help message</description>
     </option>
     <option name="--quiet" shortcut="-q" accept_value="0" is_value_required="0" is_multiple="0">
-      <description>Do not output any message.</description>
+      <description>Do not output any message</description>
     </option>
     <option name="--verbose" shortcut="-v" shortcuts="-v|-vv|-vvv" accept_value="0" is_value_required="0" is_multiple="0">
       <description>Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug</description>
     </option>
     <option name="--version" shortcut="-V" accept_value="0" is_value_required="0" is_multiple="0">
-      <description>Display this application version.</description>
+      <description>Display this application version</description>
     </option>
     <option name="--ansi" shortcut="" accept_value="0" is_value_required="0" is_multiple="0">
-      <description>Force ANSI output.</description>
+      <description>Force ANSI output</description>
     </option>
     <option name="--no-ansi" shortcut="" accept_value="0" is_value_required="0" is_multiple="0">
-      <description>Disable ANSI output.</description>
+      <description>Disable ANSI output</description>
     </option>
     <option name="--no-interaction" shortcut="-n" accept_value="0" is_value_required="0" is_multiple="0">
-      <description>Do not ask any interactive question.</description>
+      <description>Do not ask any interactive question</description>
     </option>
   </options>
 </command>
diff --git a/vendor/symfony/console/Symfony/Component/Console/Tests/Formatter/OutputFormatterTest.php b/vendor/symfony/console/Symfony/Component/Console/Tests/Formatter/OutputFormatterTest.php
index c36c08b..435d2d4 100644
--- a/vendor/symfony/console/Symfony/Component/Console/Tests/Formatter/OutputFormatterTest.php
+++ b/vendor/symfony/console/Symfony/Component/Console/Tests/Formatter/OutputFormatterTest.php
@@ -151,7 +151,7 @@ class OutputFormatterTest extends \PHPUnit_Framework_TestCase
     {
         $formatter = new OutputFormatter(true);
 
-        $this->assertEquals("\033[32msome \033[39m\033[32m<tag>\033[39m\033[32m styled \033[39m\033[32m<p>\033[39m\033[32msingle-char tag\033[39m\033[32m</p>\033[39m", $formatter->format('<info>some <tag> styled <p>single-char tag</p></info>'));
+        $this->assertEquals("\033[32msome \033[39m\033[32m<tag>\033[39m\033[32m \033[39m\033[32m<setting=value>\033[39m\033[32m styled \033[39m\033[32m<p>\033[39m\033[32msingle-char tag\033[39m\033[32m</p>\033[39m", $formatter->format('<info>some <tag> <setting=value> styled <p>single-char tag</p></info>'));
     }
 
     public function testFormatLongString()
diff --git a/vendor/symfony/console/Symfony/Component/Console/Tests/Helper/DialogHelperTest.php b/vendor/symfony/console/Symfony/Component/Console/Tests/Helper/DialogHelperTest.php
deleted file mode 100644
index 5364f38..0000000
--- a/vendor/symfony/console/Symfony/Component/Console/Tests/Helper/DialogHelperTest.php
+++ /dev/null
@@ -1,192 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Console\Tests\Helper;
-
-use Symfony\Component\Console\Input\ArrayInput;
-use Symfony\Component\Console\Helper\DialogHelper;
-use Symfony\Component\Console\Helper\HelperSet;
-use Symfony\Component\Console\Helper\FormatterHelper;
-use Symfony\Component\Console\Output\StreamOutput;
-
-class DialogHelperTest extends \PHPUnit_Framework_TestCase
-{
-    public function testSelect()
-    {
-        $dialog = new DialogHelper();
-
-        $helperSet = new HelperSet(array(new FormatterHelper()));
-        $dialog->setHelperSet($helperSet);
-
-        $heroes = array('Superman', 'Batman', 'Spiderman');
-
-        $dialog->setInputStream($this->getInputStream("\n1\n  1  \nFabien\n1\nFabien\n1\n0,2\n 0 , 2  \n\n\n"));
-        $this->assertEquals('2', $dialog->select($this->getOutputStream(), 'What is your favorite superhero?', $heroes, '2'));
-        $this->assertEquals('1', $dialog->select($this->getOutputStream(), 'What is your favorite superhero?', $heroes));
-        $this->assertEquals('1', $dialog->select($this->getOutputStream(), 'What is your favorite superhero?', $heroes));
-        $this->assertEquals('1', $dialog->select($output = $this->getOutputStream(), 'What is your favorite superhero?', $heroes, null, false, 'Input "%s" is not a superhero!', false));
-
-        rewind($output->getStream());
-        $this->assertContains('Input "Fabien" is not a superhero!', stream_get_contents($output->getStream()));
-
-        try {
-            $this->assertEquals('1', $dialog->select($output = $this->getOutputStream(), 'What is your favorite superhero?', $heroes, null, 1));
-            $this->fail();
-        } catch (\InvalidArgumentException $e) {
-            $this->assertEquals('Value "Fabien" is invalid', $e->getMessage());
-        }
-
-        $this->assertEquals(array('1'), $dialog->select($this->getOutputStream(), 'What is your favorite superhero?', $heroes, null, false, 'Input "%s" is not a superhero!', true));
-        $this->assertEquals(array('0', '2'), $dialog->select($this->getOutputStream(), 'What is your favorite superhero?', $heroes, null, false, 'Input "%s" is not a superhero!', true));
-        $this->assertEquals(array('0', '2'), $dialog->select($this->getOutputStream(), 'What is your favorite superhero?', $heroes, null, false, 'Input "%s" is not a superhero!', true));
-        $this->assertEquals(array('0', '1'), $dialog->select($this->getOutputStream(), 'What is your favorite superhero?', $heroes, '0,1', false, 'Input "%s" is not a superhero!', true));
-        $this->assertEquals(array('0', '1'), $dialog->select($this->getOutputStream(), 'What is your favorite superhero?', $heroes, ' 0 , 1 ', false, 'Input "%s" is not a superhero!', true));
-    }
-
-    public function testAsk()
-    {
-        $dialog = new DialogHelper();
-
-        $dialog->setInputStream($this->getInputStream("\n8AM\n"));
-
-        $this->assertEquals('2PM', $dialog->ask($this->getOutputStream(), 'What time is it?', '2PM'));
-        $this->assertEquals('8AM', $dialog->ask($output = $this->getOutputStream(), 'What time is it?', '2PM'));
-
-        rewind($output->getStream());
-        $this->assertEquals('What time is it?', stream_get_contents($output->getStream()));
-    }
-
-    public function testAskWithAutocomplete()
-    {
-        if (!$this->hasSttyAvailable()) {
-            $this->markTestSkipped('`stty` is required to test autocomplete functionality');
-        }
-
-        // Acm<NEWLINE>
-        // Ac<BACKSPACE><BACKSPACE>s<TAB>Test<NEWLINE>
-        // <NEWLINE>
-        // <UP ARROW><UP ARROW><NEWLINE>
-        // <UP ARROW><UP ARROW><UP ARROW><UP ARROW><UP ARROW><TAB>Test<NEWLINE>
-        // <DOWN ARROW><NEWLINE>
-        // S<BACKSPACE><BACKSPACE><DOWN ARROW><DOWN ARROW><NEWLINE>
-        // F00<BACKSPACE><BACKSPACE>oo<TAB><NEWLINE>
-        $inputStream = $this->getInputStream("Acm\nAc\177\177s\tTest\n\n\033[A\033[A\n\033[A\033[A\033[A\033[A\033[A\tTest\n\033[B\nS\177\177\033[B\033[B\nF00\177\177oo\t\n");
-
-        $dialog = new DialogHelper();
-        $dialog->setInputStream($inputStream);
-
-        $bundles = array('AcmeDemoBundle', 'AsseticBundle', 'SecurityBundle', 'FooBundle');
-
-        $this->assertEquals('AcmeDemoBundle', $dialog->ask($this->getOutputStream(), 'Please select a bundle', 'FrameworkBundle', $bundles));
-        $this->assertEquals('AsseticBundleTest', $dialog->ask($this->getOutputStream(), 'Please select a bundle', 'FrameworkBundle', $bundles));
-        $this->assertEquals('FrameworkBundle', $dialog->ask($this->getOutputStream(), 'Please select a bundle', 'FrameworkBundle', $bundles));
-        $this->assertEquals('SecurityBundle', $dialog->ask($this->getOutputStream(), 'Please select a bundle', 'FrameworkBundle', $bundles));
-        $this->assertEquals('FooBundleTest', $dialog->ask($this->getOutputStream(), 'Please select a bundle', 'FrameworkBundle', $bundles));
-        $this->assertEquals('AcmeDemoBundle', $dialog->ask($this->getOutputStream(), 'Please select a bundle', 'FrameworkBundle', $bundles));
-        $this->assertEquals('AsseticBundle', $dialog->ask($this->getOutputStream(), 'Please select a bundle', 'FrameworkBundle', $bundles));
-        $this->assertEquals('FooBundle', $dialog->ask($this->getOutputStream(), 'Please select a bundle', 'FrameworkBundle', $bundles));
-    }
-
-    /**
-     * @group tty
-     */
-    public function testAskHiddenResponse()
-    {
-        if (defined('PHP_WINDOWS_VERSION_BUILD')) {
-            $this->markTestSkipped('This test is not supported on Windows');
-        }
-
-        $dialog = new DialogHelper();
-
-        $dialog->setInputStream($this->getInputStream("8AM\n"));
-
-        $this->assertEquals('8AM', $dialog->askHiddenResponse($this->getOutputStream(), 'What time is it?'));
-    }
-
-    public function testAskConfirmation()
-    {
-        $dialog = new DialogHelper();
-
-        $dialog->setInputStream($this->getInputStream("\n\n"));
-        $this->assertTrue($dialog->askConfirmation($this->getOutputStream(), 'Do you like French fries?'));
-        $this->assertFalse($dialog->askConfirmation($this->getOutputStream(), 'Do you like French fries?', false));
-
-        $dialog->setInputStream($this->getInputStream("y\nyes\n"));
-        $this->assertTrue($dialog->askConfirmation($this->getOutputStream(), 'Do you like French fries?', false));
-        $this->assertTrue($dialog->askConfirmation($this->getOutputStream(), 'Do you like French fries?', false));
-
-        $dialog->setInputStream($this->getInputStream("n\nno\n"));
-        $this->assertFalse($dialog->askConfirmation($this->getOutputStream(), 'Do you like French fries?', true));
-        $this->assertFalse($dialog->askConfirmation($this->getOutputStream(), 'Do you like French fries?', true));
-    }
-
-    public function testAskAndValidate()
-    {
-        $dialog = new DialogHelper();
-        $helperSet = new HelperSet(array(new FormatterHelper()));
-        $dialog->setHelperSet($helperSet);
-
-        $question ='What color was the white horse of Henry IV?';
-        $error = 'This is not a color!';
-        $validator = function ($color) use ($error) {
-            if (!in_array($color, array('white', 'black'))) {
-                throw new \InvalidArgumentException($error);
-            }
-
-            return $color;
-        };
-
-        $dialog->setInputStream($this->getInputStream("\nblack\n"));
-        $this->assertEquals('white', $dialog->askAndValidate($this->getOutputStream(), $question, $validator, 2, 'white'));
-        $this->assertEquals('black', $dialog->askAndValidate($this->getOutputStream(), $question, $validator, 2, 'white'));
-
-        $dialog->setInputStream($this->getInputStream("green\nyellow\norange\n"));
-        try {
-            $this->assertEquals('white', $dialog->askAndValidate($this->getOutputStream(), $question, $validator, 2, 'white'));
-            $this->fail();
-        } catch (\InvalidArgumentException $e) {
-            $this->assertEquals($error, $e->getMessage());
-        }
-    }
-
-    public function testNoInteraction()
-    {
-        $dialog = new DialogHelper();
-
-        $input = new ArrayInput(array());
-        $input->setInteractive(false);
-
-        $dialog->setInput($input);
-
-        $this->assertEquals('not yet', $dialog->ask($this->getOutputStream(), 'Do you have a job?', 'not yet'));
-    }
-
-    protected function getInputStream($input)
-    {
-        $stream = fopen('php://memory', 'r+', false);
-        fputs($stream, $input);
-        rewind($stream);
-
-        return $stream;
-    }
-
-    protected function getOutputStream()
-    {
-        return new StreamOutput(fopen('php://memory', 'r+', false));
-    }
-
-    private function hasSttyAvailable()
-    {
-        exec('stty 2>&1', $output, $exitcode);
-
-        return $exitcode === 0;
-    }
-}
diff --git a/vendor/symfony/console/Symfony/Component/Console/Tests/Helper/FormatterHelperTest.php b/vendor/symfony/console/Symfony/Component/Console/Tests/Helper/FormatterHelperTest.php
index db61de4..e332774 100644
--- a/vendor/symfony/console/Symfony/Component/Console/Tests/Helper/FormatterHelperTest.php
+++ b/vendor/symfony/console/Symfony/Component/Console/Tests/Helper/FormatterHelperTest.php
@@ -37,15 +37,15 @@ class FormatterHelperTest extends \PHPUnit_Framework_TestCase
         );
 
         $this->assertEquals(
-            '<error> Some text to display </error>'."\n" .
+            '<error> Some text to display </error>'."\n".
             '<error> foo bar              </error>',
             $formatter->formatBlock(array('Some text to display', 'foo bar'), 'error'),
             '::formatBlock() formats a message in a block'
         );
 
         $this->assertEquals(
-            '<error>                        </error>'."\n" .
-            '<error>  Some text to display  </error>'."\n" .
+            '<error>                        </error>'."\n".
+            '<error>  Some text to display  </error>'."\n".
             '<error>                        </error>',
             $formatter->formatBlock('Some text to display', 'error', true),
             '::formatBlock() formats a message in a block'
@@ -61,8 +61,8 @@ class FormatterHelperTest extends \PHPUnit_Framework_TestCase
         $formatter = new FormatterHelper();
 
         $this->assertEquals(
-            '<error>                       </error>'."\n" .
-            '<error>  Du texte à afficher  </error>'."\n" .
+            '<error>                       </error>'."\n".
+            '<error>  Du texte à afficher  </error>'."\n".
             '<error>                       </error>',
             $formatter->formatBlock('Du texte à afficher', 'error', true),
             '::formatBlock() formats a message in a block'
@@ -76,8 +76,8 @@ class FormatterHelperTest extends \PHPUnit_Framework_TestCase
         }
         $formatter = new FormatterHelper();
         $this->assertEquals(
-            '<error>                    </error>'."\n" .
-            '<error>  表示するテキスト  </error>'."\n" .
+            '<error>                    </error>'."\n".
+            '<error>  表示するテキスト  </error>'."\n".
             '<error>                    </error>',
             $formatter->formatBlock('表示するテキスト', 'error', true),
             '::formatBlock() formats a message in a block'
@@ -89,8 +89,8 @@ class FormatterHelperTest extends \PHPUnit_Framework_TestCase
         $formatter = new FormatterHelper();
 
         $this->assertEquals(
-            '<error>                            </error>'."\n" .
-            '<error>  \<info>some info\</info>  </error>'."\n" .
+            '<error>                            </error>'."\n".
+            '<error>  \<info>some info\</info>  </error>'."\n".
             '<error>                            </error>',
             $formatter->formatBlock('<info>some info</info>', 'error', true),
             '::formatBlock() escapes \'<\' chars'
diff --git a/vendor/symfony/console/Symfony/Component/Console/Tests/Helper/HelperSetTest.php b/vendor/symfony/console/Symfony/Component/Console/Tests/Helper/HelperSetTest.php
index a6ccde2..bf58a45 100644
--- a/vendor/symfony/console/Symfony/Component/Console/Tests/Helper/HelperSetTest.php
+++ b/vendor/symfony/console/Symfony/Component/Console/Tests/Helper/HelperSetTest.php
@@ -128,7 +128,7 @@ class HelperSetTest extends \PHPUnit_Framework_TestCase
         }
     }
 
-   /**
+    /**
      * Create a generic mock for the helper interface. Optionally check for a call to setHelperSet with a specific
      * helperset instance.
      *
diff --git a/vendor/symfony/console/Symfony/Component/Console/Tests/Helper/LegacyDialogHelperTest.php b/vendor/symfony/console/Symfony/Component/Console/Tests/Helper/LegacyDialogHelperTest.php
new file mode 100644
index 0000000..e58b8de
--- /dev/null
+++ b/vendor/symfony/console/Symfony/Component/Console/Tests/Helper/LegacyDialogHelperTest.php
@@ -0,0 +1,197 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Console\Tests\Helper;
+
+use Symfony\Component\Console\Input\ArrayInput;
+use Symfony\Component\Console\Helper\DialogHelper;
+use Symfony\Component\Console\Helper\HelperSet;
+use Symfony\Component\Console\Helper\FormatterHelper;
+use Symfony\Component\Console\Output\StreamOutput;
+
+class LegacyDialogHelperTest extends \PHPUnit_Framework_TestCase
+{
+    public function setUp()
+    {
+        $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED);
+    }
+
+    public function testSelect()
+    {
+        $dialog = new DialogHelper();
+
+        $helperSet = new HelperSet(array(new FormatterHelper()));
+        $dialog->setHelperSet($helperSet);
+
+        $heroes = array('Superman', 'Batman', 'Spiderman');
+
+        $dialog->setInputStream($this->getInputStream("\n1\n  1  \nFabien\n1\nFabien\n1\n0,2\n 0 , 2  \n\n\n"));
+        $this->assertEquals('2', $dialog->select($this->getOutputStream(), 'What is your favorite superhero?', $heroes, '2'));
+        $this->assertEquals('1', $dialog->select($this->getOutputStream(), 'What is your favorite superhero?', $heroes));
+        $this->assertEquals('1', $dialog->select($this->getOutputStream(), 'What is your favorite superhero?', $heroes));
+        $this->assertEquals('1', $dialog->select($output = $this->getOutputStream(), 'What is your favorite superhero?', $heroes, null, false, 'Input "%s" is not a superhero!', false));
+
+        rewind($output->getStream());
+        $this->assertContains('Input "Fabien" is not a superhero!', stream_get_contents($output->getStream()));
+
+        try {
+            $this->assertEquals('1', $dialog->select($output = $this->getOutputStream(), 'What is your favorite superhero?', $heroes, null, 1));
+            $this->fail();
+        } catch (\InvalidArgumentException $e) {
+            $this->assertEquals('Value "Fabien" is invalid', $e->getMessage());
+        }
+
+        $this->assertEquals(array('1'), $dialog->select($this->getOutputStream(), 'What is your favorite superhero?', $heroes, null, false, 'Input "%s" is not a superhero!', true));
+        $this->assertEquals(array('0', '2'), $dialog->select($this->getOutputStream(), 'What is your favorite superhero?', $heroes, null, false, 'Input "%s" is not a superhero!', true));
+        $this->assertEquals(array('0', '2'), $dialog->select($this->getOutputStream(), 'What is your favorite superhero?', $heroes, null, false, 'Input "%s" is not a superhero!', true));
+        $this->assertEquals(array('0', '1'), $dialog->select($this->getOutputStream(), 'What is your favorite superhero?', $heroes, '0,1', false, 'Input "%s" is not a superhero!', true));
+        $this->assertEquals(array('0', '1'), $dialog->select($this->getOutputStream(), 'What is your favorite superhero?', $heroes, ' 0 , 1 ', false, 'Input "%s" is not a superhero!', true));
+    }
+
+    public function testAsk()
+    {
+        $dialog = new DialogHelper();
+
+        $dialog->setInputStream($this->getInputStream("\n8AM\n"));
+
+        $this->assertEquals('2PM', $dialog->ask($this->getOutputStream(), 'What time is it?', '2PM'));
+        $this->assertEquals('8AM', $dialog->ask($output = $this->getOutputStream(), 'What time is it?', '2PM'));
+
+        rewind($output->getStream());
+        $this->assertEquals('What time is it?', stream_get_contents($output->getStream()));
+    }
+
+    public function testAskWithAutocomplete()
+    {
+        if (!$this->hasSttyAvailable()) {
+            $this->markTestSkipped('`stty` is required to test autocomplete functionality');
+        }
+
+        // Acm<NEWLINE>
+        // Ac<BACKSPACE><BACKSPACE>s<TAB>Test<NEWLINE>
+        // <NEWLINE>
+        // <UP ARROW><UP ARROW><NEWLINE>
+        // <UP ARROW><UP ARROW><UP ARROW><UP ARROW><UP ARROW><TAB>Test<NEWLINE>
+        // <DOWN ARROW><NEWLINE>
+        // S<BACKSPACE><BACKSPACE><DOWN ARROW><DOWN ARROW><NEWLINE>
+        // F00<BACKSPACE><BACKSPACE>oo<TAB><NEWLINE>
+        $inputStream = $this->getInputStream("Acm\nAc\177\177s\tTest\n\n\033[A\033[A\n\033[A\033[A\033[A\033[A\033[A\tTest\n\033[B\nS\177\177\033[B\033[B\nF00\177\177oo\t\n");
+
+        $dialog = new DialogHelper();
+        $dialog->setInputStream($inputStream);
+
+        $bundles = array('AcmeDemoBundle', 'AsseticBundle', 'SecurityBundle', 'FooBundle');
+
+        $this->assertEquals('AcmeDemoBundle', $dialog->ask($this->getOutputStream(), 'Please select a bundle', 'FrameworkBundle', $bundles));
+        $this->assertEquals('AsseticBundleTest', $dialog->ask($this->getOutputStream(), 'Please select a bundle', 'FrameworkBundle', $bundles));
+        $this->assertEquals('FrameworkBundle', $dialog->ask($this->getOutputStream(), 'Please select a bundle', 'FrameworkBundle', $bundles));
+        $this->assertEquals('SecurityBundle', $dialog->ask($this->getOutputStream(), 'Please select a bundle', 'FrameworkBundle', $bundles));
+        $this->assertEquals('FooBundleTest', $dialog->ask($this->getOutputStream(), 'Please select a bundle', 'FrameworkBundle', $bundles));
+        $this->assertEquals('AcmeDemoBundle', $dialog->ask($this->getOutputStream(), 'Please select a bundle', 'FrameworkBundle', $bundles));
+        $this->assertEquals('AsseticBundle', $dialog->ask($this->getOutputStream(), 'Please select a bundle', 'FrameworkBundle', $bundles));
+        $this->assertEquals('FooBundle', $dialog->ask($this->getOutputStream(), 'Please select a bundle', 'FrameworkBundle', $bundles));
+    }
+
+    /**
+     * @group tty
+     */
+    public function testAskHiddenResponse()
+    {
+        if ('\\' === DIRECTORY_SEPARATOR) {
+            $this->markTestSkipped('This test is not supported on Windows');
+        }
+
+        $dialog = new DialogHelper();
+
+        $dialog->setInputStream($this->getInputStream("8AM\n"));
+
+        $this->assertEquals('8AM', $dialog->askHiddenResponse($this->getOutputStream(), 'What time is it?'));
+    }
+
+    public function testAskConfirmation()
+    {
+        $dialog = new DialogHelper();
+
+        $dialog->setInputStream($this->getInputStream("\n\n"));
+        $this->assertTrue($dialog->askConfirmation($this->getOutputStream(), 'Do you like French fries?'));
+        $this->assertFalse($dialog->askConfirmation($this->getOutputStream(), 'Do you like French fries?', false));
+
+        $dialog->setInputStream($this->getInputStream("y\nyes\n"));
+        $this->assertTrue($dialog->askConfirmation($this->getOutputStream(), 'Do you like French fries?', false));
+        $this->assertTrue($dialog->askConfirmation($this->getOutputStream(), 'Do you like French fries?', false));
+
+        $dialog->setInputStream($this->getInputStream("n\nno\n"));
+        $this->assertFalse($dialog->askConfirmation($this->getOutputStream(), 'Do you like French fries?', true));
+        $this->assertFalse($dialog->askConfirmation($this->getOutputStream(), 'Do you like French fries?', true));
+    }
+
+    public function testAskAndValidate()
+    {
+        $dialog = new DialogHelper();
+        $helperSet = new HelperSet(array(new FormatterHelper()));
+        $dialog->setHelperSet($helperSet);
+
+        $question = 'What color was the white horse of Henry IV?';
+        $error = 'This is not a color!';
+        $validator = function ($color) use ($error) {
+            if (!in_array($color, array('white', 'black'))) {
+                throw new \InvalidArgumentException($error);
+            }
+
+            return $color;
+        };
+
+        $dialog->setInputStream($this->getInputStream("\nblack\n"));
+        $this->assertEquals('white', $dialog->askAndValidate($this->getOutputStream(), $question, $validator, 2, 'white'));
+        $this->assertEquals('black', $dialog->askAndValidate($this->getOutputStream(), $question, $validator, 2, 'white'));
+
+        $dialog->setInputStream($this->getInputStream("green\nyellow\norange\n"));
+        try {
+            $this->assertEquals('white', $dialog->askAndValidate($this->getOutputStream(), $question, $validator, 2, 'white'));
+            $this->fail();
+        } catch (\InvalidArgumentException $e) {
+            $this->assertEquals($error, $e->getMessage());
+        }
+    }
+
+    public function testNoInteraction()
+    {
+        $dialog = new DialogHelper();
+
+        $input = new ArrayInput(array());
+        $input->setInteractive(false);
+
+        $dialog->setInput($input);
+
+        $this->assertEquals('not yet', $dialog->ask($this->getOutputStream(), 'Do you have a job?', 'not yet'));
+    }
+
+    protected function getInputStream($input)
+    {
+        $stream = fopen('php://memory', 'r+', false);
+        fputs($stream, $input);
+        rewind($stream);
+
+        return $stream;
+    }
+
+    protected function getOutputStream()
+    {
+        return new StreamOutput(fopen('php://memory', 'r+', false));
+    }
+
+    private function hasSttyAvailable()
+    {
+        exec('stty 2>&1', $output, $exitcode);
+
+        return $exitcode === 0;
+    }
+}
diff --git a/vendor/symfony/console/Symfony/Component/Console/Tests/Helper/LegacyProgressHelperTest.php b/vendor/symfony/console/Symfony/Component/Console/Tests/Helper/LegacyProgressHelperTest.php
new file mode 100644
index 0000000..5dee669
--- /dev/null
+++ b/vendor/symfony/console/Symfony/Component/Console/Tests/Helper/LegacyProgressHelperTest.php
@@ -0,0 +1,229 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Console\Tests\Helper;
+
+use Symfony\Component\Console\Helper\ProgressHelper;
+use Symfony\Component\Console\Output\StreamOutput;
+
+class LegacyProgressHelperTest extends \PHPUnit_Framework_TestCase
+{
+    public function setUp()
+    {
+        $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED);
+    }
+
+    public function testAdvance()
+    {
+        $progress = new ProgressHelper();
+        $progress->start($output = $this->getOutputStream());
+        $progress->advance();
+
+        rewind($output->getStream());
+        $this->assertEquals($this->generateOutput('    1 [->--------------------------]'), stream_get_contents($output->getStream()));
+    }
+
+    public function testAdvanceWithStep()
+    {
+        $progress = new ProgressHelper();
+        $progress->start($output = $this->getOutputStream());
+        $progress->advance(5);
+
+        rewind($output->getStream());
+        $this->assertEquals($this->generateOutput('    5 [----->----------------------]'), stream_get_contents($output->getStream()));
+    }
+
+    public function testAdvanceMultipleTimes()
+    {
+        $progress = new ProgressHelper();
+        $progress->start($output = $this->getOutputStream());
+        $progress->advance(3);
+        $progress->advance(2);
+
+        rewind($output->getStream());
+        $this->assertEquals($this->generateOutput('    3 [--->------------------------]').$this->generateOutput('    5 [----->----------------------]'), stream_get_contents($output->getStream()));
+    }
+
+    public function testCustomizations()
+    {
+        $progress = new ProgressHelper();
+        $progress->setBarWidth(10);
+        $progress->setBarCharacter('_');
+        $progress->setEmptyBarCharacter(' ');
+        $progress->setProgressCharacter('/');
+        $progress->setFormat(' %current%/%max% [%bar%] %percent%%');
+        $progress->start($output = $this->getOutputStream(), 10);
+        $progress->advance();
+
+        rewind($output->getStream());
+        $this->assertEquals($this->generateOutput('  1/10 [_/        ]  10%'), stream_get_contents($output->getStream()));
+    }
+
+    public function testPercent()
+    {
+        $progress = new ProgressHelper();
+        $progress->start($output = $this->getOutputStream(), 50);
+        $progress->display();
+        $progress->advance();
+        $progress->advance();
+
+        rewind($output->getStream());
+        $this->assertEquals($this->generateOutput('  0/50 [>---------------------------]   0%').$this->generateOutput('  1/50 [>---------------------------]   2%').$this->generateOutput('  2/50 [=>--------------------------]   4%'), stream_get_contents($output->getStream()));
+    }
+
+    public function testOverwriteWithShorterLine()
+    {
+        $progress = new ProgressHelper();
+        $progress->setFormat(' %current%/%max% [%bar%] %percent%%');
+        $progress->start($output = $this->getOutputStream(), 50);
+        $progress->display();
+        $progress->advance();
+
+        // set shorter format
+        $progress->setFormat(' %current%/%max% [%bar%]');
+        $progress->advance();
+
+        rewind($output->getStream());
+        $this->assertEquals(
+            $this->generateOutput('  0/50 [>---------------------------]   0%').
+            $this->generateOutput('  1/50 [>---------------------------]   2%').
+            $this->generateOutput('  2/50 [=>--------------------------]     '),
+            stream_get_contents($output->getStream())
+        );
+    }
+
+    public function testSetCurrentProgress()
+    {
+        $progress = new ProgressHelper();
+        $progress->start($output = $this->getOutputStream(), 50);
+        $progress->display();
+        $progress->advance();
+        $progress->setCurrent(15);
+        $progress->setCurrent(25);
+
+        rewind($output->getStream());
+        $this->assertEquals(
+            $this->generateOutput('  0/50 [>---------------------------]   0%').
+            $this->generateOutput('  1/50 [>---------------------------]   2%').
+            $this->generateOutput(' 15/50 [========>-------------------]  30%').
+            $this->generateOutput(' 25/50 [==============>-------------]  50%'),
+            stream_get_contents($output->getStream())
+        );
+    }
+
+    /**
+     * @expectedException        \LogicException
+     * @expectedExceptionMessage You must start the progress bar
+     */
+    public function testSetCurrentBeforeStarting()
+    {
+        $progress = new ProgressHelper();
+        $progress->setCurrent(15);
+    }
+
+    /**
+     * @expectedException        \LogicException
+     * @expectedExceptionMessage You can't regress the progress bar
+     */
+    public function testRegressProgress()
+    {
+        $progress = new ProgressHelper();
+        $progress->start($output = $this->getOutputStream(), 50);
+        $progress->setCurrent(15);
+        $progress->setCurrent(10);
+    }
+
+    public function testRedrawFrequency()
+    {
+        $progress = $this->getMock('Symfony\Component\Console\Helper\ProgressHelper', array('display'));
+        $progress->expects($this->exactly(4))
+                 ->method('display');
+
+        $progress->setRedrawFrequency(2);
+
+        $progress->start($output = $this->getOutputStream(), 6);
+        $progress->setCurrent(1);
+        $progress->advance(2);
+        $progress->advance(2);
+        $progress->advance(1);
+    }
+
+    public function testMultiByteSupport()
+    {
+        if (!function_exists('mb_strlen') || (false === $encoding = mb_detect_encoding('■'))) {
+            $this->markTestSkipped('The mbstring extension is needed for multi-byte support');
+        }
+
+        $progress = new ProgressHelper();
+        $progress->start($output = $this->getOutputStream());
+        $progress->setBarCharacter('■');
+        $progress->advance(3);
+
+        rewind($output->getStream());
+        $this->assertEquals($this->generateOutput('    3 [■■■>------------------------]'), stream_get_contents($output->getStream()));
+    }
+
+    public function testClear()
+    {
+        $progress = new ProgressHelper();
+        $progress->start($output = $this->getOutputStream(), 50);
+        $progress->setCurrent(25);
+        $progress->clear();
+
+        rewind($output->getStream());
+        $this->assertEquals(
+            $this->generateOutput(' 25/50 [==============>-------------]  50%').$this->generateOutput(''),
+            stream_get_contents($output->getStream())
+        );
+    }
+
+    public function testPercentNotHundredBeforeComplete()
+    {
+        $progress = new ProgressHelper();
+        $progress->start($output = $this->getOutputStream(), 200);
+        $progress->display();
+        $progress->advance(199);
+        $progress->advance();
+
+        rewind($output->getStream());
+        $this->assertEquals($this->generateOutput('   0/200 [>---------------------------]   0%').$this->generateOutput(' 199/200 [===========================>]  99%').$this->generateOutput(' 200/200 [============================] 100%'), stream_get_contents($output->getStream()));
+    }
+
+    public function testNonDecoratedOutput()
+    {
+        $progress = new ProgressHelper();
+        $progress->start($output = $this->getOutputStream(false));
+        $progress->advance();
+
+        rewind($output->getStream());
+        $this->assertEquals('', stream_get_contents($output->getStream()));
+    }
+
+    protected function getOutputStream($decorated = true)
+    {
+        return new StreamOutput(fopen('php://memory', 'r+', false), StreamOutput::VERBOSITY_NORMAL, $decorated);
+    }
+
+    protected $lastMessagesLength;
+
+    protected function generateOutput($expected)
+    {
+        $expectedout = $expected;
+
+        if ($this->lastMessagesLength !== null) {
+            $expectedout = str_pad($expected, $this->lastMessagesLength, "\x20", STR_PAD_RIGHT);
+        }
+
+        $this->lastMessagesLength = strlen($expectedout);
+
+        return "\x0D".$expectedout;
+    }
+}
diff --git a/vendor/symfony/console/Symfony/Component/Console/Tests/Helper/LegacyTableHelperTest.php b/vendor/symfony/console/Symfony/Component/Console/Tests/Helper/LegacyTableHelperTest.php
new file mode 100644
index 0000000..046cc19
--- /dev/null
+++ b/vendor/symfony/console/Symfony/Component/Console/Tests/Helper/LegacyTableHelperTest.php
@@ -0,0 +1,295 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Console\Tests\Helper;
+
+use Symfony\Component\Console\Helper\TableHelper;
+use Symfony\Component\Console\Output\StreamOutput;
+
+class LegacyTableHelperTest extends \PHPUnit_Framework_TestCase
+{
+    protected $stream;
+
+    protected function setUp()
+    {
+        $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED);
+        $this->stream = fopen('php://memory', 'r+');
+    }
+
+    protected function tearDown()
+    {
+        fclose($this->stream);
+        $this->stream = null;
+    }
+
+    /**
+     * @dataProvider testRenderProvider
+     */
+    public function testRender($headers, $rows, $layout, $expected)
+    {
+        $table = new TableHelper();
+        $table
+            ->setHeaders($headers)
+            ->setRows($rows)
+            ->setLayout($layout)
+        ;
+        $table->render($output = $this->getOutputStream());
+
+        $this->assertEquals($expected, $this->getOutputContent($output));
+    }
+
+    /**
+     * @dataProvider testRenderProvider
+     */
+    public function testRenderAddRows($headers, $rows, $layout, $expected)
+    {
+        $table = new TableHelper();
+        $table
+            ->setHeaders($headers)
+            ->addRows($rows)
+            ->setLayout($layout)
+        ;
+        $table->render($output = $this->getOutputStream());
+
+        $this->assertEquals($expected, $this->getOutputContent($output));
+    }
+
+    /**
+     * @dataProvider testRenderProvider
+     */
+    public function testRenderAddRowsOneByOne($headers, $rows, $layout, $expected)
+    {
+        $table = new TableHelper();
+        $table
+            ->setHeaders($headers)
+            ->setLayout($layout)
+        ;
+        foreach ($rows as $row) {
+            $table->addRow($row);
+        }
+        $table->render($output = $this->getOutputStream());
+
+        $this->assertEquals($expected, $this->getOutputContent($output));
+    }
+
+    public function testRenderProvider()
+    {
+        $books = array(
+            array('99921-58-10-7', 'Divine Comedy', 'Dante Alighieri'),
+            array('9971-5-0210-0', 'A Tale of Two Cities', 'Charles Dickens'),
+            array('960-425-059-0', 'The Lord of the Rings', 'J. R. R. Tolkien'),
+            array('80-902734-1-6', 'And Then There Were None', 'Agatha Christie'),
+        );
+
+        return array(
+            array(
+                array('ISBN', 'Title', 'Author'),
+                $books,
+                TableHelper::LAYOUT_DEFAULT,
+<<<TABLE
++---------------+--------------------------+------------------+
+| ISBN          | Title                    | Author           |
++---------------+--------------------------+------------------+
+| 99921-58-10-7 | Divine Comedy            | Dante Alighieri  |
+| 9971-5-0210-0 | A Tale of Two Cities     | Charles Dickens  |
+| 960-425-059-0 | The Lord of the Rings    | J. R. R. Tolkien |
+| 80-902734-1-6 | And Then There Were None | Agatha Christie  |
++---------------+--------------------------+------------------+
+
+TABLE
+            ),
+            array(
+                array('ISBN', 'Title', 'Author'),
+                $books,
+                TableHelper::LAYOUT_COMPACT,
+<<<TABLE
+ ISBN          Title                    Author           
+ 99921-58-10-7 Divine Comedy            Dante Alighieri  
+ 9971-5-0210-0 A Tale of Two Cities     Charles Dickens  
+ 960-425-059-0 The Lord of the Rings    J. R. R. Tolkien 
+ 80-902734-1-6 And Then There Were None Agatha Christie  
+
+TABLE
+            ),
+            array(
+                array('ISBN', 'Title', 'Author'),
+                $books,
+                TableHelper::LAYOUT_BORDERLESS,
+<<<TABLE
+ =============== ========================== ================== 
+  ISBN            Title                      Author            
+ =============== ========================== ================== 
+  99921-58-10-7   Divine Comedy              Dante Alighieri   
+  9971-5-0210-0   A Tale of Two Cities       Charles Dickens   
+  960-425-059-0   The Lord of the Rings      J. R. R. Tolkien  
+  80-902734-1-6   And Then There Were None   Agatha Christie   
+ =============== ========================== ================== 
+
+TABLE
+            ),
+            array(
+                array('ISBN', 'Title'),
+                array(
+                    array('99921-58-10-7', 'Divine Comedy', 'Dante Alighieri'),
+                    array('9971-5-0210-0'),
+                    array('960-425-059-0', 'The Lord of the Rings', 'J. R. R. Tolkien'),
+                    array('80-902734-1-6', 'And Then There Were None', 'Agatha Christie'),
+                ),
+                TableHelper::LAYOUT_DEFAULT,
+<<<TABLE
++---------------+--------------------------+------------------+
+| ISBN          | Title                    |                  |
++---------------+--------------------------+------------------+
+| 99921-58-10-7 | Divine Comedy            | Dante Alighieri  |
+| 9971-5-0210-0 |                          |                  |
+| 960-425-059-0 | The Lord of the Rings    | J. R. R. Tolkien |
+| 80-902734-1-6 | And Then There Were None | Agatha Christie  |
++---------------+--------------------------+------------------+
+
+TABLE
+            ),
+            array(
+                array(),
+                array(
+                    array('99921-58-10-7', 'Divine Comedy', 'Dante Alighieri'),
+                    array('9971-5-0210-0'),
+                    array('960-425-059-0', 'The Lord of the Rings', 'J. R. R. Tolkien'),
+                    array('80-902734-1-6', 'And Then There Were None', 'Agatha Christie'),
+                ),
+                TableHelper::LAYOUT_DEFAULT,
+<<<TABLE
++---------------+--------------------------+------------------+
+| 99921-58-10-7 | Divine Comedy            | Dante Alighieri  |
+| 9971-5-0210-0 |                          |                  |
+| 960-425-059-0 | The Lord of the Rings    | J. R. R. Tolkien |
+| 80-902734-1-6 | And Then There Were None | Agatha Christie  |
++---------------+--------------------------+------------------+
+
+TABLE
+            ),
+            array(
+                array('ISBN', 'Title', 'Author'),
+                array(
+                    array("99921-58-10-7", "Divine\nComedy", "Dante Alighieri"),
+                    array("9971-5-0210-2", "Harry Potter\nand the Chamber of Secrets", "Rowling\nJoanne K."),
+                    array("9971-5-0210-2", "Harry Potter\nand the Chamber of Secrets", "Rowling\nJoanne K."),
+                    array("960-425-059-0", "The Lord of the Rings", "J. R. R.\nTolkien"),
+                ),
+                TableHelper::LAYOUT_DEFAULT,
+<<<TABLE
++---------------+----------------------------+-----------------+
+| ISBN          | Title                      | Author          |
++---------------+----------------------------+-----------------+
+| 99921-58-10-7 | Divine                     | Dante Alighieri |
+|               | Comedy                     |                 |
+| 9971-5-0210-2 | Harry Potter               | Rowling         |
+|               | and the Chamber of Secrets | Joanne K.       |
+| 9971-5-0210-2 | Harry Potter               | Rowling         |
+|               | and the Chamber of Secrets | Joanne K.       |
+| 960-425-059-0 | The Lord of the Rings      | J. R. R.        |
+|               |                            | Tolkien         |
++---------------+----------------------------+-----------------+
+
+TABLE
+            ),
+            array(
+                array('ISBN', 'Title'),
+                array(),
+                TableHelper::LAYOUT_DEFAULT,
+<<<TABLE
++------+-------+
+| ISBN | Title |
++------+-------+
+
+TABLE
+            ),
+            array(
+                array(),
+                array(),
+                TableHelper::LAYOUT_DEFAULT,
+                '',
+            ),
+            'Cell text with tags used for Output styling' => array(
+                array('ISBN', 'Title', 'Author'),
+                array(
+                    array('<info>99921-58-10-7</info>', '<error>Divine Comedy</error>', '<fg=blue;bg=white>Dante Alighieri</fg=blue;bg=white>'),
+                    array('9971-5-0210-0', 'A Tale of Two Cities', '<info>Charles Dickens</>'),
+                ),
+                TableHelper::LAYOUT_DEFAULT,
+<<<TABLE
++---------------+----------------------+-----------------+
+| ISBN          | Title                | Author          |
++---------------+----------------------+-----------------+
+| 99921-58-10-7 | Divine Comedy        | Dante Alighieri |
+| 9971-5-0210-0 | A Tale of Two Cities | Charles Dickens |
++---------------+----------------------+-----------------+
+
+TABLE
+            ),
+            'Cell text with tags not used for Output styling' => array(
+                array('ISBN', 'Title', 'Author'),
+                array(
+                    array('<strong>99921-58-10-700</strong>', '<f>Divine Com</f>', 'Dante Alighieri'),
+                    array('9971-5-0210-0', 'A Tale of Two Cities', 'Charles Dickens'),
+                ),
+                TableHelper::LAYOUT_DEFAULT,
+<<<TABLE
++----------------------------------+----------------------+-----------------+
+| ISBN                             | Title                | Author          |
++----------------------------------+----------------------+-----------------+
+| <strong>99921-58-10-700</strong> | <f>Divine Com</f>    | Dante Alighieri |
+| 9971-5-0210-0                    | A Tale of Two Cities | Charles Dickens |
++----------------------------------+----------------------+-----------------+
+
+TABLE
+            ),
+        );
+    }
+
+    public function testRenderMultiByte()
+    {
+        if (!function_exists('mb_strlen')) {
+            $this->markTestSkipped('The "mbstring" extension is not available');
+        }
+
+        $table = new TableHelper();
+        $table
+            ->setHeaders(array('■■'))
+            ->setRows(array(array(1234)))
+            ->setLayout(TableHelper::LAYOUT_DEFAULT)
+        ;
+        $table->render($output = $this->getOutputStream());
+
+        $expected =
+<<<TABLE
++------+
+| ■■   |
++------+
+| 1234 |
++------+
+
+TABLE;
+
+        $this->assertEquals($expected, $this->getOutputContent($output));
+    }
+
+    protected function getOutputStream()
+    {
+        return new StreamOutput($this->stream, StreamOutput::VERBOSITY_NORMAL, false);
+    }
+
+    protected function getOutputContent(StreamOutput $output)
+    {
+        rewind($output->getStream());
+
+        return str_replace(PHP_EOL, "\n", stream_get_contents($output->getStream()));
+    }
+}
diff --git a/vendor/symfony/console/Symfony/Component/Console/Tests/Helper/ProcessHelperTest.php b/vendor/symfony/console/Symfony/Component/Console/Tests/Helper/ProcessHelperTest.php
new file mode 100644
index 0000000..2e333dc
--- /dev/null
+++ b/vendor/symfony/console/Symfony/Component/Console/Tests/Helper/ProcessHelperTest.php
@@ -0,0 +1,118 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Console\Tests\Helper;
+
+use Symfony\Component\Console\Helper\DebugFormatterHelper;
+use Symfony\Component\Console\Helper\HelperSet;
+use Symfony\Component\Console\Helper\Helper;
+use Symfony\Component\Console\Output\StreamOutput;
+use Symfony\Component\Console\Helper\ProcessHelper;
+use Symfony\Component\Process\Process;
+
+class ProcessHelperTest extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * @dataProvider provideCommandsAndOutput
+     */
+    public function testVariousProcessRuns($expected, $cmd, $verbosity, $error)
+    {
+        $helper = new ProcessHelper();
+        $helper->setHelperSet(new HelperSet(array(new DebugFormatterHelper())));
+        $output = $this->getOutputStream($verbosity);
+        $helper->run($output, $cmd, $error);
+        $this->assertEquals($expected, $this->getOutput($output));
+    }
+
+    public function testPassedCallbackIsExecuted()
+    {
+        $helper = new ProcessHelper();
+        $helper->setHelperSet(new HelperSet(array(new DebugFormatterHelper())));
+        $output = $this->getOutputStream(StreamOutput::VERBOSITY_NORMAL);
+
+        $executed = false;
+        $callback = function () use (&$executed) { $executed = true; };
+
+        $helper->run($output, 'php -r "echo 42;"', null, $callback);
+        $this->assertTrue($executed);
+    }
+
+    public function provideCommandsAndOutput()
+    {
+        $successOutputVerbose = <<<EOT
+  RUN  php -r "echo 42;"
+  RES  Command ran successfully
+
+EOT;
+        $successOutputDebug = <<<EOT
+  RUN  php -r "echo 42;"
+  OUT  42
+  RES  Command ran successfully
+
+EOT;
+        $successOutputDebugWithTags = <<<EOT
+  RUN  php -r "echo \"<info>42</info>\";"
+  OUT  <info>42</info>
+  RES  Command ran successfully
+
+EOT;
+        $successOutputProcessDebug = <<<EOT
+  RUN  'php' '-r' 'echo 42;'
+  OUT  42
+  RES  Command ran successfully
+
+EOT;
+        $syntaxErrorOutputVerbose = <<<EOT
+  RUN  php -r "fwrite(STDERR, 'error message');usleep(50000);fwrite(STDOUT, 'out message');exit(252);"
+  RES  252 Command did not run successfully
+
+EOT;
+        $syntaxErrorOutputDebug = <<<EOT
+  RUN  php -r "fwrite(STDERR, 'error message');usleep(50000);fwrite(STDOUT, 'out message');exit(252);"
+  ERR  error message
+  OUT  out message
+  RES  252 Command did not run successfully
+
+EOT;
+
+        $errorMessage = 'An error occurred';
+        if ('\\' === DIRECTORY_SEPARATOR) {
+            $successOutputProcessDebug = str_replace("'", '"', $successOutputProcessDebug);
+        }
+
+        return array(
+            array('', 'php -r "echo 42;"', StreamOutput::VERBOSITY_VERBOSE, null),
+            array($successOutputVerbose, 'php -r "echo 42;"', StreamOutput::VERBOSITY_VERY_VERBOSE, null),
+            array($successOutputDebug, 'php -r "echo 42;"', StreamOutput::VERBOSITY_DEBUG, null),
+            array($successOutputDebugWithTags, 'php -r "echo \"<info>42</info>\";"', StreamOutput::VERBOSITY_DEBUG, null),
+            array('', 'php -r "syntax error"', StreamOutput::VERBOSITY_VERBOSE, null),
+            array($syntaxErrorOutputVerbose, 'php -r "fwrite(STDERR, \'error message\');usleep(50000);fwrite(STDOUT, \'out message\');exit(252);"', StreamOutput::VERBOSITY_VERY_VERBOSE, null),
+            array($syntaxErrorOutputDebug, 'php -r "fwrite(STDERR, \'error message\');usleep(50000);fwrite(STDOUT, \'out message\');exit(252);"', StreamOutput::VERBOSITY_DEBUG, null),
+            array($errorMessage.PHP_EOL, 'php -r "fwrite(STDERR, \'error message\');usleep(50000);fwrite(STDOUT, \'out message\');exit(252);"', StreamOutput::VERBOSITY_VERBOSE, $errorMessage),
+            array($syntaxErrorOutputVerbose.$errorMessage.PHP_EOL, 'php -r "fwrite(STDERR, \'error message\');usleep(50000);fwrite(STDOUT, \'out message\');exit(252);"', StreamOutput::VERBOSITY_VERY_VERBOSE, $errorMessage),
+            array($syntaxErrorOutputDebug.$errorMessage.PHP_EOL, 'php -r "fwrite(STDERR, \'error message\');usleep(50000);fwrite(STDOUT, \'out message\');exit(252);"', StreamOutput::VERBOSITY_DEBUG, $errorMessage),
+            array($successOutputProcessDebug, array('php', '-r', 'echo 42;'), StreamOutput::VERBOSITY_DEBUG, null),
+            array($successOutputDebug, new Process('php -r "echo 42;"'), StreamOutput::VERBOSITY_DEBUG, null),
+        );
+    }
+
+    private function getOutputStream($verbosity)
+    {
+        return new StreamOutput(fopen('php://memory', 'r+', false), $verbosity, false);
+    }
+
+    private function getOutput(StreamOutput $output)
+    {
+        rewind($output->getStream());
+
+        return stream_get_contents($output->getStream());
+    }
+}
diff --git a/vendor/symfony/console/Symfony/Component/Console/Tests/Helper/ProgressBarTest.php b/vendor/symfony/console/Symfony/Component/Console/Tests/Helper/ProgressBarTest.php
index d087713..59c06bb 100644
--- a/vendor/symfony/console/Symfony/Component/Console/Tests/Helper/ProgressBarTest.php
+++ b/vendor/symfony/console/Symfony/Component/Console/Tests/Helper/ProgressBarTest.php
@@ -17,7 +17,21 @@ use Symfony\Component\Console\Output\StreamOutput;
 
 class ProgressBarTest extends \PHPUnit_Framework_TestCase
 {
-    protected $lastMessagesLength;
+    public function testMultipleStart()
+    {
+        $bar = new ProgressBar($output = $this->getOutputStream());
+        $bar->start();
+        $bar->advance();
+        $bar->start();
+
+        rewind($output->getStream());
+        $this->assertEquals(
+            $this->generateOutput('    0 [>---------------------------]').
+            $this->generateOutput('    1 [->--------------------------]').
+            $this->generateOutput('    0 [>---------------------------]'),
+            stream_get_contents($output->getStream())
+        );
+    }
 
     public function testAdvance()
     {
@@ -63,6 +77,22 @@ class ProgressBarTest extends \PHPUnit_Framework_TestCase
         );
     }
 
+    public function testAdvanceOverMax()
+    {
+        $bar = new ProgressBar($output = $this->getOutputStream(), 10);
+        $bar->setProgress(9);
+        $bar->advance();
+        $bar->advance();
+
+        rewind($output->getStream());
+        $this->assertEquals(
+            $this->generateOutput('  9/10 [=========================>--]  90%').
+            $this->generateOutput(' 10/10 [============================] 100%').
+            $this->generateOutput(' 11/11 [============================] 100%'),
+            stream_get_contents($output->getStream())
+        );
+    }
+
     public function testCustomizations()
     {
         $bar = new ProgressBar($output = $this->getOutputStream(), 10);
@@ -82,6 +112,42 @@ class ProgressBarTest extends \PHPUnit_Framework_TestCase
         );
     }
 
+    public function testDisplayWithoutStart()
+    {
+        $bar = new ProgressBar($output = $this->getOutputStream(), 50);
+        $bar->display();
+
+        rewind($output->getStream());
+        $this->assertEquals(
+            $this->generateOutput('  0/50 [>---------------------------]   0%'),
+            stream_get_contents($output->getStream())
+        );
+    }
+
+    public function testDisplayWithQuietVerbosity()
+    {
+        $bar = new ProgressBar($output = $this->getOutputStream(true, StreamOutput::VERBOSITY_QUIET), 50);
+        $bar->display();
+
+        rewind($output->getStream());
+        $this->assertEquals(
+            '',
+            stream_get_contents($output->getStream())
+        );
+    }
+
+    public function testFinishWithoutStart()
+    {
+        $bar = new ProgressBar($output = $this->getOutputStream(), 50);
+        $bar->finish();
+
+        rewind($output->getStream());
+        $this->assertEquals(
+            $this->generateOutput(' 50/50 [============================] 100%'),
+            stream_get_contents($output->getStream())
+        );
+    }
+
     public function testPercent()
     {
         $bar = new ProgressBar($output = $this->getOutputStream(), 50);
@@ -122,14 +188,29 @@ class ProgressBarTest extends \PHPUnit_Framework_TestCase
         );
     }
 
+    public function testStartWithMax()
+    {
+        $bar = new ProgressBar($output = $this->getOutputStream());
+        $bar->setFormat('%current%/%max% [%bar%]');
+        $bar->start(50);
+        $bar->advance();
+
+        rewind($output->getStream());
+        $this->assertEquals(
+            $this->generateOutput(' 0/50 [>---------------------------]').
+            $this->generateOutput(' 1/50 [>---------------------------]'),
+            stream_get_contents($output->getStream())
+        );
+    }
+
     public function testSetCurrentProgress()
     {
         $bar = new ProgressBar($output = $this->getOutputStream(), 50);
         $bar->start();
         $bar->display();
         $bar->advance();
-        $bar->setCurrent(15);
-        $bar->setCurrent(25);
+        $bar->setProgress(15);
+        $bar->setProgress(25);
 
         rewind($output->getStream());
         $this->assertEquals(
@@ -143,13 +224,12 @@ class ProgressBarTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * @expectedException        \LogicException
-     * @expectedExceptionMessage You must start the progress bar
      */
     public function testSetCurrentBeforeStarting()
     {
         $bar = new ProgressBar($this->getOutputStream());
-        $bar->setCurrent(15);
+        $bar->setProgress(15);
+        $this->assertNotNull($bar->getStartTime());
     }
 
     /**
@@ -160,8 +240,8 @@ class ProgressBarTest extends \PHPUnit_Framework_TestCase
     {
         $bar = new ProgressBar($output = $this->getOutputStream(), 50);
         $bar->start();
-        $bar->setCurrent(15);
-        $bar->setCurrent(10);
+        $bar->setProgress(15);
+        $bar->setProgress(10);
     }
 
     public function testRedrawFrequency()
@@ -171,7 +251,7 @@ class ProgressBarTest extends \PHPUnit_Framework_TestCase
 
         $bar->setRedrawFrequency(2);
         $bar->start();
-        $bar->setCurrent(1);
+        $bar->setProgress(1);
         $bar->advance(2);
         $bar->advance(2);
         $bar->advance(1);
@@ -200,7 +280,7 @@ class ProgressBarTest extends \PHPUnit_Framework_TestCase
     {
         $bar = new ProgressBar($output = $this->getOutputStream(), 50);
         $bar->start();
-        $bar->setCurrent(25);
+        $bar->setProgress(25);
         $bar->clear();
 
         rewind($output->getStream());
@@ -232,12 +312,62 @@ class ProgressBarTest extends \PHPUnit_Framework_TestCase
 
     public function testNonDecoratedOutput()
     {
+        $bar = new ProgressBar($output = $this->getOutputStream(false), 200);
+        $bar->start();
+
+        for ($i = 0; $i < 200; $i++) {
+            $bar->advance();
+        }
+
+        $bar->finish();
+
+        rewind($output->getStream());
+        $this->assertEquals(
+            "   0/200 [>---------------------------]   0%\n".
+            "  20/200 [==>-------------------------]  10%\n".
+            "  40/200 [=====>----------------------]  20%\n".
+            "  60/200 [========>-------------------]  30%\n".
+            "  80/200 [===========>----------------]  40%\n".
+            " 100/200 [==============>-------------]  50%\n".
+            " 120/200 [================>-----------]  60%\n".
+            " 140/200 [===================>--------]  70%\n".
+            " 160/200 [======================>-----]  80%\n".
+            " 180/200 [=========================>--]  90%\n".
+            " 200/200 [============================] 100%",
+            stream_get_contents($output->getStream())
+        );
+    }
+
+    public function testNonDecoratedOutputWithClear()
+    {
+        $bar = new ProgressBar($output = $this->getOutputStream(false), 50);
+        $bar->start();
+        $bar->setProgress(25);
+        $bar->clear();
+        $bar->setProgress(50);
+        $bar->finish();
+
+        rewind($output->getStream());
+        $this->assertEquals(
+            "  0/50 [>---------------------------]   0%\n".
+            " 25/50 [==============>-------------]  50%\n".
+            " 50/50 [============================] 100%",
+            stream_get_contents($output->getStream())
+        );
+    }
+
+    public function testNonDecoratedOutputWithoutMax()
+    {
         $bar = new ProgressBar($output = $this->getOutputStream(false));
         $bar->start();
         $bar->advance();
 
         rewind($output->getStream());
-        $this->assertEquals('', stream_get_contents($output->getStream()));
+        $this->assertEquals(
+            "    0 [>---------------------------]\n".
+            "    1 [->--------------------------]",
+            stream_get_contents($output->getStream())
+        );
     }
 
     public function testParallelBars()
@@ -299,10 +429,32 @@ class ProgressBarTest extends \PHPUnit_Framework_TestCase
         );
     }
 
+    public function testWithoutMax()
+    {
+        $output = $this->getOutputStream();
+
+        $bar = new ProgressBar($output);
+        $bar->start();
+        $bar->advance();
+        $bar->advance();
+        $bar->advance();
+        $bar->finish();
+
+        rewind($output->getStream());
+        $this->assertEquals(
+            rtrim($this->generateOutput('    0 [>---------------------------]')).
+            rtrim($this->generateOutput('    1 [->--------------------------]')).
+            rtrim($this->generateOutput('    2 [-->-------------------------]')).
+            rtrim($this->generateOutput('    3 [--->------------------------]')).
+            rtrim($this->generateOutput('    3 [============================]')),
+            stream_get_contents($output->getStream())
+        );
+    }
+
     public function testAddingPlaceholderFormatter()
     {
         ProgressBar::setPlaceholderFormatterDefinition('remaining_steps', function (ProgressBar $bar) {
-            return $bar->getMaxSteps() - $bar->getStep();
+            return $bar->getMaxSteps() - $bar->getProgress();
         });
         $bar = new ProgressBar($output = $this->getOutputStream(), 3);
         $bar->setFormat(' %remaining_steps% [%bar%]');
@@ -432,9 +584,9 @@ class ProgressBarTest extends \PHPUnit_Framework_TestCase
         );
     }
 
-    protected function getOutputStream($decorated = true)
+    protected function getOutputStream($decorated = true, $verbosity = StreamOutput::VERBOSITY_NORMAL)
     {
-        return new StreamOutput(fopen('php://memory', 'r+', false), StreamOutput::VERBOSITY_NORMAL, $decorated);
+        return new StreamOutput(fopen('php://memory', 'r+', false), $verbosity, $decorated);
     }
 
     protected function generateOutput($expected)
diff --git a/vendor/symfony/console/Symfony/Component/Console/Tests/Helper/ProgressHelperTest.php b/vendor/symfony/console/Symfony/Component/Console/Tests/Helper/ProgressHelperTest.php
deleted file mode 100644
index 88adf69..0000000
--- a/vendor/symfony/console/Symfony/Component/Console/Tests/Helper/ProgressHelperTest.php
+++ /dev/null
@@ -1,224 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Console\Tests\Helper;
-
-use Symfony\Component\Console\Helper\ProgressHelper;
-use Symfony\Component\Console\Output\StreamOutput;
-
-class ProgressHelperTest extends \PHPUnit_Framework_TestCase
-{
-    public function testAdvance()
-    {
-        $progress = new ProgressHelper();
-        $progress->start($output = $this->getOutputStream());
-        $progress->advance();
-
-        rewind($output->getStream());
-        $this->assertEquals($this->generateOutput('    1 [->--------------------------]'), stream_get_contents($output->getStream()));
-    }
-
-    public function testAdvanceWithStep()
-    {
-        $progress = new ProgressHelper();
-        $progress->start($output = $this->getOutputStream());
-        $progress->advance(5);
-
-        rewind($output->getStream());
-        $this->assertEquals($this->generateOutput('    5 [----->----------------------]'), stream_get_contents($output->getStream()));
-    }
-
-    public function testAdvanceMultipleTimes()
-    {
-        $progress = new ProgressHelper();
-        $progress->start($output = $this->getOutputStream());
-        $progress->advance(3);
-        $progress->advance(2);
-
-        rewind($output->getStream());
-        $this->assertEquals($this->generateOutput('    3 [--->------------------------]').$this->generateOutput('    5 [----->----------------------]'), stream_get_contents($output->getStream()));
-    }
-
-    public function testCustomizations()
-    {
-        $progress = new ProgressHelper();
-        $progress->setBarWidth(10);
-        $progress->setBarCharacter('_');
-        $progress->setEmptyBarCharacter(' ');
-        $progress->setProgressCharacter('/');
-        $progress->setFormat(' %current%/%max% [%bar%] %percent%%');
-        $progress->start($output = $this->getOutputStream(), 10);
-        $progress->advance();
-
-        rewind($output->getStream());
-        $this->assertEquals($this->generateOutput('  1/10 [_/        ]  10%'), stream_get_contents($output->getStream()));
-    }
-
-    public function testPercent()
-    {
-        $progress = new ProgressHelper();
-        $progress->start($output = $this->getOutputStream(), 50);
-        $progress->display();
-        $progress->advance();
-        $progress->advance();
-
-        rewind($output->getStream());
-        $this->assertEquals($this->generateOutput('  0/50 [>---------------------------]   0%').$this->generateOutput('  1/50 [>---------------------------]   2%').$this->generateOutput('  2/50 [=>--------------------------]   4%'), stream_get_contents($output->getStream()));
-    }
-
-    public function testOverwriteWithShorterLine()
-    {
-        $progress = new ProgressHelper();
-        $progress->setFormat(' %current%/%max% [%bar%] %percent%%');
-        $progress->start($output = $this->getOutputStream(), 50);
-        $progress->display();
-        $progress->advance();
-
-        // set shorter format
-        $progress->setFormat(' %current%/%max% [%bar%]');
-        $progress->advance();
-
-        rewind($output->getStream());
-        $this->assertEquals(
-            $this->generateOutput('  0/50 [>---------------------------]   0%') .
-            $this->generateOutput('  1/50 [>---------------------------]   2%') .
-            $this->generateOutput('  2/50 [=>--------------------------]     '),
-            stream_get_contents($output->getStream())
-        );
-    }
-
-    public function testSetCurrentProgress()
-    {
-        $progress = new ProgressHelper();
-        $progress->start($output = $this->getOutputStream(), 50);
-        $progress->display();
-        $progress->advance();
-        $progress->setCurrent(15);
-        $progress->setCurrent(25);
-
-        rewind($output->getStream());
-        $this->assertEquals(
-            $this->generateOutput('  0/50 [>---------------------------]   0%') .
-            $this->generateOutput('  1/50 [>---------------------------]   2%') .
-            $this->generateOutput(' 15/50 [========>-------------------]  30%') .
-            $this->generateOutput(' 25/50 [==============>-------------]  50%'),
-            stream_get_contents($output->getStream())
-        );
-    }
-
-    /**
-     * @expectedException        \LogicException
-     * @expectedExceptionMessage You must start the progress bar
-     */
-    public function testSetCurrentBeforeStarting()
-    {
-        $progress = new ProgressHelper();
-        $progress->setCurrent(15);
-    }
-
-    /**
-     * @expectedException        \LogicException
-     * @expectedExceptionMessage You can't regress the progress bar
-     */
-    public function testRegressProgress()
-    {
-        $progress = new ProgressHelper();
-        $progress->start($output = $this->getOutputStream(), 50);
-        $progress->setCurrent(15);
-        $progress->setCurrent(10);
-    }
-
-    public function testRedrawFrequency()
-    {
-        $progress = $this->getMock('Symfony\Component\Console\Helper\ProgressHelper', array('display'));
-        $progress->expects($this->exactly(4))
-                 ->method('display');
-
-        $progress->setRedrawFrequency(2);
-
-        $progress->start($output = $this->getOutputStream(), 6);
-        $progress->setCurrent(1);
-        $progress->advance(2);
-        $progress->advance(2);
-        $progress->advance(1);
-    }
-
-    public function testMultiByteSupport()
-    {
-        if (!function_exists('mb_strlen') || (false === $encoding = mb_detect_encoding('■'))) {
-            $this->markTestSkipped('The mbstring extension is needed for multi-byte support');
-        }
-
-        $progress = new ProgressHelper();
-        $progress->start($output = $this->getOutputStream());
-        $progress->setBarCharacter('■');
-        $progress->advance(3);
-
-        rewind($output->getStream());
-        $this->assertEquals($this->generateOutput('    3 [■■■>------------------------]'), stream_get_contents($output->getStream()));
-    }
-
-    public function testClear()
-    {
-        $progress = new ProgressHelper();
-        $progress->start($output = $this->getOutputStream(), 50);
-        $progress->setCurrent(25);
-        $progress->clear();
-
-        rewind($output->getStream());
-        $this->assertEquals(
-            $this->generateOutput(' 25/50 [==============>-------------]  50%') . $this->generateOutput(''),
-            stream_get_contents($output->getStream())
-        );
-    }
-
-    public function testPercentNotHundredBeforeComplete()
-    {
-        $progress = new ProgressHelper();
-        $progress->start($output = $this->getOutputStream(), 200);
-        $progress->display();
-        $progress->advance(199);
-        $progress->advance();
-
-        rewind($output->getStream());
-        $this->assertEquals($this->generateOutput('   0/200 [>---------------------------]   0%').$this->generateOutput(' 199/200 [===========================>]  99%').$this->generateOutput(' 200/200 [============================] 100%'), stream_get_contents($output->getStream()));
-    }
-
-    public function testNonDecoratedOutput()
-    {
-        $progress = new ProgressHelper();
-        $progress->start($output = $this->getOutputStream(false));
-        $progress->advance();
-
-        rewind($output->getStream());
-        $this->assertEquals('', stream_get_contents($output->getStream()));
-    }
-
-    protected function getOutputStream($decorated = true)
-    {
-        return new StreamOutput(fopen('php://memory', 'r+', false), StreamOutput::VERBOSITY_NORMAL, $decorated);
-    }
-
-    protected $lastMessagesLength;
-
-    protected function generateOutput($expected)
-    {
-        $expectedout = $expected;
-
-        if ($this->lastMessagesLength !== null) {
-            $expectedout = str_pad($expected, $this->lastMessagesLength, "\x20", STR_PAD_RIGHT);
-        }
-
-        $this->lastMessagesLength = strlen($expectedout);
-
-        return "\x0D".$expectedout;
-    }
-}
diff --git a/vendor/symfony/console/Symfony/Component/Console/Tests/Helper/QuestionHelperTest.php b/vendor/symfony/console/Symfony/Component/Console/Tests/Helper/QuestionHelperTest.php
index bba2537..e5499fc 100644
--- a/vendor/symfony/console/Symfony/Component/Console/Tests/Helper/QuestionHelperTest.php
+++ b/vendor/symfony/console/Symfony/Component/Console/Tests/Helper/QuestionHelperTest.php
@@ -19,6 +19,9 @@ use Symfony\Component\Console\Question\ChoiceQuestion;
 use Symfony\Component\Console\Question\ConfirmationQuestion;
 use Symfony\Component\Console\Question\Question;
 
+/**
+ * @group tty
+ */
 class QuestionHelperTest extends \PHPUnit_Framework_TestCase
 {
     public function testAskChoice()
@@ -125,12 +128,9 @@ class QuestionHelperTest extends \PHPUnit_Framework_TestCase
         $this->assertEquals('FooBundle', $dialog->ask($this->createInputInterfaceMock(), $this->createOutputInterface(), $question));
     }
 
-    /**
-     * @group tty
-     */
     public function testAskHiddenResponse()
     {
-        if (defined('PHP_WINDOWS_VERSION_BUILD')) {
+        if ('\\' === DIRECTORY_SEPARATOR) {
             $this->markTestSkipped('This test is not supported on Windows');
         }
 
diff --git a/vendor/symfony/console/Symfony/Component/Console/Tests/Helper/TableHelperTest.php b/vendor/symfony/console/Symfony/Component/Console/Tests/Helper/TableHelperTest.php
deleted file mode 100644
index f3cda0d..0000000
--- a/vendor/symfony/console/Symfony/Component/Console/Tests/Helper/TableHelperTest.php
+++ /dev/null
@@ -1,294 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Console\Tests\Helper;
-
-use Symfony\Component\Console\Helper\TableHelper;
-use Symfony\Component\Console\Output\StreamOutput;
-
-class TableHelperTest extends \PHPUnit_Framework_TestCase
-{
-    protected $stream;
-
-    protected function setUp()
-    {
-        $this->stream = fopen('php://memory', 'r+');
-    }
-
-    protected function tearDown()
-    {
-        fclose($this->stream);
-        $this->stream = null;
-    }
-
-    /**
-     * @dataProvider testRenderProvider
-     */
-    public function testRender($headers, $rows, $layout, $expected)
-    {
-        $table = new TableHelper();
-        $table
-            ->setHeaders($headers)
-            ->setRows($rows)
-            ->setLayout($layout)
-        ;
-        $table->render($output = $this->getOutputStream());
-
-        $this->assertEquals($expected, $this->getOutputContent($output));
-    }
-
-    /**
-     * @dataProvider testRenderProvider
-     */
-    public function testRenderAddRows($headers, $rows, $layout, $expected)
-    {
-        $table = new TableHelper();
-        $table
-            ->setHeaders($headers)
-            ->addRows($rows)
-            ->setLayout($layout)
-        ;
-        $table->render($output = $this->getOutputStream());
-
-        $this->assertEquals($expected, $this->getOutputContent($output));
-    }
-
-    /**
-     * @dataProvider testRenderProvider
-     */
-    public function testRenderAddRowsOneByOne($headers, $rows, $layout, $expected)
-    {
-        $table = new TableHelper();
-        $table
-            ->setHeaders($headers)
-            ->setLayout($layout)
-        ;
-        foreach ($rows as $row) {
-            $table->addRow($row);
-        }
-        $table->render($output = $this->getOutputStream());
-
-        $this->assertEquals($expected, $this->getOutputContent($output));
-    }
-
-    public function testRenderProvider()
-    {
-        $books = array(
-            array('99921-58-10-7', 'Divine Comedy', 'Dante Alighieri'),
-            array('9971-5-0210-0', 'A Tale of Two Cities', 'Charles Dickens'),
-            array('960-425-059-0', 'The Lord of the Rings', 'J. R. R. Tolkien'),
-            array('80-902734-1-6', 'And Then There Were None', 'Agatha Christie'),
-        );
-
-        return array(
-            array(
-                array('ISBN', 'Title', 'Author'),
-                $books,
-                TableHelper::LAYOUT_DEFAULT,
-<<<TABLE
-+---------------+--------------------------+------------------+
-| ISBN          | Title                    | Author           |
-+---------------+--------------------------+------------------+
-| 99921-58-10-7 | Divine Comedy            | Dante Alighieri  |
-| 9971-5-0210-0 | A Tale of Two Cities     | Charles Dickens  |
-| 960-425-059-0 | The Lord of the Rings    | J. R. R. Tolkien |
-| 80-902734-1-6 | And Then There Were None | Agatha Christie  |
-+---------------+--------------------------+------------------+
-
-TABLE
-            ),
-            array(
-                array('ISBN', 'Title', 'Author'),
-                $books,
-                TableHelper::LAYOUT_COMPACT,
-<<<TABLE
- ISBN          Title                    Author           
- 99921-58-10-7 Divine Comedy            Dante Alighieri  
- 9971-5-0210-0 A Tale of Two Cities     Charles Dickens  
- 960-425-059-0 The Lord of the Rings    J. R. R. Tolkien 
- 80-902734-1-6 And Then There Were None Agatha Christie  
-
-TABLE
-            ),
-            array(
-                array('ISBN', 'Title', 'Author'),
-                $books,
-                TableHelper::LAYOUT_BORDERLESS,
-<<<TABLE
- =============== ========================== ================== 
-  ISBN            Title                      Author            
- =============== ========================== ================== 
-  99921-58-10-7   Divine Comedy              Dante Alighieri   
-  9971-5-0210-0   A Tale of Two Cities       Charles Dickens   
-  960-425-059-0   The Lord of the Rings      J. R. R. Tolkien  
-  80-902734-1-6   And Then There Were None   Agatha Christie   
- =============== ========================== ================== 
-
-TABLE
-            ),
-            array(
-                array('ISBN', 'Title'),
-                array(
-                    array('99921-58-10-7', 'Divine Comedy', 'Dante Alighieri'),
-                    array('9971-5-0210-0'),
-                    array('960-425-059-0', 'The Lord of the Rings', 'J. R. R. Tolkien'),
-                    array('80-902734-1-6', 'And Then There Were None', 'Agatha Christie'),
-                ),
-                TableHelper::LAYOUT_DEFAULT,
-<<<TABLE
-+---------------+--------------------------+------------------+
-| ISBN          | Title                    |                  |
-+---------------+--------------------------+------------------+
-| 99921-58-10-7 | Divine Comedy            | Dante Alighieri  |
-| 9971-5-0210-0 |                          |                  |
-| 960-425-059-0 | The Lord of the Rings    | J. R. R. Tolkien |
-| 80-902734-1-6 | And Then There Were None | Agatha Christie  |
-+---------------+--------------------------+------------------+
-
-TABLE
-            ),
-            array(
-                array(),
-                array(
-                    array('99921-58-10-7', 'Divine Comedy', 'Dante Alighieri'),
-                    array('9971-5-0210-0'),
-                    array('960-425-059-0', 'The Lord of the Rings', 'J. R. R. Tolkien'),
-                    array('80-902734-1-6', 'And Then There Were None', 'Agatha Christie'),
-                ),
-                TableHelper::LAYOUT_DEFAULT,
-<<<TABLE
-+---------------+--------------------------+------------------+
-| 99921-58-10-7 | Divine Comedy            | Dante Alighieri  |
-| 9971-5-0210-0 |                          |                  |
-| 960-425-059-0 | The Lord of the Rings    | J. R. R. Tolkien |
-| 80-902734-1-6 | And Then There Were None | Agatha Christie  |
-+---------------+--------------------------+------------------+
-
-TABLE
-            ),
-            array(
-                array('ISBN', 'Title', 'Author'),
-                array(
-                    array("99921-58-10-7", "Divine\nComedy", "Dante Alighieri"),
-                    array("9971-5-0210-2", "Harry Potter\nand the Chamber of Secrets", "Rowling\nJoanne K."),
-                    array("9971-5-0210-2", "Harry Potter\nand the Chamber of Secrets", "Rowling\nJoanne K."),
-                    array("960-425-059-0", "The Lord of the Rings", "J. R. R.\nTolkien"),
-                ),
-                TableHelper::LAYOUT_DEFAULT,
-<<<TABLE
-+---------------+----------------------------+-----------------+
-| ISBN          | Title                      | Author          |
-+---------------+----------------------------+-----------------+
-| 99921-58-10-7 | Divine                     | Dante Alighieri |
-|               | Comedy                     |                 |
-| 9971-5-0210-2 | Harry Potter               | Rowling         |
-|               | and the Chamber of Secrets | Joanne K.       |
-| 9971-5-0210-2 | Harry Potter               | Rowling         |
-|               | and the Chamber of Secrets | Joanne K.       |
-| 960-425-059-0 | The Lord of the Rings      | J. R. R.        |
-|               |                            | Tolkien         |
-+---------------+----------------------------+-----------------+
-
-TABLE
-            ),
-            array(
-                array('ISBN', 'Title'),
-                array(),
-                TableHelper::LAYOUT_DEFAULT,
-<<<TABLE
-+------+-------+
-| ISBN | Title |
-+------+-------+
-
-TABLE
-            ),
-            array(
-                array(),
-                array(),
-                TableHelper::LAYOUT_DEFAULT,
-                '',
-            ),
-            'Cell text with tags used for Output styling' => array(
-                array('ISBN', 'Title', 'Author'),
-                array(
-                    array('<info>99921-58-10-7</info>', '<error>Divine Comedy</error>', '<fg=blue;bg=white>Dante Alighieri</fg=blue;bg=white>'),
-                    array('9971-5-0210-0', 'A Tale of Two Cities', '<info>Charles Dickens</>'),
-                ),
-                TableHelper::LAYOUT_DEFAULT,
-<<<TABLE
-+---------------+----------------------+-----------------+
-| ISBN          | Title                | Author          |
-+---------------+----------------------+-----------------+
-| 99921-58-10-7 | Divine Comedy        | Dante Alighieri |
-| 9971-5-0210-0 | A Tale of Two Cities | Charles Dickens |
-+---------------+----------------------+-----------------+
-
-TABLE
-            ),
-            'Cell text with tags not used for Output styling' => array(
-                array('ISBN', 'Title', 'Author'),
-                array(
-                    array('<strong>99921-58-10-700</strong>', '<f>Divine Com</f>', 'Dante Alighieri'),
-                    array('9971-5-0210-0', 'A Tale of Two Cities', 'Charles Dickens'),
-                ),
-                TableHelper::LAYOUT_DEFAULT,
-<<<TABLE
-+----------------------------------+----------------------+-----------------+
-| ISBN                             | Title                | Author          |
-+----------------------------------+----------------------+-----------------+
-| <strong>99921-58-10-700</strong> | <f>Divine Com</f>    | Dante Alighieri |
-| 9971-5-0210-0                    | A Tale of Two Cities | Charles Dickens |
-+----------------------------------+----------------------+-----------------+
-
-TABLE
-            ),
-        );
-    }
-
-    public function testRenderMultiByte()
-    {
-        if (!function_exists('mb_strlen')) {
-            $this->markTestSkipped('The "mbstring" extension is not available');
-        }
-
-        $table = new TableHelper();
-        $table
-            ->setHeaders(array('■■'))
-            ->setRows(array(array(1234)))
-            ->setLayout(TableHelper::LAYOUT_DEFAULT)
-        ;
-        $table->render($output = $this->getOutputStream());
-
-        $expected =
-<<<TABLE
-+------+
-| ■■   |
-+------+
-| 1234 |
-+------+
-
-TABLE;
-
-        $this->assertEquals($expected, $this->getOutputContent($output));
-    }
-
-    protected function getOutputStream()
-    {
-        return new StreamOutput($this->stream, StreamOutput::VERBOSITY_NORMAL, false);
-    }
-
-    protected function getOutputContent(StreamOutput $output)
-    {
-        rewind($output->getStream());
-
-        return str_replace(PHP_EOL, "\n", stream_get_contents($output->getStream()));
-    }
-}
diff --git a/vendor/symfony/console/Symfony/Component/Console/Tests/Input/ArgvInputTest.php b/vendor/symfony/console/Symfony/Component/Console/Tests/Input/ArgvInputTest.php
index 507990d..bdbe354 100644
--- a/vendor/symfony/console/Symfony/Component/Console/Tests/Input/ArgvInputTest.php
+++ b/vendor/symfony/console/Symfony/Component/Console/Tests/Input/ArgvInputTest.php
@@ -57,92 +57,92 @@ class ArgvInputTest extends \PHPUnit_Framework_TestCase
                 array('cli.php', '--foo'),
                 array(new InputOption('foo')),
                 array('foo' => true),
-                '->parse() parses long options without a value'
+                '->parse() parses long options without a value',
             ),
             array(
                 array('cli.php', '--foo=bar'),
                 array(new InputOption('foo', 'f', InputOption::VALUE_REQUIRED)),
                 array('foo' => 'bar'),
-                '->parse() parses long options with a required value (with a = separator)'
+                '->parse() parses long options with a required value (with a = separator)',
             ),
             array(
                 array('cli.php', '--foo', 'bar'),
                 array(new InputOption('foo', 'f', InputOption::VALUE_REQUIRED)),
                 array('foo' => 'bar'),
-                '->parse() parses long options with a required value (with a space separator)'
+                '->parse() parses long options with a required value (with a space separator)',
             ),
             array(
                 array('cli.php', '-f'),
                 array(new InputOption('foo', 'f')),
                 array('foo' => true),
-                '->parse() parses short options without a value'
+                '->parse() parses short options without a value',
             ),
             array(
                 array('cli.php', '-fbar'),
                 array(new InputOption('foo', 'f', InputOption::VALUE_REQUIRED)),
                 array('foo' => 'bar'),
-                '->parse() parses short options with a required value (with no separator)'
+                '->parse() parses short options with a required value (with no separator)',
             ),
             array(
                 array('cli.php', '-f', 'bar'),
                 array(new InputOption('foo', 'f', InputOption::VALUE_REQUIRED)),
                 array('foo' => 'bar'),
-                '->parse() parses short options with a required value (with a space separator)'
+                '->parse() parses short options with a required value (with a space separator)',
             ),
             array(
                 array('cli.php', '-f', ''),
                 array(new InputOption('foo', 'f', InputOption::VALUE_OPTIONAL)),
                 array('foo' => ''),
-                '->parse() parses short options with an optional empty value'
+                '->parse() parses short options with an optional empty value',
             ),
             array(
                 array('cli.php', '-f', '', 'foo'),
                 array(new InputArgument('name'), new InputOption('foo', 'f', InputOption::VALUE_OPTIONAL)),
                 array('foo' => ''),
-                '->parse() parses short options with an optional empty value followed by an argument'
+                '->parse() parses short options with an optional empty value followed by an argument',
             ),
             array(
                 array('cli.php', '-f', '', '-b'),
                 array(new InputOption('foo', 'f', InputOption::VALUE_OPTIONAL), new InputOption('bar', 'b')),
                 array('foo' => '', 'bar' => true),
-                '->parse() parses short options with an optional empty value followed by an option'
+                '->parse() parses short options with an optional empty value followed by an option',
             ),
             array(
                 array('cli.php', '-f', '-b', 'foo'),
                 array(new InputArgument('name'), new InputOption('foo', 'f', InputOption::VALUE_OPTIONAL), new InputOption('bar', 'b')),
                 array('foo' => null, 'bar' => true),
-                '->parse() parses short options with an optional value which is not present'
+                '->parse() parses short options with an optional value which is not present',
             ),
             array(
                 array('cli.php', '-fb'),
                 array(new InputOption('foo', 'f'), new InputOption('bar', 'b')),
                 array('foo' => true, 'bar' => true),
-                '->parse() parses short options when they are aggregated as a single one'
+                '->parse() parses short options when they are aggregated as a single one',
             ),
             array(
                 array('cli.php', '-fb', 'bar'),
                 array(new InputOption('foo', 'f'), new InputOption('bar', 'b', InputOption::VALUE_REQUIRED)),
                 array('foo' => true, 'bar' => 'bar'),
-                '->parse() parses short options when they are aggregated as a single one and the last one has a required value'
+                '->parse() parses short options when they are aggregated as a single one and the last one has a required value',
             ),
             array(
                 array('cli.php', '-fb', 'bar'),
                 array(new InputOption('foo', 'f'), new InputOption('bar', 'b', InputOption::VALUE_OPTIONAL)),
                 array('foo' => true, 'bar' => 'bar'),
-                '->parse() parses short options when they are aggregated as a single one and the last one has an optional value'
+                '->parse() parses short options when they are aggregated as a single one and the last one has an optional value',
             ),
             array(
                 array('cli.php', '-fbbar'),
                 array(new InputOption('foo', 'f'), new InputOption('bar', 'b', InputOption::VALUE_OPTIONAL)),
                 array('foo' => true, 'bar' => 'bar'),
-                '->parse() parses short options when they are aggregated as a single one and the last one has an optional value with no separator'
+                '->parse() parses short options when they are aggregated as a single one and the last one has an optional value with no separator',
             ),
             array(
                 array('cli.php', '-fbbar'),
                 array(new InputOption('foo', 'f', InputOption::VALUE_OPTIONAL), new InputOption('bar', 'b', InputOption::VALUE_OPTIONAL)),
                 array('foo' => 'bbar', 'bar' => null),
-                '->parse() parses short options when they are aggregated as a single one and one of them takes a value'
-            )
+                '->parse() parses short options when they are aggregated as a single one and one of them takes a value',
+            ),
         );
     }
 
@@ -163,43 +163,43 @@ class ArgvInputTest extends \PHPUnit_Framework_TestCase
             array(
                 array('cli.php', '--foo'),
                 new InputDefinition(array(new InputOption('foo', 'f', InputOption::VALUE_REQUIRED))),
-                'The "--foo" option requires a value.'
+                'The "--foo" option requires a value.',
             ),
             array(
                 array('cli.php', '-f'),
                 new InputDefinition(array(new InputOption('foo', 'f', InputOption::VALUE_REQUIRED))),
-                'The "--foo" option requires a value.'
+                'The "--foo" option requires a value.',
             ),
             array(
                 array('cli.php', '-ffoo'),
                 new InputDefinition(array(new InputOption('foo', 'f', InputOption::VALUE_NONE))),
-                'The "-o" option does not exist.'
+                'The "-o" option does not exist.',
             ),
             array(
                 array('cli.php', '--foo=bar'),
                 new InputDefinition(array(new InputOption('foo', 'f', InputOption::VALUE_NONE))),
-                'The "--foo" option does not accept a value.'
+                'The "--foo" option does not accept a value.',
             ),
             array(
                 array('cli.php', 'foo', 'bar'),
                 new InputDefinition(),
-                'Too many arguments.'
+                'Too many arguments.',
             ),
             array(
                 array('cli.php', '--foo'),
                 new InputDefinition(),
-                'The "--foo" option does not exist.'
+                'The "--foo" option does not exist.',
             ),
             array(
                 array('cli.php', '-f'),
                 new InputDefinition(),
-                'The "-f" option does not exist.'
+                'The "-f" option does not exist.',
             ),
             array(
                 array('cli.php', '-1'),
                 new InputDefinition(array(new InputArgument('number'))),
-                'The "-1" option does not exist.'
-            )
+                'The "-1" option does not exist.',
+            ),
         );
     }
 
@@ -304,6 +304,7 @@ class ArgvInputTest extends \PHPUnit_Framework_TestCase
             array(array('app/console', 'foo:bar', '-e', 'dev'), array('-e', '--env'), 'dev'),
             array(array('app/console', 'foo:bar', '--env=dev'), array('-e', '--env'), 'dev'),
             array(array('app/console', 'foo:bar', '--env=dev', '--en=1'), array('--en'), '1'),
+            array(array('app/console', 'foo:bar', '--env=dev', '', '--en=1'), array('--en'), '1'),
         );
     }
 
diff --git a/vendor/symfony/console/Symfony/Component/Console/Tests/Input/ArrayInputTest.php b/vendor/symfony/console/Symfony/Component/Console/Tests/Input/ArrayInputTest.php
index 73f2e33..7cf28e8 100644
--- a/vendor/symfony/console/Symfony/Component/Console/Tests/Input/ArrayInputTest.php
+++ b/vendor/symfony/console/Symfony/Component/Console/Tests/Input/ArrayInputTest.php
@@ -62,26 +62,26 @@ class ArrayInputTest extends \PHPUnit_Framework_TestCase
                 array('--foo' => 'bar'),
                 array(new InputOption('foo')),
                 array('foo' => 'bar'),
-                '->parse() parses long options'
+                '->parse() parses long options',
             ),
             array(
                 array('--foo' => 'bar'),
                 array(new InputOption('foo', 'f', InputOption::VALUE_OPTIONAL, '', 'default')),
                 array('foo' => 'bar'),
-                '->parse() parses long options with a default value'
+                '->parse() parses long options with a default value',
             ),
             array(
                 array('--foo' => null),
                 array(new InputOption('foo', 'f', InputOption::VALUE_OPTIONAL, '', 'default')),
                 array('foo' => 'default'),
-                '->parse() parses long options with a default value'
+                '->parse() parses long options with a default value',
             ),
             array(
                 array('-f' => 'bar'),
                 array(new InputOption('foo', 'f')),
                 array('foo' => 'bar'),
-                '->parse() parses short options'
-            )
+                '->parse() parses short options',
+            ),
         );
     }
 
@@ -101,23 +101,23 @@ class ArrayInputTest extends \PHPUnit_Framework_TestCase
             array(
                 array('foo' => 'foo'),
                 new InputDefinition(array(new InputArgument('name'))),
-                'The "foo" argument does not exist.'
+                'The "foo" argument does not exist.',
             ),
             array(
                 array('--foo' => null),
                 new InputDefinition(array(new InputOption('foo', 'f', InputOption::VALUE_REQUIRED))),
-                'The "--foo" option requires a value.'
+                'The "--foo" option requires a value.',
             ),
             array(
                 array('--foo' => 'foo'),
                 new InputDefinition(),
-                'The "--foo" option does not exist.'
+                'The "--foo" option does not exist.',
             ),
             array(
                 array('-o' => 'foo'),
                 new InputDefinition(),
-                'The "-o" option does not exist.'
-            )
+                'The "-o" option does not exist.',
+            ),
         );
     }
 
diff --git a/vendor/symfony/console/Symfony/Component/Console/Tests/Input/InputArgumentTest.php b/vendor/symfony/console/Symfony/Component/Console/Tests/Input/InputArgumentTest.php
index 3bfc796..cfb37cd 100644
--- a/vendor/symfony/console/Symfony/Component/Console/Tests/Input/InputArgumentTest.php
+++ b/vendor/symfony/console/Symfony/Component/Console/Tests/Input/InputArgumentTest.php
@@ -50,7 +50,7 @@ class InputArgumentTest extends \PHPUnit_Framework_TestCase
     {
         return array(
             array('ANOTHER_ONE'),
-            array(-1)
+            array(-1),
         );
     }
 
diff --git a/vendor/symfony/console/Symfony/Component/Console/Tests/Input/InputDefinitionTest.php b/vendor/symfony/console/Symfony/Component/Console/Tests/Input/InputDefinitionTest.php
index 5cf5011..9e3e982 100644
--- a/vendor/symfony/console/Symfony/Component/Console/Tests/Input/InputDefinitionTest.php
+++ b/vendor/symfony/console/Symfony/Component/Console/Tests/Input/InputDefinitionTest.php
@@ -373,8 +373,10 @@ class InputDefinitionTest extends \PHPUnit_Framework_TestCase
         $this->assertEquals('foo1 ... [fooN]', $definition->getSynopsis(), '->getSynopsis() returns a synopsis of arguments and options');
     }
 
-    public function testAsText()
+    public function testLegacyAsText()
     {
+        $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED);
+
         $definition = new InputDefinition(array(
             new InputArgument('foo', InputArgument::OPTIONAL, 'The foo argument'),
             new InputArgument('baz', InputArgument::OPTIONAL, 'The baz argument', true),
@@ -388,8 +390,10 @@ class InputDefinitionTest extends \PHPUnit_Framework_TestCase
         $this->assertStringEqualsFile(self::$fixtures.'/definition_astext.txt', $definition->asText(), '->asText() returns a textual representation of the InputDefinition');
     }
 
-    public function testAsXml()
+    public function testLegacyAsXml()
     {
+        $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED);
+
         $definition = new InputDefinition(array(
             new InputArgument('foo', InputArgument::OPTIONAL, 'The foo argument'),
             new InputArgument('baz', InputArgument::OPTIONAL, 'The baz argument', true),
@@ -398,7 +402,7 @@ class InputDefinitionTest extends \PHPUnit_Framework_TestCase
             new InputOption('baz', null, InputOption::VALUE_OPTIONAL, 'The baz option', false),
             new InputOption('bar', 'b', InputOption::VALUE_OPTIONAL, 'The bar option', 'bar'),
         ));
-        $this->assertXmlStringEqualsXmlFile(self::$fixtures.'/definition_asxml.txt', $definition->asXml(), '->asText() returns a textual representation of the InputDefinition');
+        $this->assertXmlStringEqualsXmlFile(self::$fixtures.'/definition_asxml.txt', $definition->asXml(), '->asXml() returns an XML representation of the InputDefinition');
     }
 
     protected function initializeArguments()
diff --git a/vendor/symfony/console/Symfony/Component/Console/Tests/Input/InputOptionTest.php b/vendor/symfony/console/Symfony/Component/Console/Tests/Input/InputOptionTest.php
index 5817e8f..53ce1df 100644
--- a/vendor/symfony/console/Symfony/Component/Console/Tests/Input/InputOptionTest.php
+++ b/vendor/symfony/console/Symfony/Component/Console/Tests/Input/InputOptionTest.php
@@ -86,7 +86,7 @@ class InputOptionTest extends \PHPUnit_Framework_TestCase
     {
         return array(
             array('ANOTHER_ONE'),
-            array(-1)
+            array(-1),
         );
     }
 
diff --git a/vendor/symfony/console/Symfony/Component/Console/Tests/Input/StringInputTest.php b/vendor/symfony/console/Symfony/Component/Console/Tests/Input/StringInputTest.php
index b284320..a79a718 100644
--- a/vendor/symfony/console/Symfony/Component/Console/Tests/Input/StringInputTest.php
+++ b/vendor/symfony/console/Symfony/Component/Console/Tests/Input/StringInputTest.php
@@ -39,8 +39,16 @@ class StringInputTest extends \PHPUnit_Framework_TestCase
         $input = new StringInput('--foo=bar');
         $input->bind($definition);
         $this->assertEquals('bar', $input->getOption('foo'));
+    }
+
+    public function testLegacyInputOptionDefinitionInConstructor()
+    {
+        $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED);
+
+        $definition = new InputDefinition(
+            array(new InputOption('foo', null, InputOption::VALUE_REQUIRED))
+        );
 
-        // definition in constructor
         $input = new StringInput('--foo=bar', $definition);
         $this->assertEquals('bar', $input->getOption('foo'));
     }
diff --git a/vendor/symfony/console/Symfony/Component/Console/Tests/Logger/ConsoleLoggerTest.php b/vendor/symfony/console/Symfony/Component/Console/Tests/Logger/ConsoleLoggerTest.php
index 2b9f5c7..1abc363 100644
--- a/vendor/symfony/console/Symfony/Component/Console/Tests/Logger/ConsoleLoggerTest.php
+++ b/vendor/symfony/console/Symfony/Component/Console/Tests/Logger/ConsoleLoggerTest.php
@@ -44,7 +44,7 @@ class ConsoleLoggerTest extends LoggerInterfaceTest
             LogLevel::WARNING => OutputInterface::VERBOSITY_NORMAL,
             LogLevel::NOTICE => OutputInterface::VERBOSITY_NORMAL,
             LogLevel::INFO => OutputInterface::VERBOSITY_NORMAL,
-            LogLevel::DEBUG => OutputInterface::VERBOSITY_NORMAL
+            LogLevel::DEBUG => OutputInterface::VERBOSITY_NORMAL,
         ));
     }
 
diff --git a/vendor/symfony/console/Symfony/Component/Console/composer.json b/vendor/symfony/console/Symfony/Component/Console/composer.json
index e7a8e2f..4a106d7 100644
--- a/vendor/symfony/console/Symfony/Component/Console/composer.json
+++ b/vendor/symfony/console/Symfony/Component/Console/composer.json
@@ -20,10 +20,12 @@
     },
     "require-dev": {
         "symfony/event-dispatcher": "~2.1",
+        "symfony/process": "~2.1",
         "psr/log": "~1.0"
     },
     "suggest": {
         "symfony/event-dispatcher": "",
+        "symfony/process": "",
         "psr/log": "For using the console logger"
     },
     "autoload": {
@@ -33,7 +35,7 @@
     "minimum-stability": "dev",
     "extra": {
         "branch-alias": {
-            "dev-master": "2.5-dev"
+            "dev-master": "2.6-dev"
         }
     }
 }
diff --git a/vendor/symfony/console/Symfony/Component/Console/phpunit.xml.dist b/vendor/symfony/console/Symfony/Component/Console/phpunit.xml.dist
index 13e0f33..f4831ec 100644
--- a/vendor/symfony/console/Symfony/Component/Console/phpunit.xml.dist
+++ b/vendor/symfony/console/Symfony/Component/Console/phpunit.xml.dist
@@ -6,6 +6,10 @@
          colors="true"
          bootstrap="vendor/autoload.php"
 >
+    <php>
+        <!-- Silence E_USER_DEPRECATED (-16385 == -1 & ~E_USER_DEPRECATED) -->
+        <ini name="error_reporting" value="-16385"/>
+    </php>
     <testsuites>
         <testsuite name="Symfony Console Component Test Suite">
             <directory>./Tests/</directory>
diff --git a/vendor/symfony/finder/Symfony/Component/Finder/Adapter/AbstractAdapter.php b/vendor/symfony/finder/Symfony/Component/Finder/Adapter/AbstractAdapter.php
index bdb04f5..4ddd913 100644
--- a/vendor/symfony/finder/Symfony/Component/Finder/Adapter/AbstractAdapter.php
+++ b/vendor/symfony/finder/Symfony/Component/Finder/Adapter/AbstractAdapter.php
@@ -19,20 +19,20 @@ namespace Symfony\Component\Finder\Adapter;
 abstract class AbstractAdapter implements AdapterInterface
 {
     protected $followLinks = false;
-    protected $mode        = 0;
-    protected $minDepth    = 0;
-    protected $maxDepth    = PHP_INT_MAX;
-    protected $exclude     = array();
-    protected $names       = array();
-    protected $notNames    = array();
-    protected $contains    = array();
+    protected $mode = 0;
+    protected $minDepth = 0;
+    protected $maxDepth = PHP_INT_MAX;
+    protected $exclude = array();
+    protected $names = array();
+    protected $notNames = array();
+    protected $contains = array();
     protected $notContains = array();
-    protected $sizes       = array();
-    protected $dates       = array();
-    protected $filters     = array();
-    protected $sort        = false;
-    protected $paths       = array();
-    protected $notPaths    = array();
+    protected $sizes = array();
+    protected $dates = array();
+    protected $filters = array();
+    protected $sort = false;
+    protected $paths = array();
+    protected $notPaths = array();
     protected $ignoreUnreadableDirs = false;
 
     private static $areSupported = array();
@@ -228,9 +228,9 @@ abstract class AbstractAdapter implements AdapterInterface
      * isSupported in the adapters as the generic implementation provides a cache
      * layer.
      *
-     * @see isSupported
+     * @see isSupported()
      *
-     * @return bool    Whether the adapter is supported
+     * @return bool Whether the adapter is supported
      */
     abstract protected function canBeUsed();
 }
diff --git a/vendor/symfony/finder/Symfony/Component/Finder/Adapter/AbstractFindAdapter.php b/vendor/symfony/finder/Symfony/Component/Finder/Adapter/AbstractFindAdapter.php
index 7f2a52f..4d73b32 100644
--- a/vendor/symfony/finder/Symfony/Component/Finder/Adapter/AbstractFindAdapter.php
+++ b/vendor/symfony/finder/Symfony/Component/Finder/Adapter/AbstractFindAdapter.php
@@ -216,7 +216,7 @@ abstract class AbstractFindAdapter extends AbstractAdapter
             // Fixes 'not search' regex problems.
             if ($expr->isRegex()) {
                 $regex = $expr->getRegex();
-                $regex->prepend($regex->hasStartFlag() ? $dir.DIRECTORY_SEPARATOR : '.*')->setEndJoker(!$regex->hasEndFlag());
+                $regex->prepend($regex->hasStartFlag() ? preg_quote($dir).DIRECTORY_SEPARATOR : '.*')->setEndJoker(!$regex->hasEndFlag());
             } else {
                 $expr->prepend('*')->append('*');
             }
@@ -247,7 +247,7 @@ abstract class AbstractFindAdapter extends AbstractAdapter
                     $command->add('-size -'.($size->getTarget() + 1).'c');
                     break;
                 case '>=':
-                    $command->add('-size +'. ($size->getTarget() - 1).'c');
+                    $command->add('-size +'.($size->getTarget() - 1).'c');
                     break;
                 case '>':
                     $command->add('-size +'.$size->getTarget().'c');
diff --git a/vendor/symfony/finder/Symfony/Component/Finder/Adapter/AdapterInterface.php b/vendor/symfony/finder/Symfony/Component/Finder/Adapter/AdapterInterface.php
index e25fc3e..bdc3a93 100644
--- a/vendor/symfony/finder/Symfony/Component/Finder/Adapter/AdapterInterface.php
+++ b/vendor/symfony/finder/Symfony/Component/Finder/Adapter/AdapterInterface.php
@@ -17,14 +17,14 @@ namespace Symfony\Component\Finder\Adapter;
 interface AdapterInterface
 {
     /**
-     * @param bool    $followLinks
+     * @param bool $followLinks
      *
      * @return AdapterInterface Current instance
      */
     public function setFollowLinks($followLinks);
 
     /**
-     * @param int     $mode
+     * @param int $mode
      *
      * @return AdapterInterface Current instance
      */
@@ -94,7 +94,7 @@ interface AdapterInterface
     public function setFilters(array $filters);
 
     /**
-     * @param \Closure|int     $sort
+     * @param \Closure|int $sort
      *
      * @return AdapterInterface Current instance
      */
@@ -115,7 +115,7 @@ interface AdapterInterface
     public function setNotPath(array $notPaths);
 
     /**
-     * @param bool    $ignore
+     * @param bool $ignore
      *
      * @return AdapterInterface Current instance
      */
diff --git a/vendor/symfony/finder/Symfony/Component/Finder/Adapter/GnuFindAdapter.php b/vendor/symfony/finder/Symfony/Component/Finder/Adapter/GnuFindAdapter.php
index b72451e..0fbf48f 100644
--- a/vendor/symfony/finder/Symfony/Component/Finder/Adapter/GnuFindAdapter.php
+++ b/vendor/symfony/finder/Symfony/Component/Finder/Adapter/GnuFindAdapter.php
@@ -80,7 +80,7 @@ class GnuFindAdapter extends AbstractFindAdapter
      */
     protected function buildFindCommand(Command $command, $dir)
     {
-      return parent::buildFindCommand($command, $dir)->add('-regextype posix-extended');
+        return parent::buildFindCommand($command, $dir)->add('-regextype posix-extended');
     }
 
     /**
diff --git a/vendor/symfony/finder/Symfony/Component/Finder/Comparator/DateComparator.php b/vendor/symfony/finder/Symfony/Component/Finder/Comparator/DateComparator.php
index 9de444f..8b7746b 100644
--- a/vendor/symfony/finder/Symfony/Component/Finder/Comparator/DateComparator.php
+++ b/vendor/symfony/finder/Symfony/Component/Finder/Comparator/DateComparator.php
@@ -18,7 +18,6 @@ namespace Symfony\Component\Finder\Comparator;
  */
 class DateComparator extends Comparator
 {
-
     /**
      * Constructor.
      *
diff --git a/vendor/symfony/finder/Symfony/Component/Finder/Comparator/NumberComparator.php b/vendor/symfony/finder/Symfony/Component/Finder/Comparator/NumberComparator.php
index 955cc67..c8587dc 100644
--- a/vendor/symfony/finder/Symfony/Component/Finder/Comparator/NumberComparator.php
+++ b/vendor/symfony/finder/Symfony/Component/Finder/Comparator/NumberComparator.php
@@ -27,11 +27,10 @@ namespace Symfony\Component\Finder\Comparator;
  *
  * @author    Fabien Potencier <fabien@symfony.com> PHP port
  * @author    Richard Clamp <richardc@unixbeard.net> Perl version
- *
  * @copyright 2004-2005 Fabien Potencier <fabien@symfony.com>
  * @copyright 2002 Richard Clamp <richardc@unixbeard.net>
  *
- * @see       http://physics.nist.gov/cuu/Units/binary.html
+ * @see http://physics.nist.gov/cuu/Units/binary.html
  */
 class NumberComparator extends Comparator
 {
diff --git a/vendor/symfony/finder/Symfony/Component/Finder/Expression/Expression.php b/vendor/symfony/finder/Symfony/Component/Finder/Expression/Expression.php
index 8559b33..9002607 100644
--- a/vendor/symfony/finder/Symfony/Component/Finder/Expression/Expression.php
+++ b/vendor/symfony/finder/Symfony/Component/Finder/Expression/Expression.php
@@ -17,7 +17,7 @@ namespace Symfony\Component\Finder\Expression;
 class Expression implements ValueInterface
 {
     const TYPE_REGEX = 1;
-    const TYPE_GLOB  = 2;
+    const TYPE_GLOB = 2;
 
     /**
      * @var ValueInterface
diff --git a/vendor/symfony/finder/Symfony/Component/Finder/Expression/Regex.php b/vendor/symfony/finder/Symfony/Component/Finder/Expression/Regex.php
index 2e8f507..a249fc2 100644
--- a/vendor/symfony/finder/Symfony/Component/Finder/Expression/Regex.php
+++ b/vendor/symfony/finder/Symfony/Component/Finder/Expression/Regex.php
@@ -17,10 +17,10 @@ namespace Symfony\Component\Finder\Expression;
 class Regex implements ValueInterface
 {
     const START_FLAG = '^';
-    const END_FLAG   = '$';
-    const BOUNDARY   = '~';
-    const JOKER      = '.*';
-    const ESCAPING   = '\\';
+    const END_FLAG = '$';
+    const BOUNDARY = '~';
+    const JOKER = '.*';
+    const ESCAPING = '\\';
 
     /**
      * @var string
@@ -63,7 +63,7 @@ class Regex implements ValueInterface
     {
         if (preg_match('/^(.{3,}?)([imsxuADU]*)$/', $expr, $m)) {
             $start = substr($m[1], 0, 1);
-            $end   = substr($m[1], -1);
+            $end = substr($m[1], -1);
 
             if (
                 ($start === $end && !preg_match('/[*?[:alnum:] \\\\]/', $start))
@@ -178,7 +178,7 @@ class Regex implements ValueInterface
     public function addOption($option)
     {
         if (!$this->hasOption($option)) {
-            $this->options.= $option;
+            $this->options .= $option;
         }
 
         return $this;
diff --git a/vendor/symfony/finder/Symfony/Component/Finder/Finder.php b/vendor/symfony/finder/Symfony/Component/Finder/Finder.php
index f8fa71f..91a2992 100644
--- a/vendor/symfony/finder/Symfony/Component/Finder/Finder.php
+++ b/vendor/symfony/finder/Symfony/Component/Finder/Finder.php
@@ -15,7 +15,17 @@ use Symfony\Component\Finder\Adapter\AdapterInterface;
 use Symfony\Component\Finder\Adapter\GnuFindAdapter;
 use Symfony\Component\Finder\Adapter\BsdFindAdapter;
 use Symfony\Component\Finder\Adapter\PhpAdapter;
+use Symfony\Component\Finder\Comparator\DateComparator;
+use Symfony\Component\Finder\Comparator\NumberComparator;
 use Symfony\Component\Finder\Exception\ExceptionInterface;
+use Symfony\Component\Finder\Iterator\CustomFilterIterator;
+use Symfony\Component\Finder\Iterator\DateRangeFilterIterator;
+use Symfony\Component\Finder\Iterator\DepthRangeFilterIterator;
+use Symfony\Component\Finder\Iterator\ExcludeDirectoryFilterIterator;
+use Symfony\Component\Finder\Iterator\FilecontentFilterIterator;
+use Symfony\Component\Finder\Iterator\FilenameFilterIterator;
+use Symfony\Component\Finder\Iterator\SizeRangeFilterIterator;
+use Symfony\Component\Finder\Iterator\SortableIterator;
 
 /**
  * Finder allows to build rules to find files and directories.
@@ -37,24 +47,24 @@ class Finder implements \IteratorAggregate, \Countable
     const IGNORE_VCS_FILES = 1;
     const IGNORE_DOT_FILES = 2;
 
-    private $mode        = 0;
-    private $names       = array();
-    private $notNames    = array();
-    private $exclude     = array();
-    private $filters     = array();
-    private $depths      = array();
-    private $sizes       = array();
+    private $mode = 0;
+    private $names = array();
+    private $notNames = array();
+    private $exclude = array();
+    private $filters = array();
+    private $depths = array();
+    private $sizes = array();
     private $followLinks = false;
-    private $sort        = false;
-    private $ignore      = 0;
-    private $dirs        = array();
-    private $dates       = array();
-    private $iterators   = array();
-    private $contains    = array();
+    private $sort = false;
+    private $ignore = 0;
+    private $dirs = array();
+    private $dates = array();
+    private $iterators = array();
+    private $contains = array();
     private $notContains = array();
-    private $adapters    = array();
-    private $paths       = array();
-    private $notPaths    = array();
+    private $adapters = array();
+    private $paths = array();
+    private $notPaths = array();
     private $ignoreUnreadableDirs = false;
 
     private static $vcsPatterns = array('.svn', '_svn', 'CVS', '_darcs', '.arch-params', '.monotone', '.bzr', '.git', '.hg');
@@ -97,7 +107,7 @@ class Finder implements \IteratorAggregate, \Countable
     public function addAdapter(AdapterInterface $adapter, $priority = 0)
     {
         $this->adapters[$adapter->getName()] = array(
-            'adapter'  => $adapter,
+            'adapter' => $adapter,
             'priority' => $priority,
             'selected' => false,
         );
@@ -202,8 +212,8 @@ class Finder implements \IteratorAggregate, \Countable
      *
      * @return Finder The current Finder instance
      *
-     * @see Symfony\Component\Finder\Iterator\DepthRangeFilterIterator
-     * @see Symfony\Component\Finder\Comparator\NumberComparator
+     * @see DepthRangeFilterIterator
+     * @see NumberComparator
      *
      * @api
      */
@@ -229,8 +239,8 @@ class Finder implements \IteratorAggregate, \Countable
      * @return Finder The current Finder instance
      *
      * @see strtotime
-     * @see Symfony\Component\Finder\Iterator\DateRangeFilterIterator
-     * @see Symfony\Component\Finder\Comparator\DateComparator
+     * @see DateRangeFilterIterator
+     * @see DateComparator
      *
      * @api
      */
@@ -254,7 +264,7 @@ class Finder implements \IteratorAggregate, \Countable
      *
      * @return Finder The current Finder instance
      *
-     * @see Symfony\Component\Finder\Iterator\FilenameFilterIterator
+     * @see FilenameFilterIterator
      *
      * @api
      */
@@ -272,7 +282,7 @@ class Finder implements \IteratorAggregate, \Countable
      *
      * @return Finder The current Finder instance
      *
-     * @see Symfony\Component\Finder\Iterator\FilenameFilterIterator
+     * @see FilenameFilterIterator
      *
      * @api
      */
@@ -295,7 +305,7 @@ class Finder implements \IteratorAggregate, \Countable
      *
      * @return Finder The current Finder instance
      *
-     * @see Symfony\Component\Finder\Iterator\FilecontentFilterIterator
+     * @see FilecontentFilterIterator
      */
     public function contains($pattern)
     {
@@ -316,7 +326,7 @@ class Finder implements \IteratorAggregate, \Countable
      *
      * @return Finder The current Finder instance
      *
-     * @see Symfony\Component\Finder\Iterator\FilecontentFilterIterator
+     * @see FilecontentFilterIterator
      */
     public function notContains($pattern)
     {
@@ -339,7 +349,7 @@ class Finder implements \IteratorAggregate, \Countable
      *
      * @return Finder The current Finder instance
      *
-     * @see Symfony\Component\Finder\Iterator\FilenameFilterIterator
+     * @see FilenameFilterIterator
      */
     public function path($pattern)
     {
@@ -362,7 +372,7 @@ class Finder implements \IteratorAggregate, \Countable
      *
      * @return Finder The current Finder instance
      *
-     * @see Symfony\Component\Finder\Iterator\FilenameFilterIterator
+     * @see FilenameFilterIterator
      */
     public function notPath($pattern)
     {
@@ -382,8 +392,8 @@ class Finder implements \IteratorAggregate, \Countable
      *
      * @return Finder The current Finder instance
      *
-     * @see Symfony\Component\Finder\Iterator\SizeRangeFilterIterator
-     * @see Symfony\Component\Finder\Comparator\NumberComparator
+     * @see SizeRangeFilterIterator
+     * @see NumberComparator
      *
      * @api
      */
@@ -401,7 +411,7 @@ class Finder implements \IteratorAggregate, \Countable
      *
      * @return Finder The current Finder instance
      *
-     * @see Symfony\Component\Finder\Iterator\ExcludeDirectoryFilterIterator
+     * @see ExcludeDirectoryFilterIterator
      *
      * @api
      */
@@ -415,11 +425,11 @@ class Finder implements \IteratorAggregate, \Countable
     /**
      * Excludes "hidden" directories and files (starting with a dot).
      *
-     * @param bool    $ignoreDotFiles Whether to exclude "hidden" files or not
+     * @param bool $ignoreDotFiles Whether to exclude "hidden" files or not
      *
      * @return Finder The current Finder instance
      *
-     * @see Symfony\Component\Finder\Iterator\ExcludeDirectoryFilterIterator
+     * @see ExcludeDirectoryFilterIterator
      *
      * @api
      */
@@ -437,11 +447,11 @@ class Finder implements \IteratorAggregate, \Countable
     /**
      * Forces the finder to ignore version control directories.
      *
-     * @param bool    $ignoreVCS Whether to exclude VCS files or not
+     * @param bool $ignoreVCS Whether to exclude VCS files or not
      *
      * @return Finder The current Finder instance
      *
-     * @see Symfony\Component\Finder\Iterator\ExcludeDirectoryFilterIterator
+     * @see ExcludeDirectoryFilterIterator
      *
      * @api
      */
@@ -459,7 +469,7 @@ class Finder implements \IteratorAggregate, \Countable
     /**
      * Adds VCS patterns.
      *
-     * @see ignoreVCS
+     * @see ignoreVCS()
      *
      * @param string|string[] $pattern VCS patterns to ignore
      */
@@ -483,7 +493,7 @@ class Finder implements \IteratorAggregate, \Countable
      *
      * @return Finder The current Finder instance
      *
-     * @see Symfony\Component\Finder\Iterator\SortableIterator
+     * @see SortableIterator
      *
      * @api
      */
@@ -501,7 +511,7 @@ class Finder implements \IteratorAggregate, \Countable
      *
      * @return Finder The current Finder instance
      *
-     * @see Symfony\Component\Finder\Iterator\SortableIterator
+     * @see SortableIterator
      *
      * @api
      */
@@ -519,7 +529,7 @@ class Finder implements \IteratorAggregate, \Countable
      *
      * @return Finder The current Finder instance
      *
-     * @see Symfony\Component\Finder\Iterator\SortableIterator
+     * @see SortableIterator
      *
      * @api
      */
@@ -539,7 +549,7 @@ class Finder implements \IteratorAggregate, \Countable
      *
      * @return Finder The current Finder instance
      *
-     * @see Symfony\Component\Finder\Iterator\SortableIterator
+     * @see SortableIterator
      *
      * @api
      */
@@ -561,7 +571,7 @@ class Finder implements \IteratorAggregate, \Countable
      *
      * @return Finder The current Finder instance
      *
-     * @see Symfony\Component\Finder\Iterator\SortableIterator
+     * @see SortableIterator
      *
      * @api
      */
@@ -581,7 +591,7 @@ class Finder implements \IteratorAggregate, \Countable
      *
      * @return Finder The current Finder instance
      *
-     * @see Symfony\Component\Finder\Iterator\SortableIterator
+     * @see SortableIterator
      *
      * @api
      */
@@ -602,7 +612,7 @@ class Finder implements \IteratorAggregate, \Countable
      *
      * @return Finder The current Finder instance
      *
-     * @see Symfony\Component\Finder\Iterator\CustomFilterIterator
+     * @see CustomFilterIterator
      *
      * @api
      */
@@ -632,7 +642,7 @@ class Finder implements \IteratorAggregate, \Countable
      *
      * By default, scanning unreadable directories content throws an AccessDeniedException.
      *
-     * @param bool    $ignore
+     * @param bool $ignore
      *
      * @return Finder The current Finder instance
      */
@@ -783,7 +793,8 @@ class Finder implements \IteratorAggregate, \Countable
                     return $this
                         ->buildAdapter($adapter['adapter'])
                         ->searchInDirectory($dir);
-                } catch (ExceptionInterface $e) {}
+                } catch (ExceptionInterface $e) {
+                }
             }
         }
 
diff --git a/vendor/symfony/finder/Symfony/Component/Finder/Glob.php b/vendor/symfony/finder/Symfony/Component/Finder/Glob.php
index df65ac7..c2030c9 100644
--- a/vendor/symfony/finder/Symfony/Component/Finder/Glob.php
+++ b/vendor/symfony/finder/Symfony/Component/Finder/Glob.php
@@ -38,9 +38,9 @@ class Glob
     /**
      * Returns a regexp which is the equivalent of the glob pattern.
      *
-     * @param string  $glob                The glob pattern
-     * @param bool    $strictLeadingDot
-     * @param bool    $strictWildcardSlash
+     * @param string $glob                The glob pattern
+     * @param bool   $strictLeadingDot
+     * @param bool   $strictWildcardSlash
      *
      * @return string regex The regexp
      */
diff --git a/vendor/symfony/finder/Symfony/Component/Finder/Iterator/CustomFilterIterator.php b/vendor/symfony/finder/Symfony/Component/Finder/Iterator/CustomFilterIterator.php
index 36d79db..24b15d9 100644
--- a/vendor/symfony/finder/Symfony/Component/Finder/Iterator/CustomFilterIterator.php
+++ b/vendor/symfony/finder/Symfony/Component/Finder/Iterator/CustomFilterIterator.php
@@ -46,7 +46,7 @@ class CustomFilterIterator extends FilterIterator
     /**
      * Filters the iterator values.
      *
-     * @return bool    true if the value should be kept, false otherwise
+     * @return bool true if the value should be kept, false otherwise
      */
     public function accept()
     {
diff --git a/vendor/symfony/finder/Symfony/Component/Finder/Iterator/DateRangeFilterIterator.php b/vendor/symfony/finder/Symfony/Component/Finder/Iterator/DateRangeFilterIterator.php
index 958f843..4d5ef9a 100644
--- a/vendor/symfony/finder/Symfony/Component/Finder/Iterator/DateRangeFilterIterator.php
+++ b/vendor/symfony/finder/Symfony/Component/Finder/Iterator/DateRangeFilterIterator.php
@@ -38,12 +38,16 @@ class DateRangeFilterIterator extends FilterIterator
     /**
      * Filters the iterator values.
      *
-     * @return bool    true if the value should be kept, false otherwise
+     * @return bool true if the value should be kept, false otherwise
      */
     public function accept()
     {
         $fileinfo = $this->current();
 
+        if (!file_exists($fileinfo->getRealPath())) {
+            return false;
+        }
+
         $filedate = $fileinfo->getMTime();
         foreach ($this->comparators as $compare) {
             if (!$compare->test($filedate)) {
diff --git a/vendor/symfony/finder/Symfony/Component/Finder/Iterator/DepthRangeFilterIterator.php b/vendor/symfony/finder/Symfony/Component/Finder/Iterator/DepthRangeFilterIterator.php
index c1c5ce8..f78c71e 100644
--- a/vendor/symfony/finder/Symfony/Component/Finder/Iterator/DepthRangeFilterIterator.php
+++ b/vendor/symfony/finder/Symfony/Component/Finder/Iterator/DepthRangeFilterIterator.php
@@ -23,9 +23,9 @@ class DepthRangeFilterIterator extends FilterIterator
     /**
      * Constructor.
      *
-     * @param \RecursiveIteratorIterator $iterator    The Iterator to filter
-     * @param int                        $minDepth    The min depth
-     * @param int                        $maxDepth    The max depth
+     * @param \RecursiveIteratorIterator $iterator The Iterator to filter
+     * @param int                        $minDepth The min depth
+     * @param int                        $maxDepth The max depth
      */
     public function __construct(\RecursiveIteratorIterator $iterator, $minDepth = 0, $maxDepth = PHP_INT_MAX)
     {
@@ -38,7 +38,7 @@ class DepthRangeFilterIterator extends FilterIterator
     /**
      * Filters the iterator values.
      *
-     * @return bool    true if the value should be kept, false otherwise
+     * @return bool true if the value should be kept, false otherwise
      */
     public function accept()
     {
diff --git a/vendor/symfony/finder/Symfony/Component/Finder/Iterator/ExcludeDirectoryFilterIterator.php b/vendor/symfony/finder/Symfony/Component/Finder/Iterator/ExcludeDirectoryFilterIterator.php
index b2be58e..1ddde85 100644
--- a/vendor/symfony/finder/Symfony/Component/Finder/Iterator/ExcludeDirectoryFilterIterator.php
+++ b/vendor/symfony/finder/Symfony/Component/Finder/Iterator/ExcludeDirectoryFilterIterator.php
@@ -38,7 +38,7 @@ class ExcludeDirectoryFilterIterator extends FilterIterator
     /**
      * Filters the iterator values.
      *
-     * @return bool    true if the value should be kept, false otherwise
+     * @return bool true if the value should be kept, false otherwise
      */
     public function accept()
     {
diff --git a/vendor/symfony/finder/Symfony/Component/Finder/Iterator/FilePathsIterator.php b/vendor/symfony/finder/Symfony/Component/Finder/Iterator/FilePathsIterator.php
index 48634f2..4da2f5b 100644
--- a/vendor/symfony/finder/Symfony/Component/Finder/Iterator/FilePathsIterator.php
+++ b/vendor/symfony/finder/Symfony/Component/Finder/Iterator/FilePathsIterator.php
@@ -51,7 +51,7 @@ class FilePathsIterator extends \ArrayIterator
      */
     public function __construct(array $paths, $baseDir)
     {
-        $this->baseDir       = $baseDir;
+        $this->baseDir = $baseDir;
         $this->baseDirLength = strlen($baseDir);
 
         parent::__construct($paths);
diff --git a/vendor/symfony/finder/Symfony/Component/Finder/Iterator/FileTypeFilterIterator.php b/vendor/symfony/finder/Symfony/Component/Finder/Iterator/FileTypeFilterIterator.php
index 985475e..f50fd82 100644
--- a/vendor/symfony/finder/Symfony/Component/Finder/Iterator/FileTypeFilterIterator.php
+++ b/vendor/symfony/finder/Symfony/Component/Finder/Iterator/FileTypeFilterIterator.php
@@ -18,7 +18,7 @@ namespace Symfony\Component\Finder\Iterator;
  */
 class FileTypeFilterIterator extends FilterIterator
 {
-    const ONLY_FILES       = 1;
+    const ONLY_FILES = 1;
     const ONLY_DIRECTORIES = 2;
 
     private $mode;
@@ -39,7 +39,7 @@ class FileTypeFilterIterator extends FilterIterator
     /**
      * Filters the iterator values.
      *
-     * @return bool    true if the value should be kept, false otherwise
+     * @return bool true if the value should be kept, false otherwise
      */
     public function accept()
     {
diff --git a/vendor/symfony/finder/Symfony/Component/Finder/Iterator/FilecontentFilterIterator.php b/vendor/symfony/finder/Symfony/Component/Finder/Iterator/FilecontentFilterIterator.php
index 9ea3330..28cf770 100644
--- a/vendor/symfony/finder/Symfony/Component/Finder/Iterator/FilecontentFilterIterator.php
+++ b/vendor/symfony/finder/Symfony/Component/Finder/Iterator/FilecontentFilterIterator.php
@@ -22,7 +22,7 @@ class FilecontentFilterIterator extends MultiplePcreFilterIterator
     /**
      * Filters the iterator values.
      *
-     * @return bool    true if the value should be kept, false otherwise
+     * @return bool true if the value should be kept, false otherwise
      */
     public function accept()
     {
diff --git a/vendor/symfony/finder/Symfony/Component/Finder/Iterator/FilenameFilterIterator.php b/vendor/symfony/finder/Symfony/Component/Finder/Iterator/FilenameFilterIterator.php
index c4e0ccd..f1cd391 100644
--- a/vendor/symfony/finder/Symfony/Component/Finder/Iterator/FilenameFilterIterator.php
+++ b/vendor/symfony/finder/Symfony/Component/Finder/Iterator/FilenameFilterIterator.php
@@ -20,11 +20,10 @@ use Symfony\Component\Finder\Expression\Expression;
  */
 class FilenameFilterIterator extends MultiplePcreFilterIterator
 {
-
     /**
      * Filters the iterator values.
      *
-     * @return bool    true if the value should be kept, false otherwise
+     * @return bool true if the value should be kept, false otherwise
      */
     public function accept()
     {
diff --git a/vendor/symfony/finder/Symfony/Component/Finder/Iterator/MultiplePcreFilterIterator.php b/vendor/symfony/finder/Symfony/Component/Finder/Iterator/MultiplePcreFilterIterator.php
index d7efc90..068a7ef 100644
--- a/vendor/symfony/finder/Symfony/Component/Finder/Iterator/MultiplePcreFilterIterator.php
+++ b/vendor/symfony/finder/Symfony/Component/Finder/Iterator/MultiplePcreFilterIterator.php
@@ -48,7 +48,7 @@ abstract class MultiplePcreFilterIterator extends FilterIterator
      *
      * @param string $str
      *
-     * @return bool    Whether the given string is a regex
+     * @return bool Whether the given string is a regex
      */
     protected function isRegex($str)
     {
diff --git a/vendor/symfony/finder/Symfony/Component/Finder/Iterator/PathFilterIterator.php b/vendor/symfony/finder/Symfony/Component/Finder/Iterator/PathFilterIterator.php
index 828fa41..2bb8ebd 100644
--- a/vendor/symfony/finder/Symfony/Component/Finder/Iterator/PathFilterIterator.php
+++ b/vendor/symfony/finder/Symfony/Component/Finder/Iterator/PathFilterIterator.php
@@ -19,17 +19,16 @@ namespace Symfony\Component\Finder\Iterator;
  */
 class PathFilterIterator extends MultiplePcreFilterIterator
 {
-
     /**
      * Filters the iterator values.
      *
-     * @return bool    true if the value should be kept, false otherwise
+     * @return bool true if the value should be kept, false otherwise
      */
     public function accept()
     {
         $filename = $this->current()->getRelativePathname();
 
-        if (defined('PHP_WINDOWS_VERSION_MAJOR')) {
+        if ('\\' === DIRECTORY_SEPARATOR) {
             $filename = strtr($filename, '\\', '/');
         }
 
@@ -60,7 +59,7 @@ class PathFilterIterator extends MultiplePcreFilterIterator
      * PCRE patterns are left unchanged.
      *
      * Default conversion:
-     *     'lorem/ipsum/dolor'  ==>  'lorem\/ipsum\/dolor/'
+     *     'lorem/ipsum/dolor' ==>  'lorem\/ipsum\/dolor/'
      *
      * Use only / as directory separator (on Windows also).
      *
diff --git a/vendor/symfony/finder/Symfony/Component/Finder/Iterator/RecursiveDirectoryIterator.php b/vendor/symfony/finder/Symfony/Component/Finder/Iterator/RecursiveDirectoryIterator.php
index 9543a3f..af824d0 100644
--- a/vendor/symfony/finder/Symfony/Component/Finder/Iterator/RecursiveDirectoryIterator.php
+++ b/vendor/symfony/finder/Symfony/Component/Finder/Iterator/RecursiveDirectoryIterator.php
@@ -15,7 +15,7 @@ use Symfony\Component\Finder\Exception\AccessDeniedException;
 use Symfony\Component\Finder\SplFileInfo;
 
 /**
- * Extends the \RecursiveDirectoryIterator to support relative paths
+ * Extends the \RecursiveDirectoryIterator to support relative paths.
  *
  * @author Victor Berchet <victor@suumit.com>
  */
@@ -34,9 +34,9 @@ class RecursiveDirectoryIterator extends \RecursiveDirectoryIterator
     /**
      * Constructor.
      *
-     * @param string  $path
-     * @param int     $flags
-     * @param bool    $ignoreUnreadableDirs
+     * @param string $path
+     * @param int    $flags
+     * @param bool   $ignoreUnreadableDirs
      *
      * @throws \RuntimeException
      */
@@ -51,7 +51,7 @@ class RecursiveDirectoryIterator extends \RecursiveDirectoryIterator
     }
 
     /**
-     * Return an instance of SplFileInfo with support for relative paths
+     * Return an instance of SplFileInfo with support for relative paths.
      *
      * @return SplFileInfo File information
      */
@@ -87,7 +87,7 @@ class RecursiveDirectoryIterator extends \RecursiveDirectoryIterator
     }
 
     /**
-     * Do nothing for non rewindable stream
+     * Do nothing for non rewindable stream.
      */
     public function rewind()
     {
@@ -104,7 +104,7 @@ class RecursiveDirectoryIterator extends \RecursiveDirectoryIterator
     /**
      * Checks if the stream is rewindable.
      *
-     * @return bool    true when the stream is rewindable, false otherwise
+     * @return bool true when the stream is rewindable, false otherwise
      */
     public function isRewindable()
     {
diff --git a/vendor/symfony/finder/Symfony/Component/Finder/Iterator/SizeRangeFilterIterator.php b/vendor/symfony/finder/Symfony/Component/Finder/Iterator/SizeRangeFilterIterator.php
index b345a16..3d3140a 100644
--- a/vendor/symfony/finder/Symfony/Component/Finder/Iterator/SizeRangeFilterIterator.php
+++ b/vendor/symfony/finder/Symfony/Component/Finder/Iterator/SizeRangeFilterIterator.php
@@ -38,7 +38,7 @@ class SizeRangeFilterIterator extends FilterIterator
     /**
      * Filters the iterator values.
      *
-     * @return bool    true if the value should be kept, false otherwise
+     * @return bool true if the value should be kept, false otherwise
      */
     public function accept()
     {
diff --git a/vendor/symfony/finder/Symfony/Component/Finder/LICENSE b/vendor/symfony/finder/Symfony/Component/Finder/LICENSE
index 0b3292c..43028bc 100644
--- a/vendor/symfony/finder/Symfony/Component/Finder/LICENSE
+++ b/vendor/symfony/finder/Symfony/Component/Finder/LICENSE
@@ -1,4 +1,4 @@
-Copyright (c) 2004-2014 Fabien Potencier
+Copyright (c) 2004-2015 Fabien Potencier
 
 Permission is hereby granted, free of charge, to any person obtaining a copy
 of this software and associated documentation files (the "Software"), to deal
diff --git a/vendor/symfony/finder/Symfony/Component/Finder/README.md b/vendor/symfony/finder/Symfony/Component/Finder/README.md
index 8494531..7a96219 100644
--- a/vendor/symfony/finder/Symfony/Component/Finder/README.md
+++ b/vendor/symfony/finder/Symfony/Component/Finder/README.md
@@ -3,32 +3,41 @@ Finder Component
 
 Finder finds files and directories via an intuitive fluent interface.
 
-    use Symfony\Component\Finder\Finder;
+```php
+use Symfony\Component\Finder\Finder;
 
-    $finder = new Finder();
+$finder = new Finder();
 
-    $iterator = $finder
-      ->files()
-      ->name('*.php')
-      ->depth(0)
-      ->size('>= 1K')
-      ->in(__DIR__);
+$iterator = $finder
+  ->files()
+  ->name('*.php')
+  ->depth(0)
+  ->size('>= 1K')
+  ->in(__DIR__);
 
-    foreach ($iterator as $file) {
-        print $file->getRealpath()."\n";
-    }
+foreach ($iterator as $file) {
+    print $file->getRealpath()."\n";
+}
+```
+
+The iterator returns instances of [Symfony\Component\Finder\SplFileInfo\SplFileInfo][1].
+Besides the build-in methods inherited from [\SplFileInfo][2] (`getPerms()`, `getSize()`, ...),
+you can also use `getRelativePath()` and `getRelativePathname()`. Read the
+[official documentation][3] for more information.
 
 But you can also use it to find files stored remotely like in this example where
 we are looking for files on Amazon S3:
 
-    $s3 = new \Zend_Service_Amazon_S3($key, $secret);
-    $s3->registerStreamWrapper("s3");
+```php
+$s3 = new \Zend_Service_Amazon_S3($key, $secret);
+$s3->registerStreamWrapper("s3");
 
-    $finder = new Finder();
-    $finder->name('photos*')->size('< 100K')->date('since 1 hour ago');
-    foreach ($finder->in('s3://bucket-name') as $file) {
-        print $file->getFilename()."\n";
-    }
+$finder = new Finder();
+$finder->name('photos*')->size('< 100K')->date('since 1 hour ago');
+foreach ($finder->in('s3://bucket-name') as $file) {
+    print $file->getFilename()."\n";
+}
+```
 
 Resources
 ---------
@@ -39,3 +48,6 @@ You can run the unit tests with the following command:
     $ composer.phar install
     $ phpunit
 
+[1]: http://api.symfony.com/2.5/Symfony/Component/Finder/SplFileInfo.html
+[2]: http://php.net/splfileinfo
+[3]: http://symfony.com/doc/current/components/finder.html#usage
diff --git a/vendor/symfony/finder/Symfony/Component/Finder/Shell/Command.php b/vendor/symfony/finder/Symfony/Component/Finder/Shell/Command.php
index 78824d0..1f69afb 100644
--- a/vendor/symfony/finder/Symfony/Component/Finder/Shell/Command.php
+++ b/vendor/symfony/finder/Symfony/Component/Finder/Shell/Command.php
@@ -246,14 +246,14 @@ class Command
      */
     public function execute()
     {
-        if (null === $this->errorHandler) {
+        if (null === $errorHandler = $this->errorHandler) {
             exec($this->join(), $output);
         } else {
             $process = proc_open($this->join(), array(0 => array('pipe', 'r'), 1 => array('pipe', 'w'), 2 => array('pipe', 'w')), $pipes);
             $output = preg_split('~(\r\n|\r|\n)~', stream_get_contents($pipes[1]), -1, PREG_SPLIT_NO_EMPTY);
 
             if ($error = stream_get_contents($pipes[2])) {
-                call_user_func($this->errorHandler, $error);
+                $errorHandler($error);
             }
 
             proc_close($process);
diff --git a/vendor/symfony/finder/Symfony/Component/Finder/Shell/Shell.php b/vendor/symfony/finder/Symfony/Component/Finder/Shell/Shell.php
index 8586cbc..6d7bff3 100644
--- a/vendor/symfony/finder/Symfony/Component/Finder/Shell/Shell.php
+++ b/vendor/symfony/finder/Symfony/Component/Finder/Shell/Shell.php
@@ -16,11 +16,11 @@ namespace Symfony\Component\Finder\Shell;
  */
 class Shell
 {
-    const TYPE_UNIX    = 1;
-    const TYPE_DARWIN  = 2;
-    const TYPE_CYGWIN  = 3;
+    const TYPE_UNIX = 1;
+    const TYPE_DARWIN = 2;
+    const TYPE_CYGWIN = 3;
     const TYPE_WINDOWS = 4;
-    const TYPE_BSD     = 5;
+    const TYPE_BSD = 5;
 
     /**
      * @var string|null
@@ -50,17 +50,19 @@ class Shell
      */
     public function testCommand($command)
     {
-        if (self::TYPE_WINDOWS === $this->type) {
-            // todo: find a way to test if Windows command exists
-            return false;
-        }
-
         if (!function_exists('exec')) {
             return false;
         }
 
         // todo: find a better way (command could not be available)
-        exec('command -v '.$command, $output, $code);
+        $testCommand = 'which ';
+        if (self::TYPE_WINDOWS === $this->type) {
+            $testCommand = 'where ';
+        }
+
+        $command = escapeshellcmd($command);
+
+        exec($testCommand.$command, $output, $code);
 
         return 0 === $code && count($output) > 0;
     }
diff --git a/vendor/symfony/finder/Symfony/Component/Finder/SplFileInfo.php b/vendor/symfony/finder/Symfony/Component/Finder/SplFileInfo.php
index d911fe0..c7fbe02 100644
--- a/vendor/symfony/finder/Symfony/Component/Finder/SplFileInfo.php
+++ b/vendor/symfony/finder/Symfony/Component/Finder/SplFileInfo.php
@@ -12,7 +12,7 @@
 namespace Symfony\Component\Finder;
 
 /**
- * Extends \SplFileInfo to support relative paths
+ * Extends \SplFileInfo to support relative paths.
  *
  * @author Fabien Potencier <fabien@symfony.com>
  */
@@ -22,7 +22,7 @@ class SplFileInfo extends \SplFileInfo
     private $relativePathname;
 
     /**
-     * Constructor
+     * Constructor.
      *
      * @param string $file             The file name
      * @param string $relativePath     The relative path
@@ -36,7 +36,7 @@ class SplFileInfo extends \SplFileInfo
     }
 
     /**
-     * Returns the relative path
+     * Returns the relative path.
      *
      * @return string the relative path
      */
@@ -46,7 +46,7 @@ class SplFileInfo extends \SplFileInfo
     }
 
     /**
-     * Returns the relative path name
+     * Returns the relative path name.
      *
      * @return string the relative path name
      */
@@ -56,7 +56,7 @@ class SplFileInfo extends \SplFileInfo
     }
 
     /**
-     * Returns the contents of the file
+     * Returns the contents of the file.
      *
      * @return string the contents of the file
      *
diff --git a/vendor/symfony/finder/Symfony/Component/Finder/Tests/Comparator/DateComparatorTest.php b/vendor/symfony/finder/Symfony/Component/Finder/Tests/Comparator/DateComparatorTest.php
index ac8256a..2739126 100644
--- a/vendor/symfony/finder/Symfony/Component/Finder/Tests/Comparator/DateComparatorTest.php
+++ b/vendor/symfony/finder/Symfony/Component/Finder/Tests/Comparator/DateComparatorTest.php
@@ -59,6 +59,5 @@ class DateComparatorTest extends \PHPUnit_Framework_TestCase
             array('since 2005-10-10', array(strtotime('2005-10-15')), array(strtotime('2005-10-09'))),
             array('!= 2005-10-10', array(strtotime('2005-10-11')), array(strtotime('2005-10-10'))),
         );
-
     }
 }
diff --git a/vendor/symfony/finder/Symfony/Component/Finder/Tests/Comparator/NumberComparatorTest.php b/vendor/symfony/finder/Symfony/Component/Finder/Tests/Comparator/NumberComparatorTest.php
index b07870b..d8cef1b 100644
--- a/vendor/symfony/finder/Symfony/Component/Finder/Tests/Comparator/NumberComparatorTest.php
+++ b/vendor/symfony/finder/Symfony/Component/Finder/Tests/Comparator/NumberComparatorTest.php
@@ -15,7 +15,6 @@ use Symfony\Component\Finder\Comparator\NumberComparator;
 
 class NumberComparatorTest extends \PHPUnit_Framework_TestCase
 {
-
     /**
      * @dataProvider getConstructorTestData
      */
@@ -101,9 +100,8 @@ class NumberComparatorTest extends \PHPUnit_Framework_TestCase
                     '=1', '===1',
                     '0 . 1', '123 .45', '234. 567',
                     '..', '.0.', '0.1.2',
-                )
+                ),
             ),
         );
     }
-
 }
diff --git a/vendor/symfony/finder/Symfony/Component/Finder/Tests/Expression/RegexTest.php b/vendor/symfony/finder/Symfony/Component/Finder/Tests/Expression/RegexTest.php
index 35ba276..620ba10 100644
--- a/vendor/symfony/finder/Symfony/Component/Finder/Tests/Expression/RegexTest.php
+++ b/vendor/symfony/finder/Symfony/Component/Finder/Tests/Expression/RegexTest.php
@@ -23,7 +23,7 @@ class RegexTest extends \PHPUnit_Framework_TestCase
         $expr = new Expression($regex);
 
         $this->assertEquals($start, $expr->getRegex()->hasStartFlag());
-        $this->assertEquals($end,   $expr->getRegex()->hasEndFlag());
+        $this->assertEquals($end, $expr->getRegex()->hasEndFlag());
     }
 
     /**
@@ -34,7 +34,7 @@ class RegexTest extends \PHPUnit_Framework_TestCase
         $expr = new Expression($regex);
 
         $this->assertEquals($start, $expr->getRegex()->hasStartJoker());
-        $this->assertEquals($end,   $expr->getRegex()->hasEndJoker());
+        $this->assertEquals($end, $expr->getRegex()->hasEndJoker());
     }
 
     /**
diff --git a/vendor/symfony/finder/Symfony/Component/Finder/Tests/FinderTest.php b/vendor/symfony/finder/Symfony/Component/Finder/Tests/FinderTest.php
index 90aef27..12f0678 100644
--- a/vendor/symfony/finder/Symfony/Component/Finder/Tests/FinderTest.php
+++ b/vendor/symfony/finder/Symfony/Component/Finder/Tests/FinderTest.php
@@ -580,6 +580,20 @@ class FinderTest extends Iterator\RealIteratorTestCase
         }
     }
 
+    /**
+     * @dataProvider getAdaptersTestData
+     */
+    public function testRegexSpecialCharsLocationWithPathRestrictionContainingStartFlag(Adapter\AdapterInterface $adapter)
+    {
+        $finder = $this->buildFinder($adapter);
+        $finder->in(__DIR__.DIRECTORY_SEPARATOR.'Fixtures'.DIRECTORY_SEPARATOR.'r+e.gex[c]a(r)s')
+            ->path('/^dir/');
+
+        $expected = array('r+e.gex[c]a(r)s'.DIRECTORY_SEPARATOR.'dir',
+                          'r+e.gex[c]a(r)s'.DIRECTORY_SEPARATOR.'dir'.DIRECTORY_SEPARATOR.'bar.dat',);
+        $this->assertIterator($this->toAbsoluteFixtures($expected), $finder);
+    }
+
     public function testAdaptersOrdering()
     {
         $finder = Finder::create()
@@ -600,7 +614,7 @@ class FinderTest extends Iterator\RealIteratorTestCase
 
     public function testAdaptersChaining()
     {
-        $iterator  = new \ArrayIterator(array());
+        $iterator = new \ArrayIterator(array());
         $filenames = $this->toAbsolute(array('foo', 'foo/bar.tmp', 'test.php', 'test.py', 'toto'));
         foreach ($filenames as $file) {
             $iterator->append(new \Symfony\Component\Finder\SplFileInfo($file, null, null));
@@ -684,7 +698,7 @@ class FinderTest extends Iterator\RealIteratorTestCase
         $tests = array(
             array('', '', array()),
             array('/^A\/B\/C/', '/C$/',
-                array('A'.DIRECTORY_SEPARATOR.'B'.DIRECTORY_SEPARATOR.'C'.DIRECTORY_SEPARATOR.'abc.dat')
+                array('A'.DIRECTORY_SEPARATOR.'B'.DIRECTORY_SEPARATOR.'C'.DIRECTORY_SEPARATOR.'abc.dat'),
             ),
             array('/^A\/B/', 'foobar',
                 array(
@@ -692,7 +706,7 @@ class FinderTest extends Iterator\RealIteratorTestCase
                     'A'.DIRECTORY_SEPARATOR.'B'.DIRECTORY_SEPARATOR.'C',
                     'A'.DIRECTORY_SEPARATOR.'B'.DIRECTORY_SEPARATOR.'ab.dat',
                     'A'.DIRECTORY_SEPARATOR.'B'.DIRECTORY_SEPARATOR.'C'.DIRECTORY_SEPARATOR.'abc.dat',
-                )
+                ),
             ),
             array('A/B/C', 'foobar',
                 array(
@@ -700,7 +714,7 @@ class FinderTest extends Iterator\RealIteratorTestCase
                     'A'.DIRECTORY_SEPARATOR.'B'.DIRECTORY_SEPARATOR.'C'.DIRECTORY_SEPARATOR.'abc.dat',
                     'copy'.DIRECTORY_SEPARATOR.'A'.DIRECTORY_SEPARATOR.'B'.DIRECTORY_SEPARATOR.'C',
                     'copy'.DIRECTORY_SEPARATOR.'A'.DIRECTORY_SEPARATOR.'B'.DIRECTORY_SEPARATOR.'C'.DIRECTORY_SEPARATOR.'abc.dat.copy',
-                )
+                ),
             ),
             array('A/B', 'foobar',
                 array(
@@ -714,12 +728,12 @@ class FinderTest extends Iterator\RealIteratorTestCase
                     'A'.DIRECTORY_SEPARATOR.'B'.DIRECTORY_SEPARATOR.'C'.DIRECTORY_SEPARATOR.'abc.dat',
                     'copy'.DIRECTORY_SEPARATOR.'A'.DIRECTORY_SEPARATOR.'B'.DIRECTORY_SEPARATOR.'ab.dat.copy',
                     'copy'.DIRECTORY_SEPARATOR.'A'.DIRECTORY_SEPARATOR.'B'.DIRECTORY_SEPARATOR.'C'.DIRECTORY_SEPARATOR.'abc.dat.copy',
-                )
+                ),
             ),
             array('/^with space\//', 'foobar',
                 array(
                     'with space'.DIRECTORY_SEPARATOR.'foo.txt',
-                )
+                ),
             ),
         );
 
@@ -731,7 +745,7 @@ class FinderTest extends Iterator\RealIteratorTestCase
      */
     public function testAccessDeniedException(Adapter\AdapterInterface $adapter)
     {
-        if (defined('PHP_WINDOWS_VERSION_MAJOR')) {
+        if ('\\' === DIRECTORY_SEPARATOR) {
             $this->markTestSkipped('chmod is not supported on Windows');
         }
 
@@ -739,17 +753,30 @@ class FinderTest extends Iterator\RealIteratorTestCase
         $finder->files()->in(self::$tmpDir);
 
         // make 'foo' directory non-readable
-        chmod(self::$tmpDir.DIRECTORY_SEPARATOR.'foo', 0333);
-
-        try {
-            $this->assertIterator($this->toAbsolute(array('foo bar', 'test.php', 'test.py')), $finder->getIterator());
-            $this->fail('Finder should throw an exception when opening a non-readable directory.');
-        } catch (\Exception $e) {
-            $this->assertInstanceOf('Symfony\\Component\\Finder\\Exception\\AccessDeniedException', $e);
+        $testDir = self::$tmpDir.DIRECTORY_SEPARATOR.'foo';
+        chmod($testDir, 0333);
+
+        if (false === $couldRead = is_readable($testDir)) {
+            try {
+                $this->assertIterator($this->toAbsolute(array('foo bar', 'test.php', 'test.py')), $finder->getIterator());
+                $this->fail('Finder should throw an exception when opening a non-readable directory.');
+            } catch (\Exception $e) {
+                $expectedExceptionClass = 'Symfony\\Component\\Finder\\Exception\\AccessDeniedException';
+                if ($e instanceof \PHPUnit_Framework_ExpectationFailedException) {
+                    $this->fail(sprintf("Expected exception:\n%s\nGot:\n%s\nWith comparison failure:\n%s", $expectedExceptionClass, 'PHPUnit_Framework_ExpectationFailedException', $e->getComparisonFailure()->getExpectedAsString()));
+                }
+
+                $this->assertInstanceOf($expectedExceptionClass, $e);
+            }
         }
 
         // restore original permissions
-        chmod(self::$tmpDir.DIRECTORY_SEPARATOR.'foo', 0777);
+        chmod($testDir, 0777);
+        clearstatcache($testDir);
+
+        if ($couldRead) {
+            $this->markTestSkipped('could read test files while test requires unreadable');
+        }
     }
 
     /**
@@ -757,7 +784,7 @@ class FinderTest extends Iterator\RealIteratorTestCase
      */
     public function testIgnoredAccessDeniedException(Adapter\AdapterInterface $adapter)
     {
-        if (defined('PHP_WINDOWS_VERSION_MAJOR')) {
+        if ('\\' === DIRECTORY_SEPARATOR) {
             $this->markTestSkipped('chmod is not supported on Windows');
         }
 
@@ -765,12 +792,20 @@ class FinderTest extends Iterator\RealIteratorTestCase
         $finder->files()->ignoreUnreadableDirs()->in(self::$tmpDir);
 
         // make 'foo' directory non-readable
-        chmod(self::$tmpDir.DIRECTORY_SEPARATOR.'foo', 0333);
+        $testDir = self::$tmpDir.DIRECTORY_SEPARATOR.'foo';
+        chmod($testDir, 0333);
 
-        $this->assertIterator($this->toAbsolute(array('foo bar', 'test.php', 'test.py')), $finder->getIterator());
+        if (false === ($couldRead = is_readable($testDir))) {
+            $this->assertIterator($this->toAbsolute(array('foo bar', 'test.php', 'test.py')), $finder->getIterator());
+        }
 
         // restore original permissions
-        chmod(self::$tmpDir.DIRECTORY_SEPARATOR.'foo', 0777);
+        chmod($testDir, 0777);
+        clearstatcache($testDir);
+
+        if ($couldRead) {
+            $this->markTestSkipped('could read test files while test requires unreadable');
+        }
     }
 
     private function buildTestData(array $tests)
@@ -798,7 +833,7 @@ class FinderTest extends Iterator\RealIteratorTestCase
             array(
                 new Adapter\BsdFindAdapter(),
                 new Adapter\GnuFindAdapter(),
-                new Adapter\PhpAdapter()
+                new Adapter\PhpAdapter(),
             ),
             function (Adapter\AdapterInterface $adapter) {
                 return $adapter->isSupported();
@@ -831,25 +866,4 @@ class FinderTest extends Iterator\RealIteratorTestCase
         $this->assertIterator($expected, $finder);
         $this->assertIteratorInForeach($expected, $finder);
     }
-
-    public function testNonSeekableStream()
-    {
-        if (!in_array('ftp', stream_get_wrappers())) {
-            $this->markTestSkipped(sprintf('Unavailable stream "%s".', 'ftp'));
-        }
-
-        try {
-            $i = Finder::create()->in('ftp://ftp.mozilla.org/')->depth(0)->getIterator();
-        } catch (\UnexpectedValueException $e) {
-            $this->markTestSkipped(sprintf('Unsupported stream "%s".', 'ftp'));
-        }
-
-        $contains = array(
-            'ftp://ftp.mozilla.org'.DIRECTORY_SEPARATOR.'README',
-            'ftp://ftp.mozilla.org'.DIRECTORY_SEPARATOR.'index.html',
-            'ftp://ftp.mozilla.org'.DIRECTORY_SEPARATOR.'pub',
-        );
-
-        $this->assertIteratorInForeach($contains, $i);
-    }
 }
diff --git a/vendor/symfony/finder/Symfony/Component/Finder/Tests/Fixtures/r+e.gex[c]a(r)s/dir/bar.dat b/vendor/symfony/finder/Symfony/Component/Finder/Tests/Fixtures/r+e.gex[c]a(r)s/dir/bar.dat
new file mode 100644
index 0000000..e69de29
diff --git a/vendor/symfony/finder/Symfony/Component/Finder/Tests/Iterator/DateRangeFilterIteratorTest.php b/vendor/symfony/finder/Symfony/Component/Finder/Tests/Iterator/DateRangeFilterIteratorTest.php
index 008f966..709d5fe 100644
--- a/vendor/symfony/finder/Symfony/Component/Finder/Tests/Iterator/DateRangeFilterIteratorTest.php
+++ b/vendor/symfony/finder/Symfony/Component/Finder/Tests/Iterator/DateRangeFilterIteratorTest.php
@@ -21,7 +21,9 @@ class DateRangeFilterIteratorTest extends RealIteratorTestCase
      */
     public function testAccept($size, $expected)
     {
-        $inner = new Iterator(self::$files);
+        $files = self::$files;
+        $files[] = self::toAbsolute('doesnotexist');
+        $inner = new Iterator($files);
 
         $iterator = new DateRangeFilterIterator($inner, $size);
 
diff --git a/vendor/symfony/finder/Symfony/Component/Finder/Tests/Iterator/DepthRangeFilterIteratorTest.php b/vendor/symfony/finder/Symfony/Component/Finder/Tests/Iterator/DepthRangeFilterIteratorTest.php
index be06f1c..5ec9832 100644
--- a/vendor/symfony/finder/Symfony/Component/Finder/Tests/Iterator/DepthRangeFilterIteratorTest.php
+++ b/vendor/symfony/finder/Symfony/Component/Finder/Tests/Iterator/DepthRangeFilterIteratorTest.php
@@ -77,5 +77,4 @@ class DepthRangeFilterIteratorTest extends RealIteratorTestCase
             array(1, 1, $this->toAbsolute($equalTo1)),
         );
     }
-
 }
diff --git a/vendor/symfony/finder/Symfony/Component/Finder/Tests/Iterator/ExcludeDirectoryFilterIteratorTest.php b/vendor/symfony/finder/Symfony/Component/Finder/Tests/Iterator/ExcludeDirectoryFilterIteratorTest.php
index e299fe7..693b733 100644
--- a/vendor/symfony/finder/Symfony/Component/Finder/Tests/Iterator/ExcludeDirectoryFilterIteratorTest.php
+++ b/vendor/symfony/finder/Symfony/Component/Finder/Tests/Iterator/ExcludeDirectoryFilterIteratorTest.php
@@ -39,7 +39,7 @@ class ExcludeDirectoryFilterIteratorTest extends RealIteratorTestCase
             'test.py',
             'test.php',
             'toto',
-            'foo bar'
+            'foo bar',
         );
 
         $fo = array(
@@ -53,7 +53,7 @@ class ExcludeDirectoryFilterIteratorTest extends RealIteratorTestCase
             'foo/bar.tmp',
             'test.php',
             'toto',
-            'foo bar'
+            'foo bar',
         );
 
         return array(
@@ -61,5 +61,4 @@ class ExcludeDirectoryFilterIteratorTest extends RealIteratorTestCase
             array(array('fo'), $this->toAbsolute($fo)),
         );
     }
-
 }
diff --git a/vendor/symfony/finder/Symfony/Component/Finder/Tests/Iterator/FilePathsIteratorTest.php b/vendor/symfony/finder/Symfony/Component/Finder/Tests/Iterator/FilePathsIteratorTest.php
index 61f0e9b..89853a8 100644
--- a/vendor/symfony/finder/Symfony/Component/Finder/Tests/Iterator/FilePathsIteratorTest.php
+++ b/vendor/symfony/finder/Symfony/Component/Finder/Tests/Iterator/FilePathsIteratorTest.php
@@ -31,7 +31,7 @@ class FilePathsIteratorTest extends RealIteratorTestCase
 
     public function getSubPathData()
     {
-        $tmpDir = sys_get_temp_dir().'/symfony2_finder';
+        $tmpDir = sys_get_temp_dir().'/symfony_finder';
 
         return array(
             array(
@@ -42,7 +42,7 @@ class FilePathsIteratorTest extends RealIteratorTestCase
                     $tmpDir.DIRECTORY_SEPARATOR.'foo' => $tmpDir.DIRECTORY_SEPARATOR.'foo',
                     $tmpDir.DIRECTORY_SEPARATOR.'foo'.DIRECTORY_SEPARATOR.'bar.tmp' => $tmpDir.DIRECTORY_SEPARATOR.'foo'.DIRECTORY_SEPARATOR.'bar.tmp',
                     $tmpDir.DIRECTORY_SEPARATOR.'test.php' => $tmpDir.DIRECTORY_SEPARATOR.'test.php',
-                    $tmpDir.DIRECTORY_SEPARATOR.'toto' => $tmpDir.DIRECTORY_SEPARATOR.'toto'
+                    $tmpDir.DIRECTORY_SEPARATOR.'toto' => $tmpDir.DIRECTORY_SEPARATOR.'toto',
                 ),
                 array( // subPaths
                     $tmpDir.DIRECTORY_SEPARATOR.'.git' => '',
@@ -50,7 +50,7 @@ class FilePathsIteratorTest extends RealIteratorTestCase
                     $tmpDir.DIRECTORY_SEPARATOR.'foo' => '',
                     $tmpDir.DIRECTORY_SEPARATOR.'foo'.DIRECTORY_SEPARATOR.'bar.tmp' => 'foo',
                     $tmpDir.DIRECTORY_SEPARATOR.'test.php' => '',
-                    $tmpDir.DIRECTORY_SEPARATOR.'toto' => ''
+                    $tmpDir.DIRECTORY_SEPARATOR.'toto' => '',
                 ),
                 array( // subPathnames
                     $tmpDir.DIRECTORY_SEPARATOR.'.git' => '.git',
@@ -58,7 +58,7 @@ class FilePathsIteratorTest extends RealIteratorTestCase
                     $tmpDir.DIRECTORY_SEPARATOR.'foo' => 'foo',
                     $tmpDir.DIRECTORY_SEPARATOR.'foo'.DIRECTORY_SEPARATOR.'bar.tmp' => 'foo'.DIRECTORY_SEPARATOR.'bar.tmp',
                     $tmpDir.DIRECTORY_SEPARATOR.'test.php' => 'test.php',
-                    $tmpDir.DIRECTORY_SEPARATOR.'toto' => 'toto'
+                    $tmpDir.DIRECTORY_SEPARATOR.'toto' => 'toto',
                 ),
             ),
         );
diff --git a/vendor/symfony/finder/Symfony/Component/Finder/Tests/Iterator/FileTypeFilterIteratorTest.php b/vendor/symfony/finder/Symfony/Component/Finder/Tests/Iterator/FileTypeFilterIteratorTest.php
index b2432ca..cfa8684 100644
--- a/vendor/symfony/finder/Symfony/Component/Finder/Tests/Iterator/FileTypeFilterIteratorTest.php
+++ b/vendor/symfony/finder/Symfony/Component/Finder/Tests/Iterator/FileTypeFilterIteratorTest.php
@@ -55,7 +55,7 @@ class FileTypeFilterIteratorTest extends RealIteratorTestCase
 
 class InnerTypeIterator extends \ArrayIterator
 {
-   public function current()
+    public function current()
     {
         return new \SplFileInfo(parent::current());
     }
diff --git a/vendor/symfony/finder/Symfony/Component/Finder/Tests/Iterator/FilecontentFilterIteratorTest.php b/vendor/symfony/finder/Symfony/Component/Finder/Tests/Iterator/FilecontentFilterIteratorTest.php
index dbc05b5..744bdae 100644
--- a/vendor/symfony/finder/Symfony/Component/Finder/Tests/Iterator/FilecontentFilterIteratorTest.php
+++ b/vendor/symfony/finder/Symfony/Component/Finder/Tests/Iterator/FilecontentFilterIteratorTest.php
@@ -15,7 +15,6 @@ use Symfony\Component\Finder\Iterator\FilecontentFilterIterator;
 
 class FilecontentFilterIteratorTest extends IteratorTestCase
 {
-
     public function testAccept()
     {
         $inner = new MockFileListIterator(array('test.txt'));
@@ -51,31 +50,31 @@ class FilecontentFilterIteratorTest extends IteratorTestCase
         $inner = new MockFileListIterator();
 
         $inner[] = new MockSplFileInfo(array(
-            'name'     => 'a.txt',
+            'name' => 'a.txt',
             'contents' => 'Lorem ipsum...',
-            'type'     => 'file',
-            'mode'     => 'r+')
+            'type' => 'file',
+            'mode' => 'r+', )
         );
 
         $inner[] = new MockSplFileInfo(array(
-            'name'     => 'b.yml',
+            'name' => 'b.yml',
             'contents' => 'dolor sit...',
-            'type'     => 'file',
-            'mode'     => 'r+')
+            'type' => 'file',
+            'mode' => 'r+', )
         );
 
         $inner[] = new MockSplFileInfo(array(
-            'name'     => 'some/other/dir/third.php',
+            'name' => 'some/other/dir/third.php',
             'contents' => 'amet...',
-            'type'     => 'file',
-            'mode'     => 'r+')
+            'type' => 'file',
+            'mode' => 'r+', )
         );
 
         $inner[] = new MockSplFileInfo(array(
-            'name'     => 'unreadable-file.txt',
+            'name' => 'unreadable-file.txt',
             'contents' => false,
-            'type'     => 'file',
-            'mode'     => 'r+')
+            'type' => 'file',
+            'mode' => 'r+', )
         );
 
         return array(
diff --git a/vendor/symfony/finder/Symfony/Component/Finder/Tests/Iterator/IteratorTestCase.php b/vendor/symfony/finder/Symfony/Component/Finder/Tests/Iterator/IteratorTestCase.php
index 504cfb0..ae7388e 100644
--- a/vendor/symfony/finder/Symfony/Component/Finder/Tests/Iterator/IteratorTestCase.php
+++ b/vendor/symfony/finder/Symfony/Component/Finder/Tests/Iterator/IteratorTestCase.php
@@ -35,9 +35,34 @@ abstract class IteratorTestCase extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * Same as IteratorTestCase::assertIterator with foreach usage
+     *  Same as assertOrderedIterator, but checks the order of groups of
+     *  array elements.
      *
-     * @param array $expected
+     *  @param array $expected - an array of arrays. For any two subarrays
+     *      $a and $b such that $a goes before $b in $expected, the method
+     *      asserts that any element of $a goes before any element of $b
+     *      in the sequence generated by $iterator
+     *  @param \Traversable $iterator
+     */
+    protected function assertOrderedIteratorForGroups($expected, \Traversable $iterator)
+    {
+        $values = array_values(array_map(function (\SplFileInfo $fileinfo) { return $fileinfo->getPathname(); }, iterator_to_array($iterator)));
+
+        foreach ($expected as $subarray) {
+            $temp = array();
+            while (count($values) && count($temp) < count($subarray)) {
+                array_push($temp, array_shift($values));
+            }
+            sort($temp);
+            sort($subarray);
+            $this->assertEquals($subarray, $temp);
+        }
+    }
+
+    /**
+     * Same as IteratorTestCase::assertIterator with foreach usage.
+     *
+     * @param array        $expected
      * @param \Traversable $iterator
      */
     protected function assertIteratorInForeach($expected, \Traversable $iterator)
@@ -55,9 +80,9 @@ abstract class IteratorTestCase extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * Same as IteratorTestCase::assertOrderedIterator with foreach usage
+     * Same as IteratorTestCase::assertOrderedIterator with foreach usage.
      *
-     * @param array $expected
+     * @param array        $expected
      * @param \Traversable $iterator
      */
     protected function assertOrderedIteratorInForeach($expected, \Traversable $iterator)
diff --git a/vendor/symfony/finder/Symfony/Component/Finder/Tests/Iterator/MockSplFileInfo.php b/vendor/symfony/finder/Symfony/Component/Finder/Tests/Iterator/MockSplFileInfo.php
index c8608bf..f2e8f8e 100644
--- a/vendor/symfony/finder/Symfony/Component/Finder/Tests/Iterator/MockSplFileInfo.php
+++ b/vendor/symfony/finder/Symfony/Component/Finder/Tests/Iterator/MockSplFileInfo.php
@@ -14,13 +14,13 @@ namespace Symfony\Component\Finder\Tests\Iterator;
 class MockSplFileInfo extends \SplFileInfo
 {
     const   TYPE_DIRECTORY = 1;
-    const   TYPE_FILE      = 2;
-    const   TYPE_UNKNOWN   = 3;
+    const   TYPE_FILE = 2;
+    const   TYPE_UNKNOWN = 3;
 
-    private $contents         = null;
-    private $mode             = null;
-    private $type             = null;
-    private $relativePath     = null;
+    private $contents = null;
+    private $mode = null;
+    private $type = null;
+    private $relativePath = null;
     private $relativePathname = null;
 
     public function __construct($param)
@@ -29,11 +29,11 @@ class MockSplFileInfo extends \SplFileInfo
             parent::__construct($param);
         } elseif (is_array($param)) {
             $defaults = array(
-              'name'             => 'file.txt',
-              'contents'         => null,
-              'mode'             => null,
-              'type'             => null,
-              'relativePath'     => null,
+              'name' => 'file.txt',
+              'contents' => null,
+              'mode' => null,
+              'type' => null,
+              'relativePath' => null,
               'relativePathname' => null,
             );
             $defaults = array_merge($defaults, $param);
diff --git a/vendor/symfony/finder/Symfony/Component/Finder/Tests/Iterator/PathFilterIteratorTest.php b/vendor/symfony/finder/Symfony/Component/Finder/Tests/Iterator/PathFilterIteratorTest.php
index 6f83e44..579beed 100644
--- a/vendor/symfony/finder/Symfony/Component/Finder/Tests/Iterator/PathFilterIteratorTest.php
+++ b/vendor/symfony/finder/Symfony/Component/Finder/Tests/Iterator/PathFilterIteratorTest.php
@@ -15,7 +15,6 @@ use Symfony\Component\Finder\Iterator\PathFilterIterator;
 
 class PathFilterIteratorTest extends IteratorTestCase
 {
-
     /**
      * @dataProvider getTestFilterData
      */
@@ -31,38 +30,38 @@ class PathFilterIteratorTest extends IteratorTestCase
 
         //PATH:   A/B/C/abc.dat
         $inner[] = new MockSplFileInfo(array(
-            'name'              => 'abc.dat',
-            'relativePathname'  => 'A'.DIRECTORY_SEPARATOR.'B'.DIRECTORY_SEPARATOR.'C'.DIRECTORY_SEPARATOR.'abc.dat',
+            'name' => 'abc.dat',
+            'relativePathname' => 'A'.DIRECTORY_SEPARATOR.'B'.DIRECTORY_SEPARATOR.'C'.DIRECTORY_SEPARATOR.'abc.dat',
         ));
 
         //PATH:   A/B/ab.dat
         $inner[] = new MockSplFileInfo(array(
-            'name'              => 'ab.dat',
-            'relativePathname'  => 'A'.DIRECTORY_SEPARATOR.'B'.DIRECTORY_SEPARATOR.'ab.dat',
+            'name' => 'ab.dat',
+            'relativePathname' => 'A'.DIRECTORY_SEPARATOR.'B'.DIRECTORY_SEPARATOR.'ab.dat',
         ));
 
         //PATH:   A/a.dat
         $inner[] = new MockSplFileInfo(array(
-            'name'              => 'a.dat',
-            'relativePathname'  => 'A'.DIRECTORY_SEPARATOR.'a.dat',
+            'name' => 'a.dat',
+            'relativePathname' => 'A'.DIRECTORY_SEPARATOR.'a.dat',
         ));
 
         //PATH:   copy/A/B/C/abc.dat.copy
         $inner[] = new MockSplFileInfo(array(
-            'name'              => 'abc.dat.copy',
-            'relativePathname'  => 'copy'.DIRECTORY_SEPARATOR.'A'.DIRECTORY_SEPARATOR.'B'.DIRECTORY_SEPARATOR.'C'.DIRECTORY_SEPARATOR.'abc.dat',
+            'name' => 'abc.dat.copy',
+            'relativePathname' => 'copy'.DIRECTORY_SEPARATOR.'A'.DIRECTORY_SEPARATOR.'B'.DIRECTORY_SEPARATOR.'C'.DIRECTORY_SEPARATOR.'abc.dat',
         ));
 
         //PATH:   copy/A/B/ab.dat.copy
         $inner[] = new MockSplFileInfo(array(
-            'name'              => 'ab.dat.copy',
-            'relativePathname'  => 'copy'.DIRECTORY_SEPARATOR.'A'.DIRECTORY_SEPARATOR.'B'.DIRECTORY_SEPARATOR.'ab.dat',
+            'name' => 'ab.dat.copy',
+            'relativePathname' => 'copy'.DIRECTORY_SEPARATOR.'A'.DIRECTORY_SEPARATOR.'B'.DIRECTORY_SEPARATOR.'ab.dat',
         ));
 
         //PATH:   copy/A/a.dat.copy
         $inner[] = new MockSplFileInfo(array(
-            'name'              => 'a.dat.copy',
-            'relativePathname'  => 'copy'.DIRECTORY_SEPARATOR.'A'.DIRECTORY_SEPARATOR.'a.dat',
+            'name' => 'a.dat.copy',
+            'relativePathname' => 'copy'.DIRECTORY_SEPARATOR.'A'.DIRECTORY_SEPARATOR.'a.dat',
         ));
 
         return array(
@@ -81,5 +80,4 @@ class PathFilterIteratorTest extends IteratorTestCase
 
         );
     }
-
 }
diff --git a/vendor/symfony/finder/Symfony/Component/Finder/Tests/Iterator/RealIteratorTestCase.php b/vendor/symfony/finder/Symfony/Component/Finder/Tests/Iterator/RealIteratorTestCase.php
index 65edb1e..e22476d 100644
--- a/vendor/symfony/finder/Symfony/Component/Finder/Tests/Iterator/RealIteratorTestCase.php
+++ b/vendor/symfony/finder/Symfony/Component/Finder/Tests/Iterator/RealIteratorTestCase.php
@@ -13,13 +13,12 @@ namespace Symfony\Component\Finder\Tests\Iterator;
 
 abstract class RealIteratorTestCase extends IteratorTestCase
 {
-
     protected static $tmpDir;
     protected static $files;
 
     public static function setUpBeforeClass()
     {
-        self::$tmpDir = realpath(sys_get_temp_dir()).DIRECTORY_SEPARATOR.'symfony2_finder';
+        self::$tmpDir = realpath(sys_get_temp_dir()).DIRECTORY_SEPARATOR.'symfony_finder';
 
         self::$files = array(
             '.git/',
@@ -32,7 +31,7 @@ abstract class RealIteratorTestCase extends IteratorTestCase
             'foo/bar.tmp',
             'test.php',
             'toto/',
-            'foo bar'
+            'foo bar',
         );
 
         self::$files = self::toAbsolute(self::$files);
@@ -75,13 +74,17 @@ abstract class RealIteratorTestCase extends IteratorTestCase
          * Without the call to setUpBeforeClass() property can be null.
          */
         if (!self::$tmpDir) {
-            self::$tmpDir = realpath(sys_get_temp_dir()).DIRECTORY_SEPARATOR.'symfony2_finder';
+            self::$tmpDir = realpath(sys_get_temp_dir()).DIRECTORY_SEPARATOR.'symfony_finder';
         }
 
         if (is_array($files)) {
             $f = array();
             foreach ($files as $file) {
-                $f[] = self::$tmpDir.DIRECTORY_SEPARATOR.str_replace('/', DIRECTORY_SEPARATOR, $file);
+                if (is_array($file)) {
+                    $f[] = self::toAbsolute($file);
+                } else {
+                    $f[] = self::$tmpDir.DIRECTORY_SEPARATOR.str_replace('/', DIRECTORY_SEPARATOR, $file);
+                }
             }
 
             return $f;
@@ -103,5 +106,4 @@ abstract class RealIteratorTestCase extends IteratorTestCase
 
         return $f;
     }
-
 }
diff --git a/vendor/symfony/finder/Symfony/Component/Finder/Tests/Iterator/RecursiveDirectoryIteratorTest.php b/vendor/symfony/finder/Symfony/Component/Finder/Tests/Iterator/RecursiveDirectoryIteratorTest.php
index b9ba38b..412054b 100644
--- a/vendor/symfony/finder/Symfony/Component/Finder/Tests/Iterator/RecursiveDirectoryIteratorTest.php
+++ b/vendor/symfony/finder/Symfony/Component/Finder/Tests/Iterator/RecursiveDirectoryIteratorTest.php
@@ -18,10 +18,10 @@ class RecursiveDirectoryIteratorTest extends IteratorTestCase
     /**
      * @dataProvider getPaths
      *
-     * @param string  $path
-     * @param bool    $seekable
-     * @param array   $contains
-     * @param string  $message
+     * @param string $path
+     * @param bool   $seekable
+     * @param array  $contains
+     * @param string $message
      */
     public function testRewind($path, $seekable, $contains, $message = null)
     {
@@ -39,10 +39,10 @@ class RecursiveDirectoryIteratorTest extends IteratorTestCase
     /**
      * @dataProvider getPaths
      *
-     * @param string  $path
-     * @param bool    $seekable
-     * @param array   $contains
-     * @param string  $message
+     * @param string $path
+     * @param bool   $seekable
+     * @param array  $contains
+     * @param string $message
      */
     public function testSeek($path, $seekable, $contains, $message = null)
     {
diff --git a/vendor/symfony/finder/Symfony/Component/Finder/Tests/Iterator/SizeRangeFilterIteratorTest.php b/vendor/symfony/finder/Symfony/Component/Finder/Tests/Iterator/SizeRangeFilterIteratorTest.php
index 726df9e..8780db4 100644
--- a/vendor/symfony/finder/Symfony/Component/Finder/Tests/Iterator/SizeRangeFilterIteratorTest.php
+++ b/vendor/symfony/finder/Symfony/Component/Finder/Tests/Iterator/SizeRangeFilterIteratorTest.php
@@ -46,7 +46,7 @@ class SizeRangeFilterIteratorTest extends RealIteratorTestCase
 
 class InnerSizeIterator extends \ArrayIterator
 {
-   public function current()
+    public function current()
     {
         return new \SplFileInfo(parent::current());
     }
diff --git a/vendor/symfony/finder/Symfony/Component/Finder/Tests/Iterator/SortableIteratorTest.php b/vendor/symfony/finder/Symfony/Component/Finder/Tests/Iterator/SortableIteratorTest.php
index a2ca6ef..e2f433f 100644
--- a/vendor/symfony/finder/Symfony/Component/Finder/Tests/Iterator/SortableIteratorTest.php
+++ b/vendor/symfony/finder/Symfony/Component/Finder/Tests/Iterator/SortableIteratorTest.php
@@ -54,12 +54,17 @@ class SortableIteratorTest extends RealIteratorTestCase
 
         $iterator = new SortableIterator($inner, $mode);
 
-        $this->assertOrderedIterator($expected, $iterator);
+        if ($mode === SortableIterator::SORT_BY_ACCESSED_TIME
+            || $mode === SortableIterator::SORT_BY_CHANGED_TIME
+            || $mode === SortableIterator::SORT_BY_MODIFIED_TIME) {
+            $this->assertOrderedIteratorForGroups($expected, $iterator);
+        } else {
+            $this->assertOrderedIterator($expected, $iterator);
+        }
     }
 
     public function getAcceptData()
     {
-
         $sortByName = array(
             '.bar',
             '.foo',
@@ -103,45 +108,53 @@ class SortableIteratorTest extends RealIteratorTestCase
         );
 
         $sortByAccessedTime = array(
-            'foo/bar.tmp',
-            'test.php',
-            'toto',
-            'foo bar',
-            'foo',
-            'test.py',
-            '.foo',
-            '.foo/.bar',
-            '.foo/bar',
-            '.git',
-            '.bar'
+            // For these two files the access time was set to 2005-10-15
+            array('foo/bar.tmp', 'test.php'),
+            // These files were created more or less at the same time
+            array(
+                '.git',
+                '.foo',
+                '.foo/.bar',
+                '.foo/bar',
+                'test.py',
+                'foo',
+                'toto',
+                'foo bar',
+            ),
+            // This file was accessed after sleeping for 1 sec
+            array('.bar'),
         );
 
         $sortByChangedTime = array(
-            'foo',
-            'foo/bar.tmp',
-            'toto',
-            '.git',
-            '.bar',
-            '.foo',
-            'foo bar',
-            '.foo/.bar',
-            '.foo/bar',
-            'test.php',
-            'test.py'
+            array(
+                '.git',
+                '.foo',
+                '.foo/.bar',
+                '.foo/bar',
+                '.bar',
+                'foo',
+                'foo/bar.tmp',
+                'toto',
+                'foo bar',
+            ),
+            array('test.php'),
+            array('test.py'),
         );
 
         $sortByModifiedTime = array(
-            'foo/bar.tmp',
-            'foo',
-            'toto',
-            '.git',
-            '.bar',
-            '.foo',
-            'foo bar',
-            '.foo/.bar',
-            '.foo/bar',
-            'test.php',
-            'test.py'
+            array(
+                '.git',
+                '.foo',
+                '.foo/.bar',
+                '.foo/bar',
+                '.bar',
+                'foo',
+                'foo/bar.tmp',
+                'toto',
+                'foo bar',
+            ),
+            array('test.php'),
+            array('test.py'),
         );
 
         return array(
diff --git a/vendor/symfony/finder/Symfony/Component/Finder/composer.json b/vendor/symfony/finder/Symfony/Component/Finder/composer.json
index b6e6997..a91b470 100644
--- a/vendor/symfony/finder/Symfony/Component/Finder/composer.json
+++ b/vendor/symfony/finder/Symfony/Component/Finder/composer.json
@@ -25,7 +25,7 @@
     "minimum-stability": "dev",
     "extra": {
         "branch-alias": {
-            "dev-master": "2.5-dev"
+            "dev-master": "2.6-dev"
         }
     }
 }
diff --git a/vendor/symfony/finder/Symfony/Component/Finder/phpunit.xml.dist b/vendor/symfony/finder/Symfony/Component/Finder/phpunit.xml.dist
index ccef55a..0ed1223 100644
--- a/vendor/symfony/finder/Symfony/Component/Finder/phpunit.xml.dist
+++ b/vendor/symfony/finder/Symfony/Component/Finder/phpunit.xml.dist
@@ -6,6 +6,10 @@
          colors="true"
          bootstrap="vendor/autoload.php"
 >
+    <php>
+        <!-- Silence E_USER_DEPRECATED (-16385 == -1 & ~E_USER_DEPRECATED) -->
+        <ini name="error_reporting" value="-16385"/>
+    </php>
     <testsuites>
         <testsuite name="Symfony Finder Component Test Suite">
             <directory>./Tests/</directory>
diff --git a/vendor/symfony/process/Symfony/Component/Process/ExecutableFinder.php b/vendor/symfony/process/Symfony/Component/Process/ExecutableFinder.php
index 6ae74dc..a9c0a5c 100644
--- a/vendor/symfony/process/Symfony/Component/Process/ExecutableFinder.php
+++ b/vendor/symfony/process/Symfony/Component/Process/ExecutableFinder.php
@@ -72,13 +72,13 @@ class ExecutableFinder
         }
 
         $suffixes = array('');
-        if (defined('PHP_WINDOWS_VERSION_BUILD')) {
+        if ('\\' === DIRECTORY_SEPARATOR) {
             $pathExt = getenv('PATHEXT');
             $suffixes = $pathExt ? explode(PATH_SEPARATOR, $pathExt) : $this->suffixes;
         }
         foreach ($suffixes as $suffix) {
             foreach ($dirs as $dir) {
-                if (is_file($file = $dir.DIRECTORY_SEPARATOR.$name.$suffix) && (defined('PHP_WINDOWS_VERSION_BUILD') || is_executable($file))) {
+                if (is_file($file = $dir.DIRECTORY_SEPARATOR.$name.$suffix) && ('\\' === DIRECTORY_SEPARATOR || is_executable($file))) {
                     return $file;
                 }
             }
diff --git a/vendor/symfony/process/Symfony/Component/Process/LICENSE b/vendor/symfony/process/Symfony/Component/Process/LICENSE
index 0b3292c..43028bc 100644
--- a/vendor/symfony/process/Symfony/Component/Process/LICENSE
+++ b/vendor/symfony/process/Symfony/Component/Process/LICENSE
@@ -1,4 +1,4 @@
-Copyright (c) 2004-2014 Fabien Potencier
+Copyright (c) 2004-2015 Fabien Potencier
 
 Permission is hereby granted, free of charge, to any person obtaining a copy
 of this software and associated documentation files (the "Software"), to deal
diff --git a/vendor/symfony/process/Symfony/Component/Process/PhpExecutableFinder.php b/vendor/symfony/process/Symfony/Component/Process/PhpExecutableFinder.php
index cda8699..91d6d78 100644
--- a/vendor/symfony/process/Symfony/Component/Process/PhpExecutableFinder.php
+++ b/vendor/symfony/process/Symfony/Component/Process/PhpExecutableFinder.php
@@ -29,13 +29,15 @@ class PhpExecutableFinder
     /**
      * Finds The PHP executable.
      *
+     * @param bool $includeArgs Whether or not include command arguments
+     *
      * @return string|false The PHP executable path or false if it cannot be found
      */
-    public function find()
+    public function find($includeArgs = true)
     {
         // HHVM support
         if (defined('HHVM_VERSION')) {
-            return (false !== ($hhvm = getenv('PHP_BINARY')) ? $hhvm : PHP_BINARY).' --php';
+            return (false !== ($hhvm = getenv('PHP_BINARY')) ? $hhvm : PHP_BINARY).($includeArgs ? ' '.implode(' ', $this->findArguments()) : '');
         }
 
         // PHP_BINARY return the current sapi executable
@@ -58,10 +60,27 @@ class PhpExecutableFinder
         }
 
         $dirs = array(PHP_BINDIR);
-        if (defined('PHP_WINDOWS_VERSION_BUILD')) {
+        if ('\\' === DIRECTORY_SEPARATOR) {
             $dirs[] = 'C:\xampp\php\\';
         }
 
         return $this->executableFinder->find('php', false, $dirs);
     }
+
+    /**
+     * Finds the PHP executable arguments.
+     *
+     * @return array The PHP executable arguments
+     */
+    public function findArguments()
+    {
+        $arguments = array();
+
+        // HHVM support
+        if (defined('HHVM_VERSION')) {
+            $arguments[] = '--php';
+        }
+
+        return $arguments;
+    }
 }
diff --git a/vendor/symfony/process/Symfony/Component/Process/PhpProcess.php b/vendor/symfony/process/Symfony/Component/Process/PhpProcess.php
index 93948e1..bc25154 100644
--- a/vendor/symfony/process/Symfony/Component/Process/PhpProcess.php
+++ b/vendor/symfony/process/Symfony/Component/Process/PhpProcess.php
@@ -31,11 +31,11 @@ class PhpProcess extends Process
     /**
      * Constructor.
      *
-     * @param string  $script  The PHP script to run (as a string)
-     * @param string  $cwd     The working directory
-     * @param array   $env     The environment variables
-     * @param int     $timeout The timeout in seconds
-     * @param array   $options An array of options for proc_open
+     * @param string $script  The PHP script to run (as a string)
+     * @param string $cwd     The working directory
+     * @param array  $env     The environment variables
+     * @param int    $timeout The timeout in seconds
+     * @param array  $options An array of options for proc_open
      *
      * @api
      */
diff --git a/vendor/symfony/process/Symfony/Component/Process/Pipes/AbstractPipes.php b/vendor/symfony/process/Symfony/Component/Process/Pipes/AbstractPipes.php
new file mode 100644
index 0000000..d8b57d0
--- /dev/null
+++ b/vendor/symfony/process/Symfony/Component/Process/Pipes/AbstractPipes.php
@@ -0,0 +1,74 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Process\Pipes;
+
+/**
+ * @author Romain Neutron <imprec@gmail.com>
+ *
+ * @internal
+ */
+abstract class AbstractPipes implements PipesInterface
+{
+    /** @var array */
+    public $pipes = array();
+
+    /** @var string */
+    protected $inputBuffer = '';
+    /** @var resource|null */
+    protected $input;
+
+    /** @var bool */
+    private $blocked = true;
+
+    /**
+     * {@inheritdoc}
+     */
+    public function close()
+    {
+        foreach ($this->pipes as $pipe) {
+            fclose($pipe);
+        }
+        $this->pipes = array();
+    }
+
+    /**
+     * Returns true if a system call has been interrupted.
+     *
+     * @return bool
+     */
+    protected function hasSystemCallBeenInterrupted()
+    {
+        $lastError = error_get_last();
+
+        // stream_select returns false when the `select` system call is interrupted by an incoming signal
+        return isset($lastError['message']) && false !== stripos($lastError['message'], 'interrupted system call');
+    }
+
+    /**
+     * Unblocks streams
+     */
+    protected function unblock()
+    {
+        if (!$this->blocked) {
+            return;
+        }
+
+        foreach ($this->pipes as $pipe) {
+            stream_set_blocking($pipe, 0);
+        }
+        if (null !== $this->input) {
+            stream_set_blocking($this->input, 0);
+        }
+
+        $this->blocked = false;
+    }
+}
diff --git a/vendor/symfony/process/Symfony/Component/Process/Pipes/PipesInterface.php b/vendor/symfony/process/Symfony/Component/Process/Pipes/PipesInterface.php
new file mode 100644
index 0000000..09d3f61
--- /dev/null
+++ b/vendor/symfony/process/Symfony/Component/Process/Pipes/PipesInterface.php
@@ -0,0 +1,60 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Process\Pipes;
+
+/**
+ * PipesInterface manages descriptors and pipes for the use of proc_open.
+ *
+ * @author Romain Neutron <imprec@gmail.com>
+ *
+ * @internal
+ */
+interface PipesInterface
+{
+    const CHUNK_SIZE = 16384;
+
+    /**
+     * Returns an array of descriptors for the use of proc_open.
+     *
+     * @return array
+     */
+    public function getDescriptors();
+
+    /**
+     * Returns an array of filenames indexed by their related stream in case these pipes use temporary files.
+     *
+     * @return string[]
+     */
+    public function getFiles();
+
+    /**
+     * Reads data in file handles and pipes.
+     *
+     * @param bool $blocking Whether to use blocking calls or not.
+     * @param bool $close    Whether to close pipes if they've reached EOF.
+     *
+     * @return string[] An array of read data indexed by their fd.
+     */
+    public function readAndWrite($blocking, $close = false);
+
+    /**
+     * Returns if the current state has open file handles or pipes.
+     *
+     * @return bool
+     */
+    public function areOpen();
+
+    /**
+     * Closes file handles and pipes.
+     */
+    public function close();
+}
diff --git a/vendor/symfony/process/Symfony/Component/Process/Pipes/UnixPipes.php b/vendor/symfony/process/Symfony/Component/Process/Pipes/UnixPipes.php
new file mode 100644
index 0000000..b384103
--- /dev/null
+++ b/vendor/symfony/process/Symfony/Component/Process/Pipes/UnixPipes.php
@@ -0,0 +1,214 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Process\Pipes;
+
+use Symfony\Component\Process\Process;
+
+/**
+ * UnixPipes implementation uses unix pipes as handles.
+ *
+ * @author Romain Neutron <imprec@gmail.com>
+ *
+ * @internal
+ */
+class UnixPipes extends AbstractPipes
+{
+    /** @var bool */
+    private $ttyMode;
+    /** @var bool */
+    private $ptyMode;
+    /** @var bool */
+    private $disableOutput;
+
+    public function __construct($ttyMode, $ptyMode, $input, $disableOutput)
+    {
+        $this->ttyMode = (bool) $ttyMode;
+        $this->ptyMode = (bool) $ptyMode;
+        $this->disableOutput = (bool) $disableOutput;
+
+        if (is_resource($input)) {
+            $this->input = $input;
+        } else {
+            $this->inputBuffer = (string) $input;
+        }
+    }
+
+    public function __destruct()
+    {
+        $this->close();
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function getDescriptors()
+    {
+        if ($this->disableOutput) {
+            $nullstream = fopen('/dev/null', 'c');
+
+            return array(
+                array('pipe', 'r'),
+                $nullstream,
+                $nullstream,
+            );
+        }
+
+        if ($this->ttyMode) {
+            return array(
+                array('file', '/dev/tty', 'r'),
+                array('file', '/dev/tty', 'w'),
+                array('file', '/dev/tty', 'w'),
+            );
+        }
+
+        if ($this->ptyMode && Process::isPtySupported()) {
+            return array(
+                array('pty'),
+                array('pty'),
+                array('pty'),
+            );
+        }
+
+        return array(
+            array('pipe', 'r'),
+            array('pipe', 'w'), // stdout
+            array('pipe', 'w'), // stderr
+        );
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function getFiles()
+    {
+        return array();
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function readAndWrite($blocking, $close = false)
+    {
+        // only stdin is left open, job has been done !
+        // we can now close it
+        if (1 === count($this->pipes) && array(0) === array_keys($this->pipes)) {
+            fclose($this->pipes[0]);
+            unset($this->pipes[0]);
+        }
+
+        if (empty($this->pipes)) {
+            return array();
+        }
+
+        $this->unblock();
+
+        $read = array();
+
+        if (null !== $this->input) {
+            // if input is a resource, let's add it to stream_select argument to
+            // fill a buffer
+            $r = array_merge($this->pipes, array('input' => $this->input));
+        } else {
+            $r = $this->pipes;
+        }
+        // discard read on stdin
+        unset($r[0]);
+
+        $w = isset($this->pipes[0]) ? array($this->pipes[0]) : null;
+        $e = null;
+
+        // let's have a look if something changed in streams
+        if (false === $n = @stream_select($r, $w, $e, 0, $blocking ? Process::TIMEOUT_PRECISION * 1E6 : 0)) {
+            // if a system call has been interrupted, forget about it, let's try again
+            // otherwise, an error occurred, let's reset pipes
+            if (!$this->hasSystemCallBeenInterrupted()) {
+                $this->pipes = array();
+            }
+
+            return $read;
+        }
+
+        // nothing has changed
+        if (0 === $n) {
+            return $read;
+        }
+
+        foreach ($r as $pipe) {
+            // prior PHP 5.4 the array passed to stream_select is modified and
+            // lose key association, we have to find back the key
+            $type = (false !== $found = array_search($pipe, $this->pipes)) ? $found : 'input';
+            $data = '';
+            while ('' !== $dataread = (string) fread($pipe, self::CHUNK_SIZE)) {
+                $data .= $dataread;
+            }
+
+            if ('' !== $data) {
+                if ($type === 'input') {
+                    $this->inputBuffer .= $data;
+                } else {
+                    $read[$type] = $data;
+                }
+            }
+
+            if (false === $data || (true === $close && feof($pipe) && '' === $data)) {
+                if ($type === 'input') {
+                    // no more data to read on input resource
+                    // use an empty buffer in the next reads
+                    $this->input = null;
+                } else {
+                    fclose($this->pipes[$type]);
+                    unset($this->pipes[$type]);
+                }
+            }
+        }
+
+        if (null !== $w && 0 < count($w)) {
+            while (strlen($this->inputBuffer)) {
+                $written = fwrite($w[0], $this->inputBuffer, 2 << 18); // write 512k
+                if ($written > 0) {
+                    $this->inputBuffer = (string) substr($this->inputBuffer, $written);
+                } else {
+                    break;
+                }
+            }
+        }
+
+        // no input to read on resource, buffer is empty and stdin still open
+        if ('' === $this->inputBuffer && null === $this->input && isset($this->pipes[0])) {
+            fclose($this->pipes[0]);
+            unset($this->pipes[0]);
+        }
+
+        return $read;
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function areOpen()
+    {
+        return (bool) $this->pipes;
+    }
+
+    /**
+     * Creates a new UnixPipes instance
+     *
+     * @param Process         $process
+     * @param string|resource $input
+     *
+     * @return UnixPipes
+     */
+    public static function create(Process $process, $input)
+    {
+        return new static($process->isTty(), $process->isPty(), $input, $process->isOutputDisabled());
+    }
+}
diff --git a/vendor/symfony/process/Symfony/Component/Process/Pipes/WindowsPipes.php b/vendor/symfony/process/Symfony/Component/Process/Pipes/WindowsPipes.php
new file mode 100644
index 0000000..01dd5d0
--- /dev/null
+++ b/vendor/symfony/process/Symfony/Component/Process/Pipes/WindowsPipes.php
@@ -0,0 +1,254 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Process\Pipes;
+
+use Symfony\Component\Process\Process;
+use Symfony\Component\Process\Exception\RuntimeException;
+
+/**
+ * WindowsPipes implementation uses temporary files as handles.
+ *
+ * @see https://bugs.php.net/bug.php?id=51800
+ * @see https://bugs.php.net/bug.php?id=65650
+ *
+ * @author Romain Neutron <imprec@gmail.com>
+ *
+ * @internal
+ */
+class WindowsPipes extends AbstractPipes
+{
+    /** @var array */
+    private $files = array();
+    /** @var array */
+    private $fileHandles = array();
+    /** @var array */
+    private $readBytes = array(
+        Process::STDOUT => 0,
+        Process::STDERR => 0,
+    );
+    /** @var bool */
+    private $disableOutput;
+
+    public function __construct($disableOutput, $input)
+    {
+        $this->disableOutput = (bool) $disableOutput;
+
+        if (!$this->disableOutput) {
+            // Fix for PHP bug #51800: reading from STDOUT pipe hangs forever on Windows if the output is too big.
+            // Workaround for this problem is to use temporary files instead of pipes on Windows platform.
+            //
+            // @see https://bugs.php.net/bug.php?id=51800
+            $this->files = array(
+                Process::STDOUT => tempnam(sys_get_temp_dir(), 'sf_proc_stdout'),
+                Process::STDERR => tempnam(sys_get_temp_dir(), 'sf_proc_stderr'),
+            );
+            foreach ($this->files as $offset => $file) {
+                $this->fileHandles[$offset] = fopen($this->files[$offset], 'rb');
+                if (false === $this->fileHandles[$offset]) {
+                    throw new RuntimeException('A temporary file could not be opened to write the process output to, verify that your TEMP environment variable is writable');
+                }
+            }
+        }
+
+        if (is_resource($input)) {
+            $this->input = $input;
+        } else {
+            $this->inputBuffer = $input;
+        }
+    }
+
+    public function __destruct()
+    {
+        $this->close();
+        $this->removeFiles();
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function getDescriptors()
+    {
+        if ($this->disableOutput) {
+            $nullstream = fopen('NUL', 'c');
+
+            return array(
+                array('pipe', 'r'),
+                $nullstream,
+                $nullstream,
+            );
+        }
+
+        // We're not using pipe on Windows platform as it hangs (https://bugs.php.net/bug.php?id=51800)
+        // We're not using file handles as it can produce corrupted output https://bugs.php.net/bug.php?id=65650
+        // So we redirect output within the commandline and pass the nul device to the process
+        return array(
+            array('pipe', 'r'),
+            array('file', 'NUL', 'w'),
+            array('file', 'NUL', 'w'),
+        );
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function getFiles()
+    {
+        return $this->files;
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function readAndWrite($blocking, $close = false)
+    {
+        $this->write($blocking, $close);
+
+        $read = array();
+        $fh = $this->fileHandles;
+        foreach ($fh as $type => $fileHandle) {
+            if (0 !== fseek($fileHandle, $this->readBytes[$type])) {
+                continue;
+            }
+            $data = '';
+            $dataread = null;
+            while (!feof($fileHandle)) {
+                if (false !== $dataread = fread($fileHandle, self::CHUNK_SIZE)) {
+                    $data .= $dataread;
+                }
+            }
+            if (0 < $length = strlen($data)) {
+                $this->readBytes[$type] += $length;
+                $read[$type] = $data;
+            }
+
+            if (false === $dataread || (true === $close && feof($fileHandle) && '' === $data)) {
+                fclose($this->fileHandles[$type]);
+                unset($this->fileHandles[$type]);
+            }
+        }
+
+        return $read;
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function areOpen()
+    {
+        return (bool) $this->pipes && (bool) $this->fileHandles;
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function close()
+    {
+        parent::close();
+        foreach ($this->fileHandles as $handle) {
+            fclose($handle);
+        }
+        $this->fileHandles = array();
+    }
+
+    /**
+     * Creates a new WindowsPipes instance.
+     *
+     * @param Process $process The process
+     * @param $input
+     *
+     * @return WindowsPipes
+     */
+    public static function create(Process $process, $input)
+    {
+        return new static($process->isOutputDisabled(), $input);
+    }
+
+    /**
+     * Removes temporary files
+     */
+    private function removeFiles()
+    {
+        foreach ($this->files as $filename) {
+            if (file_exists($filename)) {
+                @unlink($filename);
+            }
+        }
+        $this->files = array();
+    }
+
+    /**
+     * Writes input to stdin
+     *
+     * @param bool $blocking
+     * @param bool $close
+     */
+    private function write($blocking, $close)
+    {
+        if (empty($this->pipes)) {
+            return;
+        }
+
+        $this->unblock();
+
+        $r = null !== $this->input ? array('input' => $this->input) : null;
+        $w = isset($this->pipes[0]) ? array($this->pipes[0]) : null;
+        $e = null;
+
+        // let's have a look if something changed in streams
+        if (false === $n = @stream_select($r, $w, $e, 0, $blocking ? Process::TIMEOUT_PRECISION * 1E6 : 0)) {
+            // if a system call has been interrupted, forget about it, let's try again
+            // otherwise, an error occurred, let's reset pipes
+            if (!$this->hasSystemCallBeenInterrupted()) {
+                $this->pipes = array();
+            }
+
+            return;
+        }
+
+        // nothing has changed
+        if (0 === $n) {
+            return;
+        }
+
+        if (null !== $w && 0 < count($r)) {
+            $data = '';
+            while ($dataread = fread($r['input'], self::CHUNK_SIZE)) {
+                $data .= $dataread;
+            }
+
+            $this->inputBuffer .= $data;
+
+            if (false === $data || (true === $close && feof($r['input']) && '' === $data)) {
+                // no more data to read on input resource
+                // use an empty buffer in the next reads
+                $this->input = null;
+            }
+        }
+
+        if (null !== $w && 0 < count($w)) {
+            while (strlen($this->inputBuffer)) {
+                $written = fwrite($w[0], $this->inputBuffer, 2 << 18);
+                if ($written > 0) {
+                    $this->inputBuffer = (string) substr($this->inputBuffer, $written);
+                } else {
+                    break;
+                }
+            }
+        }
+
+        // no input to read on resource, buffer is empty and stdin still open
+        if ('' === $this->inputBuffer && null === $this->input && isset($this->pipes[0])) {
+            fclose($this->pipes[0]);
+            unset($this->pipes[0]);
+        }
+    }
+}
diff --git a/vendor/symfony/process/Symfony/Component/Process/Process.php b/vendor/symfony/process/Symfony/Component/Process/Process.php
index e914a4f..ece751d 100644
--- a/vendor/symfony/process/Symfony/Component/Process/Process.php
+++ b/vendor/symfony/process/Symfony/Component/Process/Process.php
@@ -16,12 +16,16 @@ use Symfony\Component\Process\Exception\LogicException;
 use Symfony\Component\Process\Exception\ProcessFailedException;
 use Symfony\Component\Process\Exception\ProcessTimedOutException;
 use Symfony\Component\Process\Exception\RuntimeException;
+use Symfony\Component\Process\Pipes\PipesInterface;
+use Symfony\Component\Process\Pipes\UnixPipes;
+use Symfony\Component\Process\Pipes\WindowsPipes;
 
 /**
  * Process is a thin wrapper around proc_* functions to easily
  * start independent PHP processes.
  *
  * @author Fabien Potencier <fabien@symfony.com>
+ * @author Romain Neutron <imprec@gmail.com>
  *
  * @api
  */
@@ -67,7 +71,7 @@ class Process
     private $pty;
 
     private $useFileHandles = false;
-    /** @var ProcessPipes */
+    /** @var PipesInterface */
     private $processPipes;
 
     private $latestSignal;
@@ -127,12 +131,12 @@ class Process
     /**
      * Constructor.
      *
-     * @param string             $commandline The command line to run
-     * @param string|null        $cwd         The working directory or null to use the working dir of the current PHP process
-     * @param array|null         $env         The environment variables or null to inherit
-     * @param string|null        $input       The input
-     * @param int|float|null     $timeout     The timeout in seconds or null to disable
-     * @param array              $options     An array of options for proc_open
+     * @param string         $commandline The command line to run
+     * @param string|null    $cwd         The working directory or null to use the working dir of the current PHP process
+     * @param array|null     $env         The environment variables or null to inherit
+     * @param string|null    $input       The input
+     * @param int|float|null $timeout     The timeout in seconds or null to disable
+     * @param array          $options     An array of options for proc_open
      *
      * @throws RuntimeException When proc_open is not installed
      *
@@ -151,7 +155,7 @@ class Process
         // on Gnu/Linux, PHP builds with --enable-maintainer-zts are also affected
         // @see : https://bugs.php.net/bug.php?id=51800
         // @see : https://bugs.php.net/bug.php?id=50524
-        if (null === $this->cwd && (defined('ZEND_THREAD_SAFE') || defined('PHP_WINDOWS_VERSION_BUILD'))) {
+        if (null === $this->cwd && (defined('ZEND_THREAD_SAFE') || '\\' === DIRECTORY_SEPARATOR)) {
             $this->cwd = getcwd();
         }
         if (null !== $env) {
@@ -160,10 +164,10 @@ class Process
 
         $this->input = $input;
         $this->setTimeout($timeout);
-        $this->useFileHandles = defined('PHP_WINDOWS_VERSION_BUILD');
+        $this->useFileHandles = '\\' === DIRECTORY_SEPARATOR;
         $this->pty = false;
         $this->enhanceWindowsCompatibility = true;
-        $this->enhanceSigchildCompatibility = !defined('PHP_WINDOWS_VERSION_BUILD') && $this->isSigchildEnabled();
+        $this->enhanceSigchildCompatibility = '\\' !== DIRECTORY_SEPARATOR && $this->isSigchildEnabled();
         $this->options = array_replace(array('suppress_errors' => true, 'binary_pipes' => true), $options);
     }
 
@@ -191,7 +195,7 @@ class Process
      * @param callable|null $callback A PHP callback to run whenever there is some
      *                                output available on STDOUT or STDERR
      *
-     * @return int     The exit status code
+     * @return int The exit status code
      *
      * @throws RuntimeException When process can't be launched
      * @throws RuntimeException When process stopped after receiving signal
@@ -215,9 +219,16 @@ class Process
      * @param callable|null $callback
      *
      * @return self
+     *
+     * @throws RuntimeException       if PHP was compiled with --enable-sigchild and the enhanced sigchild compatibility mode is not enabled
+     * @throws ProcessFailedException if the process didn't terminate successfully
      */
     public function mustRun($callback = null)
     {
+        if ($this->isSigchildEnabled() && !$this->enhanceSigchildCompatibility) {
+            throw new RuntimeException('This PHP has been compiled with --enable-sigchild. You must use setEnhanceSigchildCompatibility() to use this method.');
+        }
+
         if (0 !== $this->run($callback)) {
             throw new ProcessFailedException($this);
         }
@@ -265,7 +276,7 @@ class Process
 
         $commandline = $this->commandline;
 
-        if (defined('PHP_WINDOWS_VERSION_BUILD') && $this->enhanceWindowsCompatibility) {
+        if ('\\' === DIRECTORY_SEPARATOR && $this->enhanceWindowsCompatibility) {
             $commandline = 'cmd /V:ON /E:ON /C "('.$commandline.')';
             foreach ($this->processPipes->getFiles() as $offset => $filename) {
                 $commandline .= ' '.$offset.'>'.ProcessUtils::escapeArgument($filename);
@@ -284,13 +295,10 @@ class Process
         }
         $this->status = self::STATUS_STARTED;
 
-        $this->processPipes->unblock();
-
         if ($this->tty) {
             return;
         }
 
-        $this->processPipes->write(false, $this->input);
         $this->updateStatus(false);
         $this->checkTimeout();
     }
@@ -331,7 +339,7 @@ class Process
      *
      * @param callable|null $callback A valid PHP callback
      *
-     * @return int     The exitcode of the process
+     * @return int The exitcode of the process
      *
      * @throws RuntimeException When process timed out
      * @throws RuntimeException When process stopped after receiving signal
@@ -348,8 +356,8 @@ class Process
 
         do {
             $this->checkTimeout();
-            $running = defined('PHP_WINDOWS_VERSION_BUILD') ? $this->isRunning() : $this->processPipes->hasOpenHandles();
-            $close = !defined('PHP_WINDOWS_VERSION_BUILD') || !$running;;
+            $running = '\\' === DIRECTORY_SEPARATOR ? $this->isRunning() : $this->processPipes->areOpen();
+            $close = '\\' !== DIRECTORY_SEPARATOR || !$running;
             $this->readPipes(true, $close);
         } while ($running);
 
@@ -367,7 +375,7 @@ class Process
     /**
      * Returns the Pid (process identifier), if applicable.
      *
-     * @return int|null     The process id if running, null otherwise
+     * @return int|null The process id if running, null otherwise
      *
      * @throws RuntimeException In case --enable-sigchild is activated
      */
@@ -385,7 +393,7 @@ class Process
     /**
      * Sends a POSIX signal to the process.
      *
-     * @param  int     $signal A valid POSIX signal (see http://www.php.net/manual/en/pcntl.constants.php)
+     * @param int $signal A valid POSIX signal (see http://www.php.net/manual/en/pcntl.constants.php)
      *
      * @return Process
      *
@@ -406,6 +414,7 @@ class Process
      * @return Process
      *
      * @throws RuntimeException In case the process is already running
+     * @throws LogicException   if an idle timeout is set
      */
     public function disableOutput()
     {
@@ -467,7 +476,7 @@ class Process
 
         $this->requireProcessIsStarted(__FUNCTION__);
 
-        $this->readPipes(false, defined('PHP_WINDOWS_VERSION_BUILD') ? !$this->processInformation['running'] : true);
+        $this->readPipes(false, '\\' === DIRECTORY_SEPARATOR ? !$this->processInformation['running'] : true);
 
         return $this->stdout;
     }
@@ -490,6 +499,11 @@ class Process
         $data = $this->getOutput();
 
         $latest = substr($data, $this->incrementalOutputOffset);
+
+        if (false === $latest) {
+            return '';
+        }
+
         $this->incrementalOutputOffset = strlen($data);
 
         return $latest;
@@ -526,7 +540,7 @@ class Process
 
         $this->requireProcessIsStarted(__FUNCTION__);
 
-        $this->readPipes(false, defined('PHP_WINDOWS_VERSION_BUILD') ? !$this->processInformation['running'] : true);
+        $this->readPipes(false, '\\' === DIRECTORY_SEPARATOR ? !$this->processInformation['running'] : true);
 
         return $this->stderr;
     }
@@ -550,6 +564,11 @@ class Process
         $data = $this->getErrorOutput();
 
         $latest = substr($data, $this->incrementalErrorOutputOffset);
+
+        if (false === $latest) {
+            return '';
+        }
+
         $this->incrementalErrorOutputOffset = strlen($data);
 
         return $latest;
@@ -571,7 +590,7 @@ class Process
     /**
      * Returns the exit code returned by the process.
      *
-     * @return null|int     The exit status code, null if the Process is not terminated
+     * @return null|int The exit status code, null if the Process is not terminated
      *
      * @throws RuntimeException In case --enable-sigchild is activated and the sigchild compatibility mode is disabled
      *
@@ -613,7 +632,7 @@ class Process
     /**
      * Checks if the process ended successfully.
      *
-     * @return bool    true if the process ended successfully, false otherwise
+     * @return bool true if the process ended successfully, false otherwise
      *
      * @api
      */
@@ -715,7 +734,7 @@ class Process
     /**
      * Checks if the process is currently running.
      *
-     * @return bool    true if the process is currently running, false otherwise
+     * @return bool true if the process is currently running, false otherwise
      */
     public function isRunning()
     {
@@ -731,7 +750,7 @@ class Process
     /**
      * Checks if the process has been started with no regard to the current state.
      *
-     * @return bool    true if status is ready, false otherwise
+     * @return bool true if status is ready, false otherwise
      */
     public function isStarted()
     {
@@ -741,7 +760,7 @@ class Process
     /**
      * Checks if the process is terminated.
      *
-     * @return bool    true if process is terminated, false otherwise
+     * @return bool true if process is terminated, false otherwise
      */
     public function isTerminated()
     {
@@ -767,10 +786,10 @@ class Process
     /**
      * Stops the process.
      *
-     * @param int|float     $timeout The timeout in seconds
-     * @param int           $signal  A POSIX signal to send in case the process has not stop at timeout, default is SIGKILL
+     * @param int|float $timeout The timeout in seconds
+     * @param int       $signal  A POSIX signal to send in case the process has not stop at timeout, default is SIGKILL
      *
-     * @return int     The exit-code of the process
+     * @return int The exit-code of the process
      *
      * @throws RuntimeException if the process got signaled
      */
@@ -778,7 +797,7 @@ class Process
     {
         $timeoutMicro = microtime(true) + $timeout;
         if ($this->isRunning()) {
-            if (defined('PHP_WINDOWS_VERSION_BUILD') && !$this->isSigchildEnabled()) {
+            if ('\\' === DIRECTORY_SEPARATOR && !$this->isSigchildEnabled()) {
                 exec(sprintf("taskkill /F /T /PID %d 2>&1", $this->getPid()), $output, $exitCode);
                 if ($exitCode > 0) {
                     throw new RuntimeException('Unable to kill the process');
@@ -880,7 +899,7 @@ class Process
      *
      * To disable the timeout, set this value to null.
      *
-     * @param int|float|null     $timeout The timeout in seconds
+     * @param int|float|null $timeout The timeout in seconds
      *
      * @return self The current Process instance
      *
@@ -898,10 +917,11 @@ class Process
      *
      * To disable the timeout, set this value to null.
      *
-     * @param int|float|null     $timeout The timeout in seconds
+     * @param int|float|null $timeout The timeout in seconds
      *
      * @return self The current Process instance.
      *
+     * @throws LogicException           if the output is disabled
      * @throws InvalidArgumentException if the timeout is negative
      */
     public function setIdleTimeout($timeout)
@@ -918,7 +938,7 @@ class Process
     /**
      * Enables or disables the TTY mode.
      *
-     * @param bool    $tty True to enabled and false to disable
+     * @param bool $tty True to enabled and false to disable
      *
      * @return self The current Process instance
      *
@@ -926,7 +946,7 @@ class Process
      */
     public function setTty($tty)
     {
-        if (defined('PHP_WINDOWS_VERSION_BUILD') && $tty) {
+        if ('\\' === DIRECTORY_SEPARATOR && $tty) {
             throw new RuntimeException('TTY mode is not supported on Windows platform.');
         }
 
@@ -938,7 +958,7 @@ class Process
     /**
      * Checks if the TTY mode is enabled.
      *
-     * @return bool    true if the TTY mode is enabled, false otherwise
+     * @return bool true if the TTY mode is enabled, false otherwise
      */
     public function isTty()
     {
@@ -948,7 +968,7 @@ class Process
     /**
      * Sets PTY mode.
      *
-     * @param bool    $bool
+     * @param bool $bool
      *
      * @return self
      */
@@ -1063,8 +1083,6 @@ class Process
     /**
      * Sets the contents of STDIN.
      *
-     * Deprecation: As of Symfony 2.5, this method only accepts scalar values.
-     *
      * @param string|null $stdin The new contents
      *
      * @return self The current Process instance
@@ -1141,7 +1159,7 @@ class Process
     /**
      * Sets whether or not Windows compatibility is enabled.
      *
-     * @param bool    $enhance
+     * @param bool $enhance
      *
      * @return self The current Process instance
      */
@@ -1169,7 +1187,7 @@ class Process
      * determine the success of a process when PHP has been compiled with
      * the --enable-sigchild option
      *
-     * @param bool    $enhance
+     * @param bool $enhance
      *
      * @return self The current Process instance
      */
@@ -1220,7 +1238,7 @@ class Process
             return $result;
         }
 
-        if (defined('PHP_WINDOWS_VERSION_BUILD')) {
+        if ('\\' === DIRECTORY_SEPARATOR) {
             return $result = false;
         }
 
@@ -1241,8 +1259,12 @@ class Process
      */
     private function getDescriptors()
     {
-        $this->processPipes = new ProcessPipes($this->useFileHandles, $this->tty, $this->pty, $this->outputDisabled);
-        $descriptors = $this->processPipes->getDescriptors();
+        if ('\\' === DIRECTORY_SEPARATOR) {
+            $this->processPipes = WindowsPipes::create($this, $this->input);
+        } else {
+            $this->processPipes = UnixPipes::create($this, $this->input);
+        }
+        $descriptors = $this->processPipes->getDescriptors($this->outputDisabled);
 
         if (!$this->useFileHandles && $this->enhanceSigchildCompatibility && $this->isSigchildEnabled()) {
             // last exit code is output on the fourth pipe and caught to work around --enable-sigchild
@@ -1268,8 +1290,7 @@ class Process
     {
         $that = $this;
         $out = self::OUT;
-        $err = self::ERR;
-        $callback = function ($type, $data) use ($that, $callback, $out, $err) {
+        $callback = function ($type, $data) use ($that, $callback, $out) {
             if ($out == $type) {
                 $that->addOutput($data);
             } else {
@@ -1287,7 +1308,7 @@ class Process
     /**
      * Updates the status of the process, reads pipes.
      *
-     * @param bool    $blocking Whether to use a blocking read call.
+     * @param bool $blocking Whether to use a blocking read call.
      */
     protected function updateStatus($blocking)
     {
@@ -1298,7 +1319,7 @@ class Process
         $this->processInformation = proc_get_status($this->process);
         $this->captureExitCode();
 
-        $this->readPipes($blocking, defined('PHP_WINDOWS_VERSION_BUILD') ? !$this->processInformation['running'] : true);
+        $this->readPipes($blocking, '\\' === DIRECTORY_SEPARATOR ? !$this->processInformation['running'] : true);
 
         if (!$this->processInformation['running']) {
             $this->close();
@@ -1329,9 +1350,11 @@ class Process
     /**
      * Validates and returns the filtered timeout.
      *
-     * @param int|float|null     $timeout
+     * @param int|float|null $timeout
      *
      * @return float|null
+     *
+     * @throws InvalidArgumentException if the given timeout is a negative number
      */
     private function validateTimeout($timeout)
     {
@@ -1349,22 +1372,19 @@ class Process
     /**
      * Reads pipes, executes callback.
      *
-     * @param bool    $blocking Whether to use blocking calls or not.
-     * @param bool    $close    Whether to close file handles or not.
+     * @param bool $blocking Whether to use blocking calls or not.
+     * @param bool $close    Whether to close file handles or not.
      */
     private function readPipes($blocking, $close)
     {
-        if ($close) {
-            $result = $this->processPipes->readAndCloseHandles($blocking);
-        } else {
-            $result = $this->processPipes->read($blocking);
-        }
+        $result = $this->processPipes->readAndWrite($blocking, $close);
 
+        $callback = $this->callback;
         foreach ($result as $type => $data) {
             if (3 == $type) {
                 $this->fallbackExitcode = (int) $data;
             } else {
-                call_user_func($this->callback, $type === self::STDOUT ? self::OUT : self::ERR, $data);
+                $callback($type === self::STDOUT ? self::OUT : self::ERR, $data);
             }
         }
     }
@@ -1382,7 +1402,7 @@ class Process
     /**
      * Closes process resource, closes file handles, sets the exitcode.
      *
-     * @return int     The exitcode
+     * @return int The exitcode
      */
     private function close()
     {
@@ -1428,10 +1448,10 @@ class Process
     /**
      * Sends a POSIX signal to the process.
      *
-     * @param  int     $signal         A valid POSIX signal (see http://www.php.net/manual/en/pcntl.constants.php)
-     * @param  bool    $throwException Whether to throw exception in case signal failed
+     * @param int  $signal         A valid POSIX signal (see http://www.php.net/manual/en/pcntl.constants.php)
+     * @param bool $throwException Whether to throw exception in case signal failed
      *
-     * @return bool    True if the signal was sent successfully, false otherwise
+     * @return bool True if the signal was sent successfully, false otherwise
      *
      * @throws LogicException   In case the process is not running
      * @throws RuntimeException In case --enable-sigchild is activated
diff --git a/vendor/symfony/process/Symfony/Component/Process/ProcessBuilder.php b/vendor/symfony/process/Symfony/Component/Process/ProcessBuilder.php
index 71633cd..189ab8a 100644
--- a/vendor/symfony/process/Symfony/Component/Process/ProcessBuilder.php
+++ b/vendor/symfony/process/Symfony/Component/Process/ProcessBuilder.php
@@ -32,7 +32,7 @@ class ProcessBuilder
     private $outputDisabled = false;
 
     /**
-     * Constructor
+     * Constructor.
      *
      * @param string[] $arguments An array of arguments
      */
@@ -129,7 +129,7 @@ class ProcessBuilder
     }
 
     /**
-     * Sets an environment variable
+     * Sets an environment variable.
      *
      * Setting a variable overrides its previous value. Use `null` to unset a
      * defined environment variable.
@@ -187,7 +187,7 @@ class ProcessBuilder
      *
      * To disable the timeout, set this value to null.
      *
-     * @param float|null
+     * @param float|null $timeout
      *
      * @return ProcessBuilder
      *
diff --git a/vendor/symfony/process/Symfony/Component/Process/ProcessPipes.php b/vendor/symfony/process/Symfony/Component/Process/ProcessPipes.php
deleted file mode 100644
index 9ed1def..0000000
--- a/vendor/symfony/process/Symfony/Component/Process/ProcessPipes.php
+++ /dev/null
@@ -1,382 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Process;
-
-use Symfony\Component\Process\Exception\RuntimeException;
-
-/**
- * ProcessPipes manages descriptors and pipes for the use of proc_open.
- */
-class ProcessPipes
-{
-    /** @var array */
-    public $pipes = array();
-    /** @var array */
-    private $files = array();
-    /** @var array */
-    private $fileHandles = array();
-    /** @var array */
-    private $readBytes = array();
-    /** @var bool    */
-    private $useFiles;
-    /** @var bool    */
-    private $ttyMode;
-    /** @var bool    */
-    private $ptyMode;
-    /** @var bool    */
-    private $disableOutput;
-
-    const CHUNK_SIZE = 16384;
-
-    public function __construct($useFiles, $ttyMode, $ptyMode = false, $disableOutput = false)
-    {
-        $this->useFiles = (bool) $useFiles;
-        $this->ttyMode = (bool) $ttyMode;
-        $this->ptyMode = (bool) $ptyMode;
-        $this->disableOutput = (bool) $disableOutput;
-
-        // Fix for PHP bug #51800: reading from STDOUT pipe hangs forever on Windows if the output is too big.
-        // Workaround for this problem is to use temporary files instead of pipes on Windows platform.
-        //
-        // @see https://bugs.php.net/bug.php?id=51800
-        if ($this->useFiles && !$this->disableOutput) {
-            $this->files = array(
-                Process::STDOUT => tempnam(sys_get_temp_dir(), 'sf_proc_stdout'),
-                Process::STDERR => tempnam(sys_get_temp_dir(), 'sf_proc_stderr'),
-            );
-            foreach ($this->files as $offset => $file) {
-                $this->fileHandles[$offset] = fopen($this->files[$offset], 'rb');
-                if (false === $this->fileHandles[$offset]) {
-                    throw new RuntimeException('A temporary file could not be opened to write the process output to, verify that your TEMP environment variable is writable');
-                }
-            }
-            $this->readBytes = array(
-                Process::STDOUT => 0,
-                Process::STDERR => 0,
-            );
-        }
-    }
-
-    public function __destruct()
-    {
-        $this->close();
-        $this->removeFiles();
-    }
-
-    /**
-     * Sets non-blocking mode on pipes.
-     */
-    public function unblock()
-    {
-        foreach ($this->pipes as $pipe) {
-            stream_set_blocking($pipe, 0);
-        }
-    }
-
-    /**
-     * Closes file handles and pipes.
-     */
-    public function close()
-    {
-        $this->closeUnixPipes();
-        foreach ($this->fileHandles as $handle) {
-            fclose($handle);
-        }
-        $this->fileHandles = array();
-    }
-
-    /**
-     * Closes Unix pipes.
-     *
-     * Nothing happens in case file handles are used.
-     */
-    public function closeUnixPipes()
-    {
-        foreach ($this->pipes as $pipe) {
-            fclose($pipe);
-        }
-        $this->pipes = array();
-    }
-
-    /**
-     * Returns an array of descriptors for the use of proc_open.
-     *
-     * @return array
-     */
-    public function getDescriptors()
-    {
-        if ($this->disableOutput) {
-            $nullstream = fopen(defined('PHP_WINDOWS_VERSION_BUILD') ? 'NUL' : '/dev/null', 'c');
-
-            return array(
-                array('pipe', 'r'),
-                $nullstream,
-                $nullstream,
-            );
-        }
-
-        if ($this->useFiles) {
-            // We're not using pipe on Windows platform as it hangs (https://bugs.php.net/bug.php?id=51800)
-            // We're not using file handles as it can produce corrupted output https://bugs.php.net/bug.php?id=65650
-            // So we redirect output within the commandline and pass the nul device to the process
-            return array(
-                array('pipe', 'r'),
-                array('file', 'NUL', 'w'),
-                array('file', 'NUL', 'w'),
-            );
-        }
-
-        if ($this->ttyMode) {
-            return array(
-                array('file', '/dev/tty', 'r'),
-                array('file', '/dev/tty', 'w'),
-                array('file', '/dev/tty', 'w'),
-            );
-        } elseif ($this->ptyMode && Process::isPtySupported()) {
-            return array(
-                array('pty'),
-                array('pty'),
-                array('pty'),
-            );
-        }
-
-        return array(
-            array('pipe', 'r'), // stdin
-            array('pipe', 'w'), // stdout
-            array('pipe', 'w'), // stderr
-        );
-    }
-
-    /**
-     * Returns an array of filenames indexed by their related stream in case these pipes use temporary files.
-     *
-     * @return array
-     */
-    public function getFiles()
-    {
-        if ($this->useFiles) {
-            return $this->files;
-        }
-
-        return array();
-    }
-
-    /**
-     * Reads data in file handles and pipes.
-     *
-     * @param bool    $blocking Whether to use blocking calls or not.
-     *
-     * @return array An array of read data indexed by their fd.
-     */
-    public function read($blocking)
-    {
-        return array_replace($this->readStreams($blocking), $this->readFileHandles());
-    }
-
-    /**
-     * Reads data in file handles and pipes, closes them if EOF is reached.
-     *
-     * @param bool    $blocking Whether to use blocking calls or not.
-     *
-     * @return array An array of read data indexed by their fd.
-     */
-    public function readAndCloseHandles($blocking)
-    {
-        return array_replace($this->readStreams($blocking, true), $this->readFileHandles(true));
-    }
-
-    /**
-     * Returns if the current state has open file handles or pipes.
-     *
-     * @return bool
-     */
-    public function hasOpenHandles()
-    {
-        if (!$this->useFiles) {
-            return (bool) $this->pipes;
-        }
-
-        return (bool) $this->pipes && (bool) $this->fileHandles;
-    }
-
-    /**
-     * Writes stdin data.
-     *
-     * @param bool        $blocking Whether to use blocking calls or not.
-     * @param string|null $stdin    The data to write.
-     */
-    public function write($blocking, $stdin)
-    {
-        if (null === $stdin) {
-            fclose($this->pipes[0]);
-            unset($this->pipes[0]);
-
-            return;
-        }
-
-        $writePipes = array($this->pipes[0]);
-        unset($this->pipes[0]);
-        $stdinLen = strlen($stdin);
-        $stdinOffset = 0;
-
-        while ($writePipes) {
-            $r = null;
-            $w = $writePipes;
-            $e = null;
-
-            if (false === $n = @stream_select($r, $w, $e, 0, $blocking ? ceil(Process::TIMEOUT_PRECISION * 1E6) : 0)) {
-                // if a system call has been interrupted, forget about it, let's try again
-                if ($this->hasSystemCallBeenInterrupted()) {
-                    continue;
-                }
-                break;
-            }
-
-            // nothing has changed, let's wait until the process is ready
-            if (0 === $n) {
-                continue;
-            }
-
-            if ($w) {
-                $written = fwrite($writePipes[0], (binary) substr($stdin, $stdinOffset), 8192);
-                if (false !== $written) {
-                    $stdinOffset += $written;
-                }
-                if ($stdinOffset >= $stdinLen) {
-                    fclose($writePipes[0]);
-                    $writePipes = null;
-                }
-            }
-        }
-    }
-
-    /**
-     * Reads data in file handles.
-     *
-     * @param bool    $close Whether to close file handles or not.
-     *
-     * @return array An array of read data indexed by their fd.
-     */
-    private function readFileHandles($close = false)
-    {
-        $read = array();
-        $fh = $this->fileHandles;
-        foreach ($fh as $type => $fileHandle) {
-            if (0 !== fseek($fileHandle, $this->readBytes[$type])) {
-                continue;
-            }
-            $data = '';
-            $dataread = null;
-            while (!feof($fileHandle)) {
-                if (false !== $dataread = fread($fileHandle, self::CHUNK_SIZE)) {
-                    $data .= $dataread;
-                }
-            }
-            if (0 < $length = strlen($data)) {
-                $this->readBytes[$type] += $length;
-                $read[$type] = $data;
-            }
-
-            if (false === $dataread || (true === $close && feof($fileHandle) && '' === $data)) {
-                fclose($this->fileHandles[$type]);
-                unset($this->fileHandles[$type]);
-            }
-        }
-
-        return $read;
-    }
-
-    /**
-     * Reads data in file pipes streams.
-     *
-     * @param bool    $blocking Whether to use blocking calls or not.
-     * @param bool    $close    Whether to close file handles or not.
-     *
-     * @return array An array of read data indexed by their fd.
-     */
-    private function readStreams($blocking, $close = false)
-    {
-        if (empty($this->pipes)) {
-            usleep(Process::TIMEOUT_PRECISION * 1E4);
-
-            return array();
-        }
-
-        $read = array();
-
-        $r = $this->pipes;
-        $w = null;
-        $e = null;
-
-        // let's have a look if something changed in streams
-        if (false === $n = @stream_select($r, $w, $e, 0, $blocking ? ceil(Process::TIMEOUT_PRECISION * 1E6) : 0)) {
-            // if a system call has been interrupted, forget about it, let's try again
-            // otherwise, an error occurred, let's reset pipes
-            if (!$this->hasSystemCallBeenInterrupted()) {
-                $this->pipes = array();
-            }
-
-            return $read;
-        }
-
-        // nothing has changed
-        if (0 === $n) {
-            return $read;
-        }
-
-        foreach ($r as $pipe) {
-            $type = array_search($pipe, $this->pipes);
-
-            $data = '';
-            while ('' !== $dataread = (string) fread($pipe, self::CHUNK_SIZE)) {
-                $data .= $dataread;
-            }
-
-            if ('' !== $data) {
-                $read[$type] = $data;
-            }
-
-            if (false === $data || (true === $close && feof($pipe) && '' === $data)) {
-                fclose($this->pipes[$type]);
-                unset($this->pipes[$type]);
-            }
-        }
-
-        return $read;
-    }
-
-    /**
-     * Returns true if a system call has been interrupted.
-     *
-     * @return bool
-     */
-    private function hasSystemCallBeenInterrupted()
-    {
-        $lastError = error_get_last();
-
-        // stream_select returns false when the `select` system call is interrupted by an incoming signal
-        return isset($lastError['message']) && false !== stripos($lastError['message'], 'interrupted system call');
-    }
-
-    /**
-     * Removes temporary files
-     */
-    private function removeFiles()
-    {
-        foreach ($this->files as $filename) {
-            if (file_exists($filename)) {
-                @unlink($filename);
-            }
-        }
-        $this->files = array();
-    }
-}
diff --git a/vendor/symfony/process/Symfony/Component/Process/ProcessUtils.php b/vendor/symfony/process/Symfony/Component/Process/ProcessUtils.php
index 35ae17c..0f4cb89 100644
--- a/vendor/symfony/process/Symfony/Component/Process/ProcessUtils.php
+++ b/vendor/symfony/process/Symfony/Component/Process/ProcessUtils.php
@@ -23,7 +23,7 @@ use Symfony\Component\Process\Exception\InvalidArgumentException;
 class ProcessUtils
 {
     /**
-     * This class should not be instantiated
+     * This class should not be instantiated.
      */
     private function __construct()
     {
@@ -42,7 +42,7 @@ class ProcessUtils
         //Fix for PHP bug #49446 escapeshellarg doesn't work on Windows
         //@see https://bugs.php.net/bug.php?id=43784
         //@see https://bugs.php.net/bug.php?id=49446
-        if (defined('PHP_WINDOWS_VERSION_BUILD')) {
+        if ('\\' === DIRECTORY_SEPARATOR) {
             if ('' === $argument) {
                 return escapeshellarg($argument);
             }
@@ -75,7 +75,7 @@ class ProcessUtils
     }
 
     /**
-     * Validates and normalizes a Process input
+     * Validates and normalizes a Process input.
      *
      * @param string $caller The name of method call that validates the input
      * @param mixed  $input  The input to validate
@@ -87,6 +87,9 @@ class ProcessUtils
     public static function validateInput($caller, $input)
     {
         if (null !== $input) {
+            if (is_resource($input)) {
+                return $input;
+            }
             if (is_scalar($input)) {
                 return (string) $input;
             }
@@ -95,7 +98,7 @@ class ProcessUtils
                 return (string) $input;
             }
 
-            throw new InvalidArgumentException(sprintf('%s only accepts strings.', $caller));
+            throw new InvalidArgumentException(sprintf('%s only accepts strings or stream resources.', $caller));
         }
 
         return $input;
diff --git a/vendor/symfony/process/Symfony/Component/Process/README.md b/vendor/symfony/process/Symfony/Component/Process/README.md
index c7e2138..29d1cf9 100644
--- a/vendor/symfony/process/Symfony/Component/Process/README.md
+++ b/vendor/symfony/process/Symfony/Component/Process/README.md
@@ -5,16 +5,18 @@ Process executes commands in sub-processes.
 
 In this example, we run a simple directory listing and get the result back:
 
-    use Symfony\Component\Process\Process;
+```php
+use Symfony\Component\Process\Process;
 
-    $process = new Process('ls -lsa');
-    $process->setTimeout(3600);
-    $process->run();
-    if (!$process->isSuccessful()) {
-        throw new RuntimeException($process->getErrorOutput());
-    }
+$process = new Process('ls -lsa');
+$process->setTimeout(3600);
+$process->run();
+if (!$process->isSuccessful()) {
+    throw new RuntimeException($process->getErrorOutput());
+}
 
-    print $process->getOutput();
+print $process->getOutput();
+```
 
 You can think that this is easy to achieve with plain PHP but it's not especially
 if you want to take care of the subtle differences between the different platforms.
@@ -23,16 +25,18 @@ And if you want to be able to get some feedback in real-time, just pass an
 anonymous function to the ``run()`` method and you will get the output buffer
 as it becomes available:
 
-    use Symfony\Component\Process\Process;
+```php
+use Symfony\Component\Process\Process;
 
-    $process = new Process('ls -lsa');
-    $process->run(function ($type, $buffer) {
-        if (Process::ERR === $type) {
-            echo 'ERR > '.$buffer;
-        } else {
-            echo 'OUT > '.$buffer;
-        }
-    });
+$process = new Process('ls -lsa');
+$process->run(function ($type, $buffer) {
+    if (Process::ERR === $type) {
+        echo 'ERR > '.$buffer;
+    } else {
+        echo 'OUT > '.$buffer;
+    }
+});
+```
 
 That's great if you want to execute a long running command (like rsync-ing files to a
 remote server) and give feedback to the user in real-time.
diff --git a/vendor/symfony/process/Symfony/Component/Process/Tests/AbstractProcessTest.php b/vendor/symfony/process/Symfony/Component/Process/Tests/AbstractProcessTest.php
index 78483d9..5bfd1a8 100644
--- a/vendor/symfony/process/Symfony/Component/Process/Tests/AbstractProcessTest.php
+++ b/vendor/symfony/process/Symfony/Component/Process/Tests/AbstractProcessTest.php
@@ -13,9 +13,9 @@ namespace Symfony\Component\Process\Tests;
 
 use Symfony\Component\Process\Exception\ProcessTimedOutException;
 use Symfony\Component\Process\Exception\LogicException;
+use Symfony\Component\Process\Pipes\PipesInterface;
 use Symfony\Component\Process\Process;
 use Symfony\Component\Process\Exception\RuntimeException;
-use Symfony\Component\Process\ProcessPipes;
 
 /**
  * @author Robert Schönthal <seroscho@googlemail.com>
@@ -80,7 +80,7 @@ abstract class AbstractProcessTest extends \PHPUnit_Framework_TestCase
         }
         $duration = microtime(true) - $start;
 
-        $this->assertLessThan(1.8, $duration);
+        $this->assertLessThan(4, $duration);
     }
 
     public function testAllOutputIsActuallyReadOnTermination()
@@ -90,9 +90,9 @@ abstract class AbstractProcessTest extends \PHPUnit_Framework_TestCase
         // has terminated so the internal pipes array is already empty. normally
         // the call to start() will not read any data as the process will not have
         // generated output, but this is non-deterministic so we must count it as
-        // a possibility.  therefore we need 2 * ProcessPipes::CHUNK_SIZE plus
+        // a possibility.  therefore we need 2 * PipesInterface::CHUNK_SIZE plus
         // another byte which will never be read.
-        $expectedOutputSize = ProcessPipes::CHUNK_SIZE * 2 + 2;
+        $expectedOutputSize = PipesInterface::CHUNK_SIZE * 2 + 2;
 
         $code = sprintf('echo str_repeat(\'*\', %d);', $expectedOutputSize);
         $p = $this->getProcess(sprintf('php -r %s', escapeshellarg($code)));
@@ -128,7 +128,7 @@ abstract class AbstractProcessTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * tests results from sub processes
+     * tests results from sub processes.
      *
      * @dataProvider responsesCodeProvider
      */
@@ -141,13 +141,13 @@ abstract class AbstractProcessTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * tests results from sub processes
+     * tests results from sub processes.
      *
      * @dataProvider pipesCodeProvider
      */
     public function testProcessPipes($code, $size)
     {
-        $expected = str_repeat(str_repeat('*', 1024), $size) . '!';
+        $expected = str_repeat(str_repeat('*', 1024), $size).'!';
         $expectedLength = (1024 * $size) + 1;
 
         $p = $this->getProcess(sprintf('php -r %s', escapeshellarg($code)));
@@ -158,6 +158,28 @@ abstract class AbstractProcessTest extends \PHPUnit_Framework_TestCase
         $this->assertEquals($expectedLength, strlen($p->getErrorOutput()));
     }
 
+    /**
+     * @dataProvider pipesCodeProvider
+     */
+    public function testSetStreamAsInput($code, $size)
+    {
+        $expected = str_repeat(str_repeat('*', 1024), $size).'!';
+        $expectedLength = (1024 * $size) + 1;
+
+        $stream = fopen('php://temporary', 'w+');
+        fwrite($stream, $expected);
+        rewind($stream);
+
+        $p = $this->getProcess(sprintf('php -r %s', escapeshellarg($code)));
+        $p->setInput($stream);
+        $p->run();
+
+        fclose($stream);
+
+        $this->assertEquals($expectedLength, strlen($p->getOutput()));
+        $this->assertEquals($expectedLength, strlen($p->getErrorOutput()));
+    }
+
     public function testSetInputWhileRunningThrowsAnException()
     {
         $process = $this->getProcess('php -r "usleep(500000);"');
@@ -175,7 +197,7 @@ abstract class AbstractProcessTest extends \PHPUnit_Framework_TestCase
     /**
      * @dataProvider provideInvalidInputValues
      * @expectedException \Symfony\Component\Process\Exception\InvalidArgumentException
-     * @expectedExceptionMessage Symfony\Component\Process\Process::setInput only accepts strings.
+     * @expectedExceptionMessage Symfony\Component\Process\Process::setInput only accepts strings or stream resources.
      */
     public function testInvalidInput($value)
     {
@@ -188,7 +210,6 @@ abstract class AbstractProcessTest extends \PHPUnit_Framework_TestCase
         return array(
             array(array()),
             array(new NonStringifiable()),
-            array(fopen('php://temporary', 'w')),
         );
     }
 
@@ -215,9 +236,9 @@ abstract class AbstractProcessTest extends \PHPUnit_Framework_TestCase
 
     public function chainedCommandsOutputProvider()
     {
-        if (defined('PHP_WINDOWS_VERSION_BUILD')) {
+        if ('\\' === DIRECTORY_SEPARATOR) {
             return array(
-                array("2 \r\n2\r\n", '&&', '2')
+                array("2 \r\n2\r\n", '&&', '2'),
             );
         }
 
@@ -228,7 +249,6 @@ abstract class AbstractProcessTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     *
      * @dataProvider chainedCommandsOutputProvider
      */
     public function testChainedCommandsOutput($expected, $operator, $input)
@@ -260,13 +280,23 @@ abstract class AbstractProcessTest extends \PHPUnit_Framework_TestCase
 
     public function testGetIncrementalErrorOutput()
     {
-        $p = $this->getProcess(sprintf('php -r %s', escapeshellarg('$n = 0; while ($n < 3) { usleep(100000); file_put_contents(\'php://stderr\', \'ERROR\'); $n++; }')));
+        // use a lock file to toggle between writing ("W") and reading ("R") the
+        // error stream
+        $lock = tempnam(sys_get_temp_dir(), get_class($this).'Lock');
+        file_put_contents($lock, 'W');
+
+        $p = $this->getProcess(sprintf('php -r %s', escapeshellarg('$n = 0; while ($n < 3) { if (\'W\' === file_get_contents('.var_export($lock, true).')) { file_put_contents(\'php://stderr\', \'ERROR\'); $n++; file_put_contents('.var_export($lock, true).', \'R\'); } usleep(100); }')));
 
         $p->start();
         while ($p->isRunning()) {
-            $this->assertLessThanOrEqual(1, preg_match_all('/ERROR/', $p->getIncrementalErrorOutput(), $matches));
-            usleep(20000);
+            if ('R' === file_get_contents($lock)) {
+                $this->assertLessThanOrEqual(1, preg_match_all('/ERROR/', $p->getIncrementalErrorOutput(), $matches));
+                file_put_contents($lock, 'W');
+            }
+            usleep(100);
         }
+
+        unlink($lock);
     }
 
     public function testFlushErrorOutput()
@@ -278,9 +308,40 @@ abstract class AbstractProcessTest extends \PHPUnit_Framework_TestCase
         $this->assertEmpty($p->getErrorOutput());
     }
 
+    public function testGetEmptyIncrementalErrorOutput()
+    {
+        // use a lock file to toggle between writing ("W") and reading ("R") the
+        // output stream
+        $lock = tempnam(sys_get_temp_dir(), get_class($this).'Lock');
+        file_put_contents($lock, 'W');
+
+        $p = $this->getProcess(sprintf('php -r %s', escapeshellarg('$n = 0; while ($n < 3) { if (\'W\' === file_get_contents('.var_export($lock, true).')) { file_put_contents(\'php://stderr\', \'ERROR\'); $n++; file_put_contents('.var_export($lock, true).', \'R\'); } usleep(100); }')));
+
+        $p->start();
+
+        $shouldWrite = false;
+
+        while ($p->isRunning()) {
+            if ('R' === file_get_contents($lock)) {
+                if (!$shouldWrite) {
+                    $this->assertLessThanOrEqual(1, preg_match_all('/ERROR/', $p->getIncrementalOutput(), $matches));
+                    $shouldWrite = true;
+                } else {
+                    $this->assertSame('', $p->getIncrementalOutput());
+
+                    file_put_contents($lock, 'W');
+                    $shouldWrite = false;
+                }
+            }
+            usleep(100);
+        }
+
+        unlink($lock);
+    }
+
     public function testGetOutput()
     {
-        $p = $this->getProcess(sprintf('php -r %s', escapeshellarg('$n=0;while ($n<3) {echo \' foo \';$n++; usleep(500); }')));
+        $p = $this->getProcess(sprintf('php -r %s', escapeshellarg('$n = 0; while ($n < 3) { echo \' foo \'; $n++; }')));
 
         $p->run();
         $this->assertEquals(3, preg_match_all('/foo/', $p->getOutput(), $matches));
@@ -288,13 +349,23 @@ abstract class AbstractProcessTest extends \PHPUnit_Framework_TestCase
 
     public function testGetIncrementalOutput()
     {
-        $p = $this->getProcess(sprintf('php -r %s', escapeshellarg('$n=0;while ($n<3) { echo \' foo \'; usleep(50000); $n++; }')));
+        // use a lock file to toggle between writing ("W") and reading ("R") the
+        // output stream
+        $lock = tempnam(sys_get_temp_dir(), get_class($this).'Lock');
+        file_put_contents($lock, 'W');
+
+        $p = $this->getProcess(sprintf('php -r %s', escapeshellarg('$n = 0; while ($n < 3) { if (\'W\' === file_get_contents('.var_export($lock, true).')) { echo \' foo \'; $n++; file_put_contents('.var_export($lock, true).', \'R\'); } usleep(100); }')));
 
         $p->start();
         while ($p->isRunning()) {
-            $this->assertLessThanOrEqual(1, preg_match_all('/foo/', $p->getIncrementalOutput(), $matches));
-            usleep(20000);
+            if ('R' === file_get_contents($lock)) {
+                $this->assertLessThanOrEqual(1, preg_match_all('/foo/', $p->getIncrementalOutput(), $matches));
+                file_put_contents($lock, 'W');
+            }
+            usleep(100);
         }
+
+        unlink($lock);
     }
 
     public function testFlushOutput()
@@ -306,9 +377,40 @@ abstract class AbstractProcessTest extends \PHPUnit_Framework_TestCase
         $this->assertEmpty($p->getOutput());
     }
 
+    public function testGetEmptyIncrementalOutput()
+    {
+        // use a lock file to toggle between writing ("W") and reading ("R") the
+        // output stream
+        $lock = tempnam(sys_get_temp_dir(), get_class($this).'Lock');
+        file_put_contents($lock, 'W');
+
+        $p = $this->getProcess(sprintf('php -r %s', escapeshellarg('$n = 0; while ($n < 3) { if (\'W\' === file_get_contents('.var_export($lock, true).')) { echo \' foo \'; $n++; file_put_contents('.var_export($lock, true).', \'R\'); } usleep(100); }')));
+
+        $p->start();
+
+        $shouldWrite = false;
+
+        while ($p->isRunning()) {
+            if ('R' === file_get_contents($lock)) {
+                if (!$shouldWrite) {
+                    $this->assertLessThanOrEqual(1, preg_match_all('/foo/', $p->getIncrementalOutput(), $matches));
+                    $shouldWrite = true;
+                } else {
+                    $this->assertSame('', $p->getIncrementalOutput());
+
+                    file_put_contents($lock, 'W');
+                    $shouldWrite = false;
+                }
+            }
+            usleep(100);
+        }
+
+        unlink($lock);
+    }
+
     public function testZeroAsOutput()
     {
-        if (defined('PHP_WINDOWS_VERSION_BUILD')) {
+        if ('\\' === DIRECTORY_SEPARATOR) {
             // see http://stackoverflow.com/questions/7105433/windows-batch-echo-without-new-line
             $p = $this->getProcess('echo | set /p dummyName=0');
         } else {
@@ -321,7 +423,7 @@ abstract class AbstractProcessTest extends \PHPUnit_Framework_TestCase
 
     public function testExitCodeCommandFailed()
     {
-        if (defined('PHP_WINDOWS_VERSION_BUILD')) {
+        if ('\\' === DIRECTORY_SEPARATOR) {
             $this->markTestSkipped('Windows does not support POSIX exit code');
         }
 
@@ -334,7 +436,7 @@ abstract class AbstractProcessTest extends \PHPUnit_Framework_TestCase
 
     public function testTTYCommand()
     {
-        if (defined('PHP_WINDOWS_VERSION_BUILD')) {
+        if ('\\' === DIRECTORY_SEPARATOR) {
             $this->markTestSkipped('Windows does have /dev/tty support');
         }
 
@@ -349,7 +451,7 @@ abstract class AbstractProcessTest extends \PHPUnit_Framework_TestCase
 
     public function testTTYCommandExitCode()
     {
-        if (defined('PHP_WINDOWS_VERSION_BUILD')) {
+        if ('\\' === DIRECTORY_SEPARATOR) {
             $this->markTestSkipped('Windows does have /dev/tty support');
         }
 
@@ -362,7 +464,7 @@ abstract class AbstractProcessTest extends \PHPUnit_Framework_TestCase
 
     public function testTTYInWindowsEnvironment()
     {
-        if (!defined('PHP_WINDOWS_VERSION_BUILD')) {
+        if ('\\' !== DIRECTORY_SEPARATOR) {
             $this->markTestSkipped('This test is for Windows platform only');
         }
 
@@ -407,7 +509,7 @@ abstract class AbstractProcessTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * @expectedException Symfony\Component\Process\Exception\ProcessFailedException
+     * @expectedException \Symfony\Component\Process\Exception\ProcessFailedException
      */
     public function testMustRunThrowsException()
     {
@@ -529,7 +631,7 @@ abstract class AbstractProcessTest extends \PHPUnit_Framework_TestCase
 
     public function testProcessIsNotSignaled()
     {
-        if (defined('PHP_WINDOWS_VERSION_BUILD')) {
+        if ('\\' === DIRECTORY_SEPARATOR) {
             $this->markTestSkipped('Windows does not support POSIX signals');
         }
 
@@ -540,7 +642,7 @@ abstract class AbstractProcessTest extends \PHPUnit_Framework_TestCase
 
     public function testProcessWithoutTermSignalIsNotSignaled()
     {
-        if (defined('PHP_WINDOWS_VERSION_BUILD')) {
+        if ('\\' === DIRECTORY_SEPARATOR) {
             $this->markTestSkipped('Windows does not support POSIX signals');
         }
 
@@ -551,7 +653,7 @@ abstract class AbstractProcessTest extends \PHPUnit_Framework_TestCase
 
     public function testProcessWithoutTermSignal()
     {
-        if (defined('PHP_WINDOWS_VERSION_BUILD')) {
+        if ('\\' === DIRECTORY_SEPARATOR) {
             $this->markTestSkipped('Windows does not support POSIX signals');
         }
 
@@ -562,7 +664,7 @@ abstract class AbstractProcessTest extends \PHPUnit_Framework_TestCase
 
     public function testProcessIsSignaledIfStopped()
     {
-        if (defined('PHP_WINDOWS_VERSION_BUILD')) {
+        if ('\\' === DIRECTORY_SEPARATOR) {
             $this->markTestSkipped('Windows does not support POSIX signals');
         }
 
@@ -574,7 +676,7 @@ abstract class AbstractProcessTest extends \PHPUnit_Framework_TestCase
 
     public function testProcessWithTermSignal()
     {
-        if (defined('PHP_WINDOWS_VERSION_BUILD')) {
+        if ('\\' === DIRECTORY_SEPARATOR) {
             $this->markTestSkipped('Windows does not support POSIX signals');
         }
 
@@ -590,7 +692,7 @@ abstract class AbstractProcessTest extends \PHPUnit_Framework_TestCase
 
     public function testProcessThrowsExceptionWhenExternallySignaled()
     {
-        if (defined('PHP_WINDOWS_VERSION_BUILD')) {
+        if ('\\' === DIRECTORY_SEPARATOR) {
             $this->markTestSkipped('Windows does not support POSIX signals');
         }
 
@@ -628,7 +730,7 @@ abstract class AbstractProcessTest extends \PHPUnit_Framework_TestCase
 
     public function testPhpDeadlock()
     {
-        $this->markTestSkipped('Can course PHP to hang');
+        $this->markTestSkipped('Can cause PHP to hang');
 
         // Sleep doesn't work as it will allow the process to handle signals and close
         // file handles from the other end.
@@ -648,11 +750,10 @@ abstract class AbstractProcessTest extends \PHPUnit_Framework_TestCase
             $process->run();
             $this->fail('A RuntimeException should have been raised');
         } catch (RuntimeException $e) {
-
         }
         $duration = microtime(true) - $start;
 
-        if (defined('PHP_WINDOWS_VERSION_BUILD')) {
+        if ('\\' === DIRECTORY_SEPARATOR) {
             // Windows is a bit slower as it read file handles, then allow twice the precision
             $maxDuration = $timeout + 2 * Process::TIMEOUT_PRECISION;
         } else {
@@ -692,7 +793,6 @@ abstract class AbstractProcessTest extends \PHPUnit_Framework_TestCase
             }
             $this->fail('A RuntimeException should have been raised');
         } catch (RuntimeException $e) {
-
         }
         $duration = microtime(true) - $start;
 
@@ -748,7 +848,6 @@ abstract class AbstractProcessTest extends \PHPUnit_Framework_TestCase
             $process->run();
             $this->fail('An exception should have been raised.');
         } catch (\Exception $e) {
-
         }
         $process->start();
         usleep(1000);
@@ -780,12 +879,12 @@ abstract class AbstractProcessTest extends \PHPUnit_Framework_TestCase
     {
         $this->verifyPosixIsEnabled();
 
-        $process = $this->getProcess('exec php -f ' . __DIR__ . '/SignalListener.php');
+        $process = $this->getProcess('exec php -f '.__DIR__.'/SignalListener.php');
         $process->start();
         usleep(500000);
         $process->signal(SIGUSR1);
 
-        while ($process->isRunning() && false === strpos($process->getoutput(), 'Caught SIGUSR1')) {
+        while ($process->isRunning() && false === strpos($process->getOutput(), 'Caught SIGUSR1')) {
             usleep(10000);
         }
 
@@ -827,7 +926,7 @@ abstract class AbstractProcessTest extends \PHPUnit_Framework_TestCase
     {
         $process = $this->getProcess('php -m');
         $this->setExpectedException('Symfony\Component\Process\Exception\LogicException', sprintf('Process must be started before calling %s.', $method));
-        call_user_func(array($process, $method));
+        $process->{$method}();
     }
 
     public function provideMethodsThatNeedARunningProcess()
@@ -849,7 +948,7 @@ abstract class AbstractProcessTest extends \PHPUnit_Framework_TestCase
         $process = $this->getProcess('php -r "sleep(1);"');
         $process->start();
         try {
-            call_user_func(array($process, $method));
+            $process->{$method}();
             $process->stop(0);
             $this->fail('A LogicException must have been thrown');
         } catch (\Exception $e) {
@@ -871,7 +970,7 @@ abstract class AbstractProcessTest extends \PHPUnit_Framework_TestCase
 
     private function verifyPosixIsEnabled()
     {
-        if (defined('PHP_WINDOWS_VERSION_BUILD')) {
+        if ('\\' === DIRECTORY_SEPARATOR) {
             $this->markTestSkipped('POSIX signals do not work on Windows');
         }
         if (!defined('SIGUSR1')) {
@@ -884,7 +983,7 @@ abstract class AbstractProcessTest extends \PHPUnit_Framework_TestCase
      */
     public function testSignalWithWrongIntSignal()
     {
-        if (defined('PHP_WINDOWS_VERSION_BUILD')) {
+        if ('\\' === DIRECTORY_SEPARATOR) {
             $this->markTestSkipped('POSIX signals do not work on Windows');
         }
 
@@ -898,7 +997,7 @@ abstract class AbstractProcessTest extends \PHPUnit_Framework_TestCase
      */
     public function testSignalWithWrongNonIntSignal()
     {
-        if (defined('PHP_WINDOWS_VERSION_BUILD')) {
+        if ('\\' === DIRECTORY_SEPARATOR) {
             $this->markTestSkipped('POSIX signals do not work on Windows');
         }
 
@@ -970,20 +1069,20 @@ abstract class AbstractProcessTest extends \PHPUnit_Framework_TestCase
     /**
      * @dataProvider provideStartMethods
      */
-    public function testStartWithACallbackAndDisabledOutput($startMethod)
+    public function testStartWithACallbackAndDisabledOutput($startMethod, $exception, $exceptionMessage)
     {
         $p = $this->getProcess('php -r "usleep(500000);"');
         $p->disableOutput();
-        $this->setExpectedException('Symfony\Component\Process\Exception\LogicException', 'Output has been disabled, enable it to allow the use of a callback.');
-        call_user_func(array($p, $startMethod), function () {});
+        $this->setExpectedException($exception, $exceptionMessage);
+        $p->{$startMethod}(function () {});
     }
 
     public function provideStartMethods()
     {
         return array(
-            array('start'),
-            array('run'),
-            array('mustRun'),
+            array('start', 'Symfony\Component\Process\Exception\LogicException', 'Output has been disabled, enable it to allow the use of a callback.'),
+            array('run', 'Symfony\Component\Process\Exception\LogicException', 'Output has been disabled, enable it to allow the use of a callback.'),
+            array('mustRun', 'Symfony\Component\Process\Exception\LogicException', 'Output has been disabled, enable it to allow the use of a callback.'),
         );
     }
 
@@ -996,7 +1095,7 @@ abstract class AbstractProcessTest extends \PHPUnit_Framework_TestCase
         $p->disableOutput();
         $p->start();
         $this->setExpectedException('Symfony\Component\Process\Exception\LogicException', 'Output has been disabled.');
-        call_user_func(array($p, $fetchMethod));
+        $p->{$fetchMethod}();
     }
 
     public function provideOutputFetchingMethods()
@@ -1026,7 +1125,7 @@ abstract class AbstractProcessTest extends \PHPUnit_Framework_TestCase
             'include \''.__DIR__.'/PipeStdinInStdoutStdErrStreamSelect.php\';',
         );
 
-        if (defined('PHP_WINDOWS_VERSION_BUILD')) {
+        if ('\\' === DIRECTORY_SEPARATOR) {
             // Avoid XL buffers on Windows because of https://bugs.php.net/bug.php?id=65650
             $sizes = array(1, 2, 4, 8);
         } else {
@@ -1044,7 +1143,7 @@ abstract class AbstractProcessTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * provides default method names for simple getter/setter
+     * provides default method names for simple getter/setter.
      */
     public function methodProvider()
     {
@@ -1055,19 +1154,19 @@ abstract class AbstractProcessTest extends \PHPUnit_Framework_TestCase
             array('Env'),
             array('Stdin'),
             array('Input'),
-            array('Options')
+            array('Options'),
         );
 
         return $defaults;
     }
 
     /**
-     * @param string         $commandline
-     * @param null|string    $cwd
-     * @param null|array     $env
-     * @param null|string    $input
-     * @param int            $timeout
-     * @param array          $options
+     * @param string      $commandline
+     * @param null|string $cwd
+     * @param null|array  $env
+     * @param null|string $input
+     * @param int         $timeout
+     * @param array       $options
      *
      * @return Process
      */
diff --git a/vendor/symfony/process/Symfony/Component/Process/Tests/ExecutableFinderTest.php b/vendor/symfony/process/Symfony/Component/Process/Tests/ExecutableFinderTest.php
index 5fbe1e0..5033cda 100644
--- a/vendor/symfony/process/Symfony/Component/Process/Tests/ExecutableFinderTest.php
+++ b/vendor/symfony/process/Symfony/Component/Process/Tests/ExecutableFinderTest.php
@@ -94,7 +94,7 @@ class ExecutableFinderTest extends \PHPUnit_Framework_TestCase
             $this->markTestSkipped('Requires the PHP_BINARY constant');
         }
 
-        if (defined('PHP_WINDOWS_VERSION_BUILD')) {
+        if ('\\' === DIRECTORY_SEPARATOR) {
             $this->markTestSkipped('Cannot run test on windows');
         }
 
@@ -102,7 +102,7 @@ class ExecutableFinderTest extends \PHPUnit_Framework_TestCase
             $this->markTestSkipped('Cannot test when open_basedir is set');
         }
 
-        ini_set('open_basedir', dirname(PHP_BINARY).PATH_SEPARATOR.'/');
+        $this->iniSet('open_basedir', dirname(PHP_BINARY).PATH_SEPARATOR.'/');
 
         $finder = new ExecutableFinder();
         $result = $finder->find($this->getPhpBinaryName());
@@ -120,10 +120,12 @@ class ExecutableFinderTest extends \PHPUnit_Framework_TestCase
             $this->markTestSkipped('Requires the PHP_BINARY constant');
         }
 
-        $execPath = __DIR__.'/SignalListener.php';
+        if ('\\' === DIRECTORY_SEPARATOR) {
+            $this->markTestSkipped('Cannot run test on windows');
+        }
 
         $this->setPath('');
-        ini_set('open_basedir', PHP_BINARY.PATH_SEPARATOR.'/');
+        $this->iniSet('open_basedir', PHP_BINARY.PATH_SEPARATOR.'/');
 
         $finder = new ExecutableFinder();
         $result = $finder->find($this->getPhpBinaryName(), false);
@@ -133,7 +135,7 @@ class ExecutableFinderTest extends \PHPUnit_Framework_TestCase
 
     private function assertSamePath($expected, $tested)
     {
-        if (defined('PHP_WINDOWS_VERSION_BUILD')) {
+        if ('\\' === DIRECTORY_SEPARATOR) {
             $this->assertEquals(strtolower($expected), strtolower($tested));
         } else {
             $this->assertEquals($expected, $tested);
@@ -142,6 +144,6 @@ class ExecutableFinderTest extends \PHPUnit_Framework_TestCase
 
     private function getPhpBinaryName()
     {
-        return basename(PHP_BINARY, defined('PHP_WINDOWS_VERSION_BUILD') ? '.exe' : '');
+        return basename(PHP_BINARY, '\\' === DIRECTORY_SEPARATOR ? '.exe' : '');
     }
 }
diff --git a/vendor/symfony/process/Symfony/Component/Process/Tests/NonStopableProcess.php b/vendor/symfony/process/Symfony/Component/Process/Tests/NonStopableProcess.php
index d81abf4..692feeb 100644
--- a/vendor/symfony/process/Symfony/Component/Process/Tests/NonStopableProcess.php
+++ b/vendor/symfony/process/Symfony/Component/Process/Tests/NonStopableProcess.php
@@ -1,13 +1,12 @@
 <?php
 
 /**
- * Runs a PHP script that can be stopped only with a SIGKILL (9) signal for 3 seconds
+ * Runs a PHP script that can be stopped only with a SIGKILL (9) signal for 3 seconds.
  *
  * @args duration Run this script with a custom duration
  *
  * @example `php NonStopableProcess.php 42` will run the script for 42 seconds
  */
-
 function handleSignal($signal)
 {
     switch ($signal) {
@@ -18,14 +17,14 @@ function handleSignal($signal)
             $name = 'SIGINT';
             break;
         default:
-            $name = $signal . ' (unknown)';
+            $name = $signal.' (unknown)';
             break;
     }
 
     echo "received signal $name\n";
 }
 
-declare(ticks = 1);
+declare (ticks = 1);
 pcntl_signal(SIGTERM, 'handleSignal');
 pcntl_signal(SIGINT, 'handleSignal');
 
diff --git a/vendor/symfony/process/Symfony/Component/Process/Tests/PhpExecutableFinderTest.php b/vendor/symfony/process/Symfony/Component/Process/Tests/PhpExecutableFinderTest.php
index df48c4f..3acccac 100644
--- a/vendor/symfony/process/Symfony/Component/Process/Tests/PhpExecutableFinderTest.php
+++ b/vendor/symfony/process/Symfony/Component/Process/Tests/PhpExecutableFinderTest.php
@@ -19,7 +19,7 @@ use Symfony\Component\Process\PhpExecutableFinder;
 class PhpExecutableFinderTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * tests find() with the env var PHP_PATH
+     * tests find() with the env var PHP_PATH.
      */
     public function testFindWithPhpPath()
     {
@@ -34,14 +34,47 @@ class PhpExecutableFinderTest extends \PHPUnit_Framework_TestCase
         //not executable PHP_PATH
         putenv('PHP_PATH=/not/executable/php');
         $this->assertFalse($f->find(), '::find() returns false for not executable PHP');
+        $this->assertFalse($f->find(false), '::find() returns false for not executable PHP');
 
         //executable PHP_PATH
         putenv('PHP_PATH='.$current);
         $this->assertEquals($f->find(), $current, '::find() returns the executable PHP');
+        $this->assertEquals($f->find(false), $current, '::find() returns the executable PHP');
     }
 
     /**
-     * tests find() with default executable
+     * tests find() with the env var PHP_PATH.
+     */
+    public function testFindWithHHVM()
+    {
+        if (!defined('HHVM_VERSION')) {
+            $this->markTestSkipped('Should be executed in HHVM context.');
+        }
+
+        $f = new PhpExecutableFinder();
+
+        $current = $f->find();
+
+        $this->assertEquals($f->find(), $current.' --php', '::find() returns the executable PHP');
+        $this->assertEquals($f->find(false), $current, '::find() returns the executable PHP');
+    }
+
+    /**
+     * tests find() with the env var PHP_PATH.
+     */
+    public function testFindArguments()
+    {
+        $f = new PhpExecutableFinder();
+
+        if (defined('HHVM_VERSION')) {
+            $this->assertEquals($f->findArguments(), array('--php'), '::findArguments() returns HHVM arguments');
+        } else {
+            $this->assertEquals($f->findArguments(), array(), '::findArguments() returns no arguments');
+        }
+    }
+
+    /**
+     * tests find() with default executable.
      */
     public function testFindWithSuffix()
     {
@@ -56,7 +89,7 @@ class PhpExecutableFinderTest extends \PHPUnit_Framework_TestCase
         $current = $f->find();
 
         //TODO maybe php executable is custom or even Windows
-        if (defined('PHP_WINDOWS_VERSION_BUILD')) {
+        if ('\\' === DIRECTORY_SEPARATOR) {
             $this->assertTrue(is_executable($current));
             $this->assertTrue((bool) preg_match('/'.addSlashes(DIRECTORY_SEPARATOR).'php\.(exe|bat|cmd|com)$/i', $current), '::find() returns the executable PHP with suffixes');
         }
diff --git a/vendor/symfony/process/Symfony/Component/Process/Tests/PipeStdinInStdoutStdErrStreamSelect.php b/vendor/symfony/process/Symfony/Component/Process/Tests/PipeStdinInStdoutStdErrStreamSelect.php
index cdc7525..89d1f6a 100644
--- a/vendor/symfony/process/Symfony/Component/Process/Tests/PipeStdinInStdoutStdErrStreamSelect.php
+++ b/vendor/symfony/process/Symfony/Component/Process/Tests/PipeStdinInStdoutStdErrStreamSelect.php
@@ -26,22 +26,22 @@ while ($read || $write) {
     }
 
     if (in_array(STDOUT, $w) && strlen($out) > 0) {
-         $written = fwrite(STDOUT, (binary) $out, 32768);
-         if (false === $written) {
-             die(ERR_WRITE_FAILED);
-         }
-         $out = (binary) substr($out, $written);
+        $written = fwrite(STDOUT, (binary) $out, 32768);
+        if (false === $written) {
+            die(ERR_WRITE_FAILED);
+        }
+        $out = (binary) substr($out, $written);
     }
     if (null === $read && strlen($out) < 1) {
         $write = array_diff($write, array(STDOUT));
     }
 
     if (in_array(STDERR, $w) && strlen($err) > 0) {
-         $written = fwrite(STDERR, (binary) $err, 32768);
-         if (false === $written) {
-             die(ERR_WRITE_FAILED);
-         }
-         $err = (binary) substr($err, $written);
+        $written = fwrite(STDERR, (binary) $err, 32768);
+        if (false === $written) {
+            die(ERR_WRITE_FAILED);
+        }
+        $err = (binary) substr($err, $written);
     }
     if (null === $read && strlen($err) < 1) {
         $write = array_diff($write, array(STDERR));
diff --git a/vendor/symfony/process/Symfony/Component/Process/Tests/ProcessBuilderTest.php b/vendor/symfony/process/Symfony/Component/Process/Tests/ProcessBuilderTest.php
index 56e4052..02a960d 100644
--- a/vendor/symfony/process/Symfony/Component/Process/Tests/ProcessBuilderTest.php
+++ b/vendor/symfony/process/Symfony/Component/Process/Tests/ProcessBuilderTest.php
@@ -102,14 +102,14 @@ class ProcessBuilderTest extends \PHPUnit_Framework_TestCase
         $pb->setPrefix('/usr/bin/php');
 
         $proc = $pb->setArguments(array('-v'))->getProcess();
-        if (defined('PHP_WINDOWS_VERSION_BUILD')) {
+        if ('\\' === DIRECTORY_SEPARATOR) {
             $this->assertEquals('"/usr/bin/php" "-v"', $proc->getCommandLine());
         } else {
             $this->assertEquals("'/usr/bin/php' '-v'", $proc->getCommandLine());
         }
 
         $proc = $pb->setArguments(array('-i'))->getProcess();
-        if (defined('PHP_WINDOWS_VERSION_BUILD')) {
+        if ('\\' === DIRECTORY_SEPARATOR) {
             $this->assertEquals('"/usr/bin/php" "-i"', $proc->getCommandLine());
         } else {
             $this->assertEquals("'/usr/bin/php' '-i'", $proc->getCommandLine());
@@ -122,14 +122,14 @@ class ProcessBuilderTest extends \PHPUnit_Framework_TestCase
         $pb->setPrefix(array('/usr/bin/php', 'composer.phar'));
 
         $proc = $pb->setArguments(array('-v'))->getProcess();
-        if (defined('PHP_WINDOWS_VERSION_BUILD')) {
+        if ('\\' === DIRECTORY_SEPARATOR) {
             $this->assertEquals('"/usr/bin/php" "composer.phar" "-v"', $proc->getCommandLine());
         } else {
             $this->assertEquals("'/usr/bin/php' 'composer.phar' '-v'", $proc->getCommandLine());
         }
 
         $proc = $pb->setArguments(array('-i'))->getProcess();
-        if (defined('PHP_WINDOWS_VERSION_BUILD')) {
+        if ('\\' === DIRECTORY_SEPARATOR) {
             $this->assertEquals('"/usr/bin/php" "composer.phar" "-i"', $proc->getCommandLine());
         } else {
             $this->assertEquals("'/usr/bin/php' 'composer.phar' '-i'", $proc->getCommandLine());
@@ -141,7 +141,7 @@ class ProcessBuilderTest extends \PHPUnit_Framework_TestCase
         $pb = new ProcessBuilder(array('%path%', 'foo " bar', '%baz%baz'));
         $proc = $pb->getProcess();
 
-        if (defined('PHP_WINDOWS_VERSION_BUILD')) {
+        if ('\\' === DIRECTORY_SEPARATOR) {
             $this->assertSame('^%"path"^% "foo \\" bar" "%baz%baz"', $proc->getCommandLine());
         } else {
             $this->assertSame("'%path%' 'foo \" bar' '%baz%baz'", $proc->getCommandLine());
@@ -154,7 +154,7 @@ class ProcessBuilderTest extends \PHPUnit_Framework_TestCase
         $pb->setPrefix('%prefix%');
         $proc = $pb->getProcess();
 
-        if (defined('PHP_WINDOWS_VERSION_BUILD')) {
+        if ('\\' === DIRECTORY_SEPARATOR) {
             $this->assertSame('^%"prefix"^% "arg"', $proc->getCommandLine());
         } else {
             $this->assertSame("'%prefix%' 'arg'", $proc->getCommandLine());
@@ -175,7 +175,7 @@ class ProcessBuilderTest extends \PHPUnit_Framework_TestCase
             ->setPrefix('/usr/bin/php')
             ->getProcess();
 
-        if (defined('PHP_WINDOWS_VERSION_BUILD')) {
+        if ('\\' === DIRECTORY_SEPARATOR) {
             $this->assertEquals('"/usr/bin/php"', $process->getCommandLine());
         } else {
             $this->assertEquals("'/usr/bin/php'", $process->getCommandLine());
@@ -187,7 +187,7 @@ class ProcessBuilderTest extends \PHPUnit_Framework_TestCase
         $process = ProcessBuilder::create(array('/usr/bin/php'))
             ->getProcess();
 
-        if (defined('PHP_WINDOWS_VERSION_BUILD')) {
+        if ('\\' === DIRECTORY_SEPARATOR) {
             $this->assertEquals('"/usr/bin/php"', $process->getCommandLine());
         } else {
             $this->assertEquals("'/usr/bin/php'", $process->getCommandLine());
@@ -215,7 +215,7 @@ class ProcessBuilderTest extends \PHPUnit_Framework_TestCase
 
     /**
      * @expectedException \Symfony\Component\Process\Exception\InvalidArgumentException
-     * @expectedExceptionMessage Symfony\Component\Process\ProcessBuilder::setInput only accepts strings.
+     * @expectedExceptionMessage Symfony\Component\Process\ProcessBuilder::setInput only accepts strings or stream resources.
      */
     public function testInvalidInput()
     {
diff --git a/vendor/symfony/process/Symfony/Component/Process/Tests/ProcessFailedExceptionTest.php b/vendor/symfony/process/Symfony/Component/Process/Tests/ProcessFailedExceptionTest.php
index c48648f..20753df 100644
--- a/vendor/symfony/process/Symfony/Component/Process/Tests/ProcessFailedExceptionTest.php
+++ b/vendor/symfony/process/Symfony/Component/Process/Tests/ProcessFailedExceptionTest.php
@@ -19,7 +19,7 @@ use Symfony\Component\Process\Exception\ProcessFailedException;
 class ProcessFailedExceptionTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * tests ProcessFailedException throws exception if the process was successful
+     * tests ProcessFailedException throws exception if the process was successful.
      */
     public function testProcessFailedExceptionThrowsException()
     {
@@ -42,7 +42,7 @@ class ProcessFailedExceptionTest extends \PHPUnit_Framework_TestCase
 
     /**
      * tests ProcessFailedException uses information from process output
-     * to generate exception message
+     * to generate exception message.
      */
     public function testProcessFailedExceptionPopulatesInformationFromProcessOutput()
     {
diff --git a/vendor/symfony/process/Symfony/Component/Process/Tests/ProcessUtilsTest.php b/vendor/symfony/process/Symfony/Component/Process/Tests/ProcessUtilsTest.php
index 8ba94c1..e6564cd 100644
--- a/vendor/symfony/process/Symfony/Component/Process/Tests/ProcessUtilsTest.php
+++ b/vendor/symfony/process/Symfony/Component/Process/Tests/ProcessUtilsTest.php
@@ -25,7 +25,7 @@ class ProcessUtilsTest extends \PHPUnit_Framework_TestCase
 
     public function dataArguments()
     {
-        if (defined('PHP_WINDOWS_VERSION_BUILD')) {
+        if ('\\' === DIRECTORY_SEPARATOR) {
             return array(
                 array('"\"php\" \"-v\""', '"php" "-v"'),
                 array('"foo bar"', 'foo bar'),
diff --git a/vendor/symfony/process/Symfony/Component/Process/Tests/SigchildDisabledProcessTest.php b/vendor/symfony/process/Symfony/Component/Process/Tests/SigchildDisabledProcessTest.php
index 6d10a7c..fdae5ec 100644
--- a/vendor/symfony/process/Symfony/Component/Process/Tests/SigchildDisabledProcessTest.php
+++ b/vendor/symfony/process/Symfony/Component/Process/Tests/SigchildDisabledProcessTest.php
@@ -53,6 +53,15 @@ class SigchildDisabledProcessTest extends AbstractProcessTest
      * @expectedException \Symfony\Component\Process\Exception\RuntimeException
      * @expectedExceptionMessage This PHP has been compiled with --enable-sigchild. You must use setEnhanceSigchildCompatibility() to use this method.
      */
+    public function testMustRun()
+    {
+        parent::testMustRun();
+    }
+
+    /**
+     * @expectedException \Symfony\Component\Process\Exception\RuntimeException
+     * @expectedExceptionMessage This PHP has been compiled with --enable-sigchild. You must use setEnhanceSigchildCompatibility() to use this method.
+     */
     public function testSuccessfulMustRunHasCorrectExitCode()
     {
         parent::testSuccessfulMustRunHasCorrectExitCode();
@@ -76,7 +85,7 @@ class SigchildDisabledProcessTest extends AbstractProcessTest
 
     /**
      * @expectedException \Symfony\Component\Process\Exception\RuntimeException
-     * @expectedExceptionMessage his PHP has been compiled with --enable-sigchild. Term signal can not be retrieved.
+     * @expectedExceptionMessage This PHP has been compiled with --enable-sigchild. Term signal can not be retrieved.
      */
     public function testProcessWithTermSignal()
     {
@@ -85,7 +94,7 @@ class SigchildDisabledProcessTest extends AbstractProcessTest
 
     /**
      * @expectedException \Symfony\Component\Process\Exception\RuntimeException
-     * @expectedExceptionMessage his PHP has been compiled with --enable-sigchild. Term signal can not be retrieved.
+     * @expectedExceptionMessage This PHP has been compiled with --enable-sigchild. Term signal can not be retrieved.
      */
     public function testProcessIsNotSignaled()
     {
@@ -94,7 +103,7 @@ class SigchildDisabledProcessTest extends AbstractProcessTest
 
     /**
      * @expectedException \Symfony\Component\Process\Exception\RuntimeException
-     * @expectedExceptionMessage his PHP has been compiled with --enable-sigchild. Term signal can not be retrieved.
+     * @expectedExceptionMessage This PHP has been compiled with --enable-sigchild. Term signal can not be retrieved.
      */
     public function testProcessWithoutTermSignal()
     {
@@ -232,6 +241,15 @@ class SigchildDisabledProcessTest extends AbstractProcessTest
         $this->markTestSkipped('Signal (required for timeout) is not supported in sigchild environment');
     }
 
+    public function provideStartMethods()
+    {
+        return array(
+            array('start', 'Symfony\Component\Process\Exception\LogicException', 'Output has been disabled, enable it to allow the use of a callback.'),
+            array('run', 'Symfony\Component\Process\Exception\LogicException', 'Output has been disabled, enable it to allow the use of a callback.'),
+            array('mustRun', 'Symfony\Component\Process\Exception\RuntimeException', 'This PHP has been compiled with --enable-sigchild. You must use setEnhanceSigchildCompatibility() to use this method.'),
+        );
+    }
+
     /**
      * {@inheritdoc}
      */
diff --git a/vendor/symfony/process/Symfony/Component/Process/Tests/SigchildEnabledProcessTest.php b/vendor/symfony/process/Symfony/Component/Process/Tests/SigchildEnabledProcessTest.php
index 3fea3ba..2668a9b 100644
--- a/vendor/symfony/process/Symfony/Component/Process/Tests/SigchildEnabledProcessTest.php
+++ b/vendor/symfony/process/Symfony/Component/Process/Tests/SigchildEnabledProcessTest.php
@@ -114,7 +114,7 @@ class SigchildEnabledProcessTest extends AbstractProcessTest
 
     public function testStartAfterATimeout()
     {
-        if (defined('PHP_WINDOWS_VERSION_BUILD')) {
+        if ('\\' === DIRECTORY_SEPARATOR) {
             $this->markTestSkipped('Restarting a timed-out process on Windows is not supported in sigchild environment');
         }
         parent::testStartAfterATimeout();
diff --git a/vendor/symfony/process/Symfony/Component/Process/Tests/SignalListener.php b/vendor/symfony/process/Symfony/Component/Process/Tests/SignalListener.php
index 143515d..32910e1 100644
--- a/vendor/symfony/process/Symfony/Component/Process/Tests/SignalListener.php
+++ b/vendor/symfony/process/Symfony/Component/Process/Tests/SignalListener.php
@@ -1,11 +1,11 @@
 <?php
 
 // required for signal handling
-declare(ticks = 1);
+declare (ticks = 1);
 
 pcntl_signal(SIGUSR1, function () {echo "Caught SIGUSR1"; exit;});
 
-$n=0;
+$n = 0;
 
 // ticks require activity to work - sleep(4); does not work
 while ($n < 400) {
diff --git a/vendor/symfony/process/Symfony/Component/Process/Tests/SimpleProcessTest.php b/vendor/symfony/process/Symfony/Component/Process/Tests/SimpleProcessTest.php
index cd206ea..0a8b126 100644
--- a/vendor/symfony/process/Symfony/Component/Process/Tests/SimpleProcessTest.php
+++ b/vendor/symfony/process/Symfony/Component/Process/Tests/SimpleProcessTest.php
@@ -154,7 +154,7 @@ class SimpleProcessTest extends AbstractProcessTest
             $process->run(function () use ($process) {
                 $process->stop();
             });
-        } catch (RuntimeException $e) {
+        } catch (\RuntimeException $e) {
             $this->fail('A call to stop() is not expected to cause wait() to throw a RuntimeException');
         }
     }
@@ -170,7 +170,7 @@ class SimpleProcessTest extends AbstractProcessTest
                     $process->signal(defined('SIGKILL') ? SIGKILL : 9);
                 }
             });
-        } catch (RuntimeException $e) {
+        } catch (\RuntimeException $e) {
             $this->fail('A call to signal() is not expected to cause wait() to throw a RuntimeException');
         }
     }
@@ -186,7 +186,7 @@ class SimpleProcessTest extends AbstractProcessTest
                     $process->signal(defined('SIGTERM') ? SIGTERM : 15);
                 }
             });
-        } catch (RuntimeException $e) {
+        } catch (\RuntimeException $e) {
             $this->fail('A call to signal() is not expected to cause wait() to throw a RuntimeException');
         }
     }
diff --git a/vendor/symfony/process/Symfony/Component/Process/composer.json b/vendor/symfony/process/Symfony/Component/Process/composer.json
index b5dbfe1..39fa97c 100644
--- a/vendor/symfony/process/Symfony/Component/Process/composer.json
+++ b/vendor/symfony/process/Symfony/Component/Process/composer.json
@@ -25,7 +25,7 @@
     "minimum-stability": "dev",
     "extra": {
         "branch-alias": {
-            "dev-master": "2.5-dev"
+            "dev-master": "2.6-dev"
         }
     }
 }
diff --git a/vendor/symfony/process/Symfony/Component/Process/phpunit.xml.dist b/vendor/symfony/process/Symfony/Component/Process/phpunit.xml.dist
index fcb230a..8f147bc 100644
--- a/vendor/symfony/process/Symfony/Component/Process/phpunit.xml.dist
+++ b/vendor/symfony/process/Symfony/Component/Process/phpunit.xml.dist
@@ -6,6 +6,10 @@
          colors="true"
          bootstrap="vendor/autoload.php"
 >
+    <php>
+        <!-- Silence E_USER_DEPRECATED (-16385 == -1 & ~E_USER_DEPRECATED) -->
+        <ini name="error_reporting" value="-16385"/>
+    </php>
     <testsuites>
         <testsuite name="Symfony Process Component Test Suite">
             <directory>./Tests/</directory>
